Skip to content

Commit 63e68b1

Browse files
committed
fine tune tests and introduce RenderBehaviorForTesting
1 parent a1765f7 commit 63e68b1

File tree

8 files changed

+65
-73
lines changed

8 files changed

+65
-73
lines changed

modules/markup/html.go

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -442,12 +442,11 @@ func createLink(href, content, class string) *html.Node {
442442
a := &html.Node{
443443
Type: html.ElementNode,
444444
Data: atom.A.String(),
445-
Attr: []html.Attribute{
446-
{Key: "href", Val: href},
447-
{Key: "data-markdown-generated-content"},
448-
},
445+
Attr: []html.Attribute{{Key: "href", Val: href}},
446+
}
447+
if !RenderBehaviorForTesting.DisableInternalAttributes {
448+
a.Attr = append(a.Attr, html.Attribute{Key: "data-markdown-generated-content"})
449449
}
450-
451450
if class != "" {
452451
a.Attr = append(a.Attr, html.Attribute{Key: "class", Val: class})
453452
}

modules/markup/html_internal_test.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111

1212
"code.gitea.io/gitea/modules/git"
1313
"code.gitea.io/gitea/modules/setting"
14+
testModule "code.gitea.io/gitea/modules/test"
1415
"code.gitea.io/gitea/modules/util"
1516

1617
"github.com/stretchr/testify/assert"
@@ -341,7 +342,7 @@ func TestRender_AutoLink(t *testing.T) {
341342

342343
func TestRender_FullIssueURLs(t *testing.T) {
343344
setting.AppURL = TestAppURL
344-
345+
defer testModule.MockVariableValue(&RenderBehaviorForTesting.DisableInternalAttributes, true)()
345346
test := func(input, expected string) {
346347
var result strings.Builder
347348
err := postProcess(&RenderContext{
@@ -352,9 +353,7 @@ func TestRender_FullIssueURLs(t *testing.T) {
352353
Metas: localMetas,
353354
}, []processor{fullIssuePatternProcessor}, strings.NewReader(input), &result)
354355
assert.NoError(t, err)
355-
actual := result.String()
356-
actual = strings.ReplaceAll(actual, ` data-markdown-generated-content=""`, "")
357-
assert.Equal(t, expected, actual)
356+
assert.Equal(t, expected, result.String())
358357
}
359358
test("Here is a link https://git.osgeo.org/gogs/postgis/postgis/pulls/6",
360359
"Here is a link https://git.osgeo.org/gogs/postgis/postgis/pulls/6")

modules/markup/html_test.go

Lines changed: 10 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414
"code.gitea.io/gitea/modules/markup"
1515
"code.gitea.io/gitea/modules/markup/markdown"
1616
"code.gitea.io/gitea/modules/setting"
17+
testModule "code.gitea.io/gitea/modules/test"
1718
"code.gitea.io/gitea/modules/util"
1819

1920
"github.com/stretchr/testify/assert"
@@ -104,7 +105,7 @@ func TestRender_Commits(t *testing.T) {
104105

105106
func TestRender_CrossReferences(t *testing.T) {
106107
setting.AppURL = markup.TestAppURL
107-
108+
defer testModule.MockVariableValue(&markup.RenderBehaviorForTesting.DisableInternalAttributes, true)()
108109
test := func(input, expected string) {
109110
buffer, err := markup.RenderString(&markup.RenderContext{
110111
Ctx: git.DefaultContext,
@@ -116,9 +117,7 @@ func TestRender_CrossReferences(t *testing.T) {
116117
Metas: localMetas,
117118
}, input)
118119
assert.NoError(t, err)
119-
actual := strings.TrimSpace(buffer)
120-
actual = strings.ReplaceAll(actual, ` data-markdown-generated-content=""`, "")
121-
assert.Equal(t, strings.TrimSpace(expected), actual)
120+
assert.Equal(t, strings.TrimSpace(expected), strings.TrimSpace(buffer))
122121
}
123122

124123
test(
@@ -148,7 +147,7 @@ func TestRender_CrossReferences(t *testing.T) {
148147

149148
func TestRender_links(t *testing.T) {
150149
setting.AppURL = markup.TestAppURL
151-
150+
defer testModule.MockVariableValue(&markup.RenderBehaviorForTesting.DisableInternalAttributes, true)()
152151
test := func(input, expected string) {
153152
buffer, err := markup.RenderString(&markup.RenderContext{
154153
Ctx: git.DefaultContext,
@@ -158,9 +157,7 @@ func TestRender_links(t *testing.T) {
158157
},
159158
}, input)
160159
assert.NoError(t, err)
161-
actual := strings.TrimSpace(buffer)
162-
actual = strings.ReplaceAll(actual, ` data-markdown-generated-content=""`, "")
163-
assert.Equal(t, strings.TrimSpace(expected), actual)
160+
assert.Equal(t, strings.TrimSpace(expected), strings.TrimSpace(buffer))
164161
}
165162

166163
oldCustomURLSchemes := setting.Markdown.CustomURLSchemes
@@ -261,7 +258,7 @@ func TestRender_links(t *testing.T) {
261258

262259
func TestRender_email(t *testing.T) {
263260
setting.AppURL = markup.TestAppURL
264-
261+
defer testModule.MockVariableValue(&markup.RenderBehaviorForTesting.DisableInternalAttributes, true)()
265262
test := func(input, expected string) {
266263
res, err := markup.RenderString(&markup.RenderContext{
267264
Ctx: git.DefaultContext,
@@ -271,9 +268,7 @@ func TestRender_email(t *testing.T) {
271268
},
272269
}, input)
273270
assert.NoError(t, err)
274-
actual := strings.TrimSpace(res)
275-
actual = strings.ReplaceAll(actual, ` data-markdown-generated-content=""`, "")
276-
assert.Equal(t, strings.TrimSpace(expected), actual)
271+
assert.Equal(t, strings.TrimSpace(expected), strings.TrimSpace(res))
277272
}
278273
// Text that should be turned into email link
279274

@@ -604,11 +599,7 @@ func Test_ParseClusterFuzz(t *testing.T) {
604599
func TestPostProcess_RenderDocument(t *testing.T) {
605600
setting.AppURL = markup.TestAppURL
606601
setting.StaticURLPrefix = markup.TestAppURL // can't run standalone
607-
608-
localMetas := map[string]string{
609-
"user": "go-gitea",
610-
"repo": "gitea",
611-
}
602+
defer testModule.MockVariableValue(&markup.RenderBehaviorForTesting.DisableInternalAttributes, true)()
612603

613604
test := func(input, expected string) {
614605
var res strings.Builder
@@ -618,12 +609,10 @@ func TestPostProcess_RenderDocument(t *testing.T) {
618609
AbsolutePrefix: true,
619610
Base: "https://example.com",
620611
},
621-
Metas: localMetas,
612+
Metas: map[string]string{"user": "go-gitea", "repo": "gitea"},
622613
}, strings.NewReader(input), &res)
623614
assert.NoError(t, err)
624-
actual := strings.TrimSpace(res.String())
625-
actual = strings.ReplaceAll(actual, ` data-markdown-generated-content=""`, "")
626-
assert.Equal(t, strings.TrimSpace(expected), actual)
615+
assert.Equal(t, strings.TrimSpace(expected), strings.TrimSpace(res.String()))
627616
}
628617

629618
// Issue index shouldn't be post processing in a document.

modules/markup/markdown/goldmark.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -72,11 +72,11 @@ func (g *ASTTransformer) Transform(node *ast.Document, reader text.Reader, pc pa
7272
g.transformList(ctx, v, rc)
7373
case *ast.Text:
7474
if v.SoftLineBreak() && !v.HardLineBreak() {
75-
// TODO: this was a quite unclear part
75+
// TODO: this was a quite unclear part, old code: `if metas["mode"] != "document" { use comment link break setting }`
7676
// many places render non-comment contents with no mode=document, then these contents also use comment's hard line break setting
7777
// especially in many tests.
78-
if ctx.UseHardLineBreak.Has() {
79-
v.SetHardLineBreak(ctx.UseHardLineBreak.Value())
78+
if markup.RenderBehaviorForTesting.ForceHardLineBreak {
79+
v.SetHardLineBreak(true)
8080
} else if ctx.ContentMode == markup.RenderContentAsComment {
8181
v.SetHardLineBreak(setting.Markdown.EnableHardLineBreakInComments)
8282
} else {

modules/markup/markdown/markdown_test.go

Lines changed: 21 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@ import (
1414
"code.gitea.io/gitea/modules/log"
1515
"code.gitea.io/gitea/modules/markup"
1616
"code.gitea.io/gitea/modules/markup/markdown"
17-
"code.gitea.io/gitea/modules/optional"
1817
"code.gitea.io/gitea/modules/setting"
1918
"code.gitea.io/gitea/modules/svg"
19+
"code.gitea.io/gitea/modules/test"
2020
"code.gitea.io/gitea/modules/util"
2121

2222
"github.com/stretchr/testify/assert"
@@ -297,24 +297,22 @@ This PR has been generated by [Renovate Bot](https://github.com/renovatebot/reno
297297
}
298298

299299
func TestTotal_RenderWiki(t *testing.T) {
300+
defer test.MockVariableValue(&markup.RenderBehaviorForTesting.ForceHardLineBreak, true)()
301+
defer test.MockVariableValue(&markup.RenderBehaviorForTesting.DisableInternalAttributes, true)()
300302
setting.AppURL = AppURL
301-
302303
answers := testAnswers(util.URLJoin(FullURL, "wiki"), util.URLJoin(FullURL, "wiki", "raw"))
303-
304304
for i := 0; i < len(sameCases); i++ {
305305
line, err := markdown.RenderString(&markup.RenderContext{
306306
Ctx: git.DefaultContext,
307307
Links: markup.Links{
308308
Base: FullURL,
309309
},
310-
Repo: newMockRepo(testRepoOwnerName, testRepoName),
311-
Metas: localMetas,
312-
ContentMode: markup.RenderContentAsWiki,
313-
UseHardLineBreak: optional.Some(true),
310+
Repo: newMockRepo(testRepoOwnerName, testRepoName),
311+
Metas: localMetas,
312+
ContentMode: markup.RenderContentAsWiki,
314313
}, sameCases[i])
315314
assert.NoError(t, err)
316-
actual := strings.ReplaceAll(string(line), ` data-markdown-generated-content=""`, "")
317-
assert.Equal(t, answers[i], actual)
315+
assert.Equal(t, answers[i], string(line))
318316
}
319317

320318
testCases := []string{
@@ -339,30 +337,27 @@ func TestTotal_RenderWiki(t *testing.T) {
339337
ContentMode: markup.RenderContentAsWiki,
340338
}, testCases[i])
341339
assert.NoError(t, err)
342-
actual := strings.ReplaceAll(string(line), ` data-markdown-generated-content=""`, "")
343-
assert.EqualValues(t, testCases[i+1], actual)
340+
assert.EqualValues(t, testCases[i+1], string(line))
344341
}
345342
}
346343

347344
func TestTotal_RenderString(t *testing.T) {
345+
defer test.MockVariableValue(&markup.RenderBehaviorForTesting.ForceHardLineBreak, true)()
346+
defer test.MockVariableValue(&markup.RenderBehaviorForTesting.DisableInternalAttributes, true)()
348347
setting.AppURL = AppURL
349-
350348
answers := testAnswers(util.URLJoin(FullURL, "src", "master"), util.URLJoin(FullURL, "media", "master"))
351-
352349
for i := 0; i < len(sameCases); i++ {
353350
line, err := markdown.RenderString(&markup.RenderContext{
354351
Ctx: git.DefaultContext,
355352
Links: markup.Links{
356353
Base: FullURL,
357354
BranchPath: "master",
358355
},
359-
Repo: newMockRepo(testRepoOwnerName, testRepoName),
360-
Metas: localMetas,
361-
UseHardLineBreak: optional.Some(true),
356+
Repo: newMockRepo(testRepoOwnerName, testRepoName),
357+
Metas: localMetas,
362358
}, sameCases[i])
363359
assert.NoError(t, err)
364-
actual := strings.ReplaceAll(string(line), ` data-markdown-generated-content=""`, "")
365-
assert.Equal(t, answers[i], actual)
360+
assert.Equal(t, answers[i], string(line))
366361
}
367362

368363
testCases := []string{}
@@ -431,7 +426,8 @@ func TestRenderSiblingImages_Issue12925(t *testing.T) {
431426
expected := `<p><a href="/image1" target="_blank" rel="nofollow noopener"><img src="/image1" alt="image1"></a><br>
432427
<a href="/image2" target="_blank" rel="nofollow noopener"><img src="/image2" alt="image2"></a></p>
433428
`
434-
res, err := markdown.RenderRawString(&markup.RenderContext{Ctx: git.DefaultContext, UseHardLineBreak: optional.Some(true)}, testcase)
429+
defer test.MockVariableValue(&markup.RenderBehaviorForTesting.ForceHardLineBreak, true)()
430+
res, err := markdown.RenderRawString(&markup.RenderContext{Ctx: git.DefaultContext}, testcase)
435431
assert.NoError(t, err)
436432
assert.Equal(t, expected, res)
437433
}
@@ -999,16 +995,16 @@ space</p>
999995
},
1000996
}
1001997

998+
defer test.MockVariableValue(&markup.RenderBehaviorForTesting.ForceHardLineBreak, true)()
999+
defer test.MockVariableValue(&markup.RenderBehaviorForTesting.DisableInternalAttributes, true)()
10021000
for i, c := range cases {
10031001
result, err := markdown.RenderString(&markup.RenderContext{
1004-
Ctx: context.Background(),
1005-
Links: c.Links,
1006-
ContentMode: util.Iif(c.IsWiki, markup.RenderContentAsWiki, markup.RenderContentAsDefault),
1007-
UseHardLineBreak: optional.Some(true),
1002+
Ctx: context.Background(),
1003+
Links: c.Links,
1004+
ContentMode: util.Iif(c.IsWiki, markup.RenderContentAsWiki, markup.RenderContentAsDefault),
10081005
}, input)
10091006
assert.NoError(t, err, "Unexpected error in testcase: %v", i)
1010-
actual := strings.ReplaceAll(string(result), ` data-markdown-generated-content=""`, "")
1011-
assert.Equal(t, c.Expected, actual, "Unexpected result in testcase %v", i)
1007+
assert.Equal(t, c.Expected, string(result), "Unexpected result in testcase %v", i)
10121008
}
10131009
}
10141010

modules/markup/render.go

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import (
1313

1414
"code.gitea.io/gitea/modules/git"
1515
"code.gitea.io/gitea/modules/gitrepo"
16-
"code.gitea.io/gitea/modules/optional"
1716
"code.gitea.io/gitea/modules/setting"
1817
"code.gitea.io/gitea/modules/util"
1918

@@ -37,6 +36,18 @@ const (
3736
RenderContentAsWiki RenderContentMode = "wiki"
3837
)
3938

39+
var RenderBehaviorForTesting struct {
40+
// Markdown line break rendering has 2 behaviors: keep soft ("\n" for comments) or use hard (replace "\n" with "<br>" for non-comments)
41+
// In history, there was a mess:
42+
// * The behavior was controlled by `Metas["mode"] != "document",
43+
// * However, many places render the content without setting "mode" in Metas, all these places used comment line break setting incorrectly
44+
ForceHardLineBreak bool
45+
46+
// Gitea will emit some internal attributes for various purposes, these attributes don't affect rendering.
47+
// But there are too many hard-coded test cases, to avoid changing all of them again and again, we can disable emitting these internal attributes.
48+
DisableInternalAttributes bool
49+
}
50+
4051
// RenderContext represents a render context
4152
type RenderContext struct {
4253
Ctx context.Context
@@ -49,8 +60,6 @@ type RenderContext struct {
4960
// what the content will be used for: eg: for comment or for wiki? or just render a file?
5061
ContentMode RenderContentMode
5162

52-
UseHardLineBreak optional.Option[bool]
53-
5463
Links Links // special link references for rendering, especially when there is a branch/tree path
5564
Metas map[string]string // user&repo, format&style&regexp (for external issue pattern), teams&org (for mention), BranchNameSubURL(for iframe&asciicast)
5665
DefaultLink string // TODO: need to figure out

modules/templates/util_render_test.go

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import (
1515
"code.gitea.io/gitea/modules/git"
1616
"code.gitea.io/gitea/modules/log"
1717
"code.gitea.io/gitea/modules/markup"
18+
"code.gitea.io/gitea/modules/test"
1819
"code.gitea.io/gitea/modules/translation"
1920

2021
"github.com/stretchr/testify/assert"
@@ -72,6 +73,7 @@ func newTestRenderUtils() *RenderUtils {
7273
}
7374

7475
func TestRenderCommitBody(t *testing.T) {
76+
defer test.MockVariableValue(&markup.RenderBehaviorForTesting.DisableInternalAttributes, true)()
7577
type args struct {
7678
msg string
7779
metas map[string]string
@@ -129,23 +131,21 @@ com 88fc37a3c0a4dda553bdcfc80c178a58247f42fb mit
129131
<a href="/mention-user" class="mention">@mention-user</a> test
130132
<a href="/user13/repo11/issues/123" class="ref-issue">#123</a>
131133
space`
132-
actual := strings.ReplaceAll(string(newTestRenderUtils().RenderCommitBody(testInput(), testMetas)), ` data-markdown-generated-content=""`, "")
133-
assert.EqualValues(t, expected, actual)
134+
assert.EqualValues(t, expected, string(newTestRenderUtils().RenderCommitBody(testInput(), testMetas)))
134135
}
135136

136137
func TestRenderCommitMessage(t *testing.T) {
137138
expected := `space <a href="/mention-user" data-markdown-generated-content="" class="mention">@mention-user</a> `
138-
139139
assert.EqualValues(t, expected, newTestRenderUtils().RenderCommitMessage(testInput(), testMetas))
140140
}
141141

142142
func TestRenderCommitMessageLinkSubject(t *testing.T) {
143143
expected := `<a href="https://example.com/link" class="default-link muted">space </a><a href="/mention-user" data-markdown-generated-content="" class="mention">@mention-user</a>`
144-
145144
assert.EqualValues(t, expected, newTestRenderUtils().RenderCommitMessageLinkSubject(testInput(), "https://example.com/link", testMetas))
146145
}
147146

148147
func TestRenderIssueTitle(t *testing.T) {
148+
defer test.MockVariableValue(&markup.RenderBehaviorForTesting.DisableInternalAttributes, true)()
149149
expected := ` space @mention-user<SPACE><SPACE>
150150
/just/a/path.bin
151151
https://example.com/file.bin
@@ -168,11 +168,11 @@ [email protected]
168168
space<SPACE><SPACE>
169169
`
170170
expected = strings.ReplaceAll(expected, "<SPACE>", " ")
171-
actual := strings.ReplaceAll(string(newTestRenderUtils().RenderIssueTitle(testInput(), testMetas)), ` data-markdown-generated-content=""`, "")
172-
assert.EqualValues(t, expected, actual)
171+
assert.EqualValues(t, expected, string(newTestRenderUtils().RenderIssueTitle(testInput(), testMetas)))
173172
}
174173

175174
func TestRenderMarkdownToHtml(t *testing.T) {
175+
defer test.MockVariableValue(&markup.RenderBehaviorForTesting.DisableInternalAttributes, true)()
176176
expected := `<p>space <a href="/mention-user" rel="nofollow">@mention-user</a><br/>
177177
/just/a/path.bin
178178
<a href="https://example.com/file.bin" rel="nofollow">https://example.com/file.bin</a>
@@ -194,8 +194,7 @@ com 88fc37a3c0a4dda553bdcfc80c178a58247f42fb mit
194194
#123
195195
space</p>
196196
`
197-
actual := strings.ReplaceAll(string(newTestRenderUtils().MarkdownToHtml(testInput())), ` data-markdown-generated-content=""`, "")
198-
assert.Equal(t, expected, actual)
197+
assert.Equal(t, expected, string(newTestRenderUtils().MarkdownToHtml(testInput())))
199198
}
200199

201200
func TestRenderLabels(t *testing.T) {

0 commit comments

Comments
 (0)