@ -9,8 +9,6 @@ import (
"strings"
"testing"
"code.gitea.io/gitea/modules/git"
"code.gitea.io/gitea/modules/gitrepo"
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/markup"
"code.gitea.io/gitea/modules/markup/markdown"
@ -37,76 +35,23 @@ var localMetas = map[string]string{
"repo" : testRepoName ,
}
var localWikiMetas = map [ string ] string {
"user" : testRepoOwnerName ,
"repo" : testRepoName ,
"markupContentMode" : "wiki" ,
}
type mockRepo struct {
OwnerName string
RepoName string
}
func ( m * mockRepo ) GetOwnerName ( ) string {
return m . OwnerName
}
func ( m * mockRepo ) GetName ( ) string {
return m . RepoName
}
func newMockRepo ( ownerName , repoName string ) gitrepo . Repository {
return & mockRepo {
OwnerName : ownerName ,
RepoName : repoName ,
}
}
func TestRender_StandardLinks ( t * testing . T ) {
setting . AppURL = AppURL
test := func ( input , expected , expectedWiki string ) {
buffer , err := markdown . RenderString ( & markup . RenderContext {
Ctx : git . DefaultContext ,
Links : markup . Links {
Base : FullURL ,
} ,
} , input )
test := func ( input , expected string ) {
buffer , err := markdown . RenderString ( markup . NewTestRenderContext ( ) , input )
assert . NoError ( t , err )
assert . Equal ( t , strings . TrimSpace ( expected ) , strings . TrimSpace ( string ( buffer ) ) )
buffer , err = markdown . RenderString ( & markup . RenderContext {
Ctx : git . DefaultContext ,
Links : markup . Links {
Base : FullURL ,
} ,
Metas : localWikiMetas ,
} , input )
assert . NoError ( t , err )
assert . Equal ( t , strings . TrimSpace ( expectedWiki ) , strings . TrimSpace ( string ( buffer ) ) )
}
googleRendered := ` <p><a href="https://google.com/" rel="nofollow">https://google.com/</a></p> `
test ( "<https://google.com/>" , googleRendered , googleRendered )
lnk := util . URLJoin ( FullURL , "WikiPage" )
lnkWiki := util . URLJoin ( FullURL , "wiki" , "WikiPage" )
test ( "[WikiPage](WikiPage)" ,
` <p><a href=" ` + lnk + ` " rel="nofollow">WikiPage</a></p> ` ,
` <p><a href=" ` + lnkWiki + ` " rel="nofollow">WikiPage</a></p> ` )
test ( "<https://google.com/>" , googleRendered )
test ( "[Link](Link)" , ` <p><a href="/Link" rel="nofollow">Link</a></p> ` )
}
func TestRender_Images ( t * testing . T ) {
setting . AppURL = AppURL
test := func ( input , expected string ) {
buffer , err := markdown . RenderString ( & markup . RenderContext {
Ctx : git . DefaultContext ,
Links : markup . Links {
Base : FullURL ,
} ,
} , input )
buffer , err := markdown . RenderString ( markup . NewTestRenderContext ( FullURL ) , input )
assert . NoError ( t , err )
assert . Equal ( t , strings . TrimSpace ( expected ) , strings . TrimSpace ( string ( buffer ) ) )
}
@ -140,12 +85,12 @@ func TestRender_Images(t *testing.T) {
` <p><a href=" ` + href + ` " rel="nofollow"><img src=" ` + result + ` " alt=" ` + title + ` "/></a></p> ` )
}
func testAnswers ( baseURLContent , baseURLImages string ) [ ] string {
func testAnswers ( baseURL string ) [ ] string {
return [ ] string {
` < p > Wiki ! Enjoy : ) < / p >
< ul >
< li > < a href = "` + baseURLContent + `/Links" rel = "nofollow" > Links , Language bindings , Engine bindings < / a > < / li >
< li > < a href = "` + baseURLContent + `/Tips" rel = "nofollow" > Tips < / a > < / li >
< li > < a href = "` + baseURL + `/Links" rel = "nofollow" > Links , Language bindings , Engine bindings < / a > < / li >
< li > < a href = "` + baseURL + `/Tips" rel = "nofollow" > Tips < / a > < / li >
< / ul >
< p > See commit < a href = "/` + testRepoOwnerName + `/` + testRepoName + `/commit/65f1bf27bc" rel = "nofollow" > < code > 65 f1bf27bc < / code > < / a > < / p >
< p > Ideas and codes < / p >
@ -153,8 +98,8 @@ func testAnswers(baseURLContent, baseURLImages string) []string {
< li > Bezier widget ( by < a href = "/r-lyeh" rel = "nofollow" > @ r - lyeh < / a > ) < a href = "http://localhost:3000/ocornut/imgui/issues/786" class = "ref-issue" rel = "nofollow" > ocornut / imgui # 786 < / a > < / li >
< li > Bezier widget ( by < a href = "/r-lyeh" rel = "nofollow" > @ r - lyeh < / a > ) < a href = "` + FullURL + `issues/786" class = "ref-issue" rel = "nofollow" > # 786 < / a > < / li >
< li > Node graph editors < a href = "https://github.com/ocornut/imgui/issues/306" rel = "nofollow" > https : //github.com/ocornut/imgui/issues/306</a></li>
< li > < a href = "` + baseURLContent + `/memory_editor_example" rel = "nofollow" > Memory Editor < / a > < / li >
< li > < a href = "` + baseURLContent + `/plot_var_example" rel = "nofollow" > Plot var helper < / a > < / li >
< li > < a href = "` + baseURL + `/memory_editor_example" rel = "nofollow" > Memory Editor < / a > < / li >
< li > < a href = "` + baseURL + `/plot_var_example" rel = "nofollow" > Plot var helper < / a > < / li >
< / ul >
` ,
` < h2 id = "user-content-what-is-wine-staging" > What is Wine Staging ? < / h2 >
@ -164,14 +109,14 @@ func testAnswers(baseURLContent, baseURLImages string) []string {
< table >
< thead >
< tr >
< th > < a href = "` + baseURLImages + `/images/icon-install.png" rel = "nofollow" > < img src = "` + baseURLImages + `/images/icon-install.png" title = "icon-install.png" alt = "images/icon-install.png" / > < / a > < / th >
< th > < a href = "` + baseURLContent + `/Installation" rel = "nofollow" > Installation < / a > < / th >
< th > < a href = "` + baseURL + `/images/icon-install.png" rel = "nofollow" > < img src = "` + baseURL + `/images/icon-install.png" title = "icon-install.png" alt = "images/icon-install.png" / > < / a > < / th >
< th > < a href = "` + baseURL + `/Installation" rel = "nofollow" > Installation < / a > < / th >
< / tr >
< / thead >
< tbody >
< tr >
< td > < a href = "` + baseURLImages + `/images/icon-usage.png" rel = "nofollow" > < img src = "` + baseURLImages + `/images/icon-usage.png" title = "icon-usage.png" alt = "images/icon-usage.png" / > < / a > < / td >
< td > < a href = "` + baseURLContent + `/Usage" rel = "nofollow" > Usage < / a > < / td >
< td > < a href = "` + baseURL + `/images/icon-usage.png" rel = "nofollow" > < img src = "` + baseURL + `/images/icon-usage.png" title = "icon-usage.png" alt = "images/icon-usage.png" / > < / a > < / td >
< td > < a href = "` + baseURL + `/Usage" rel = "nofollow" > Usage < / a > < / td >
< / tr >
< / tbody >
< / table >
@ -179,9 +124,9 @@ func testAnswers(baseURLContent, baseURLImages string) []string {
` < p > < a href = "http://www.excelsiorjet.com/" rel = "nofollow" > Excelsior JET < / a > allows you to create native executables for Windows , Linux and Mac OS X . < / p >
< ol >
< li > < a href = "https://github.com/libgdx/libgdx/wiki/Gradle-on-the-Commandline#packaging-for-the-desktop" rel = "nofollow" > Package your libGDX application < / a > < br / >
< a href = "` + baseURLImages + `/images/1.png" rel = "nofollow" > < img src = "` + baseURLImages + `/images/1.png" title = "1.png" alt = "images/1.png" / > < / a > < / li >
< a href = "` + baseURL + `/images/1.png" rel = "nofollow" > < img src = "` + baseURL + `/images/1.png" title = "1.png" alt = "images/1.png" / > < / a > < / li >
< li > Perform a test run by hitting the Run ! button . < br / >
< a href = "` + baseURLImages + `/images/2.png" rel = "nofollow" > < img src = "` + baseURLImages + `/images/2.png" title = "2.png" alt = "images/2.png" / > < / a > < / li >
< a href = "` + baseURL + `/images/2.png" rel = "nofollow" > < img src = "` + baseURL + `/images/2.png" title = "2.png" alt = "images/2.png" / > < / a > < / li >
< / ol >
< h2 id = "user-content-custom-id" > More tests < / h2 >
< p > ( from < a href = "https://www.markdownguide.org/extended-syntax/" rel = "nofollow" > https : //www.markdownguide.org/extended-syntax/</a>)</p>
@ -302,96 +247,35 @@ This PR has been generated by [Renovate Bot](https://github.com/renovatebot/reno
< ! -- test - comment -- > ` ,
}
func TestTotal_RenderWiki ( t * testing . T ) {
defer test . MockVariableValue ( & markup . RenderBehaviorForTesting . ForceHardLineBreak , true ) ( )
defer test . MockVariableValue ( & markup . RenderBehaviorForTesting . DisableInternalAttributes , true ) ( )
setting . AppURL = AppURL
answers := testAnswers ( util . URLJoin ( FullURL , "wiki" ) , util . URLJoin ( FullURL , "wiki" , "raw" ) )
for i := 0 ; i < len ( sameCases ) ; i ++ {
line , err := markdown . RenderString ( & markup . RenderContext {
Ctx : git . DefaultContext ,
Links : markup . Links {
Base : FullURL ,
} ,
Repo : newMockRepo ( testRepoOwnerName , testRepoName ) ,
Metas : localWikiMetas ,
} , sameCases [ i ] )
assert . NoError ( t , err )
assert . Equal ( t , answers [ i ] , string ( line ) )
}
testCases := [ ] string {
// Guard wiki sidebar: special syntax
` [[Guardfile-DSL / Configuring-Guard|Guardfile-DSL---Configuring-Guard]] ` ,
// rendered
` <p><a href=" ` + FullURL + ` wiki / Guardfile - DSL -- - Configuring - Guard " rel=" nofollow " > Guardfile - DSL / Configuring - Guard < / a > < / p >
` ,
// special syntax
` [[Name|Link]] ` ,
// rendered
` <p><a href=" ` + FullURL + ` wiki / Link " rel=" nofollow " > Name < / a > < / p >
` ,
}
for i := 0 ; i < len ( testCases ) ; i += 2 {
line , err := markdown . RenderString ( & markup . RenderContext {
Ctx : git . DefaultContext ,
Links : markup . Links {
Base : FullURL ,
} ,
Metas : localWikiMetas ,
} , testCases [ i ] )
assert . NoError ( t , err )
assert . EqualValues ( t , testCases [ i + 1 ] , string ( line ) )
}
}
func TestTotal_RenderString ( t * testing . T ) {
defer test . MockVariableValue ( & markup . RenderBehaviorForTesting . ForceHardLineBreak , true ) ( )
defer test . MockVariableValue ( & markup . RenderBehaviorForTesting . DisableInternalAttributes , true ) ( )
setting . AppURL = AppURL
answers := testAnswers ( util . URLJoin ( FullURL , "src" , "master" ) , util . URLJoin ( FullURL , "media" , "master" ) )
for i := 0 ; i < len ( sameCases ) ; i ++ {
line , err := markdown . RenderString ( & markup . RenderContext {
Ctx : git . DefaultContext ,
Links : markup . Links {
Base : FullURL ,
BranchPath : "master" ,
defer test . MockVariableValue ( & markup . RenderBehaviorForTesting . DisableAdditionalAttributes , true ) ( )
markup . Init ( & markup . RenderHelperFuncs {
IsUsernameMentionable : func ( ctx context . Context , username string ) bool {
return username == "r-lyeh"
} ,
Repo : newMockRepo ( testRepoOwnerName , testRepoName ) ,
Metas : localMetas ,
} , sameCases [ i ] )
} )
answers := testAnswers ( "" )
for i := 0 ; i < len ( sameCases ) ; i ++ {
line , err := markdown . RenderString ( markup . NewTestRenderContext ( localMetas ) , sameCases [ i ] )
assert . NoError ( t , err )
assert . Equal ( t , answers [ i ] , string ( line ) )
}
testCases := [ ] string { }
for i := 0 ; i < len ( testCases ) ; i += 2 {
line , err := markdown . RenderString ( & markup . RenderContext {
Ctx : git . DefaultContext ,
Links : markup . Links {
Base : FullURL ,
} ,
} , testCases [ i ] )
assert . NoError ( t , err )
assert . Equal ( t , template . HTML ( testCases [ i + 1 ] ) , line )
}
}
func TestRender_RenderParagraphs ( t * testing . T ) {
test := func ( t * testing . T , str string , cnt int ) {
res , err := markdown . RenderRawString ( & markup . RenderContext { Ctx : git . DefaultContext } , str )
res , err := markdown . RenderRawString ( markup . NewTestRenderContext ( ) , str )
assert . NoError ( t , err )
assert . Equal ( t , cnt , strings . Count ( res , "<p" ) , "Rendered result for unix should have %d paragraph(s) but has %d:\n%s\n" , cnt , strings . Count ( res , "<p" ) , res )
mac := strings . ReplaceAll ( str , "\n" , "\r" )
res , err = markdown . RenderRawString ( & markup . RenderContext { Ctx : git . DefaultContext } , mac )
res , err = markdown . RenderRawString ( markup . NewTestRenderContext ( ) , mac )
assert . NoError ( t , err )
assert . Equal ( t , cnt , strings . Count ( res , "<p" ) , "Rendered result for mac should have %d paragraph(s) but has %d:\n%s\n" , cnt , strings . Count ( res , "<p" ) , res )
dos := strings . ReplaceAll ( str , "\n" , "\r\n" )
res , err = markdown . RenderRawString ( & markup . RenderContext { Ctx : git . DefaultContext } , dos )
res , err = markdown . RenderRawString ( markup . NewTestRenderContext ( ) , dos )
assert . NoError ( t , err )
assert . Equal ( t , cnt , strings . Count ( res , "<p" ) , "Rendered result for windows should have %d paragraph(s) but has %d:\n%s\n" , cnt , strings . Count ( res , "<p" ) , res )
}
@ -419,7 +303,7 @@ func TestMarkdownRenderRaw(t *testing.T) {
for _ , testcase := range testcases {
log . Info ( "Test markdown render error with fuzzy data: %x, the following errors can be recovered" , testcase )
_ , err := markdown . RenderRawString ( & markup . RenderContext { Ctx : git . DefaultContext } , string ( testcase ) )
_ , err := markdown . RenderRawString ( markup . NewTestRenderContext ( ) , string ( testcase ) )
assert . NoError ( t , err )
}
}
@ -432,7 +316,7 @@ func TestRenderSiblingImages_Issue12925(t *testing.T) {
< a href = "/image2" target = "_blank" rel = "nofollow noopener" > < img src = "/image2" alt = "image2" > < / a > < / p >
`
defer test . MockVariableValue ( & markup . RenderBehaviorForTesting . ForceHardLineBreak , true ) ( )
res , err := markdown . RenderRawString ( & markup . RenderContext { Ctx : git . DefaultContext } , testcase )
res , err := markdown . RenderRawString ( markup . NewTestRenderContext ( ) , testcase )
assert . NoError ( t , err )
assert . Equal ( t , expected , res )
}
@ -441,7 +325,7 @@ func TestRenderEmojiInLinks_Issue12331(t *testing.T) {
testcase := ` [Link with emoji :moon: in text](https://gitea.io) `
expected := ` < p > < a href = "https://gitea.io" rel = "nofollow" > Link with emoji < span class = "emoji" aria - label = "waxing gibbous moon" > 🌔 < / span > in text < / a > < / p >
`
res , err := markdown . RenderString ( & markup . RenderContext { Ctx : git . DefaultContext } , testcase )
res , err := markdown . RenderString ( markup . NewTestRenderContext ( ) , testcase )
assert . NoError ( t , err )
assert . Equal ( t , template . HTML ( expected ) , res )
}
@ -479,7 +363,7 @@ func TestColorPreview(t *testing.T) {
}
for _ , test := range positiveTests {
res , err := markdown . RenderString ( & markup . RenderContext { Ctx : git . DefaultContext } , test . testcase )
res , err := markdown . RenderString ( markup . NewTestRenderContext ( ) , test . testcase )
assert . NoError ( t , err , "Unexpected error in testcase: %q" , test . testcase )
assert . Equal ( t , template . HTML ( test . expected ) , res , "Unexpected result in testcase %q" , test . testcase )
}
@ -498,7 +382,7 @@ func TestColorPreview(t *testing.T) {
}
for _ , test := range negativeTests {
res , err := markdown . RenderString ( & markup . RenderContext { Ctx : git . DefaultContext } , test )
res , err := markdown . RenderString ( markup . NewTestRenderContext ( ) , test )
assert . NoError ( t , err , "Unexpected error in testcase: %q" , test )
assert . NotContains ( t , res , ` <span class="color-preview" style="background-color: ` , "Unexpected result in testcase %q" , test )
}
@ -573,7 +457,7 @@ func TestMathBlock(t *testing.T) {
}
for _ , test := range testcases {
res , err := markdown . RenderString ( & markup . RenderContext { Ctx : git . DefaultContext } , test . testcase )
res , err := markdown . RenderString ( markup . NewTestRenderContext ( ) , test . testcase )
assert . NoError ( t , err , "Unexpected error in testcase: %q" , test . testcase )
assert . Equal ( t , template . HTML ( test . expected ) , res , "Unexpected result in testcase %q" , test . testcase )
}
@ -610,7 +494,7 @@ foo: bar
}
for _ , test := range testcases {
res , err := markdown . RenderString ( & markup . RenderContext { Ctx : git . DefaultContext } , test . testcase )
res , err := markdown . RenderString ( markup . NewTestRenderContext ( ) , test . testcase )
assert . NoError ( t , err , "Unexpected error in testcase: %q" , test . testcase )
assert . Equal ( t , template . HTML ( test . expected ) , res , "Unexpected result in testcase %q" , test . testcase )
}
@ -642,13 +526,9 @@ mail@domain.com
`
input = strings . ReplaceAll ( input , "${SPACE}" , " " ) // replace ${SPACE} with " ", to avoid some editor's auto-trimming
cases := [ ] struct {
Links markup . Links
IsWiki bool
Expected string
} {
{ // 0
Links : markup . Links { } ,
IsWiki : false ,
{
Expected : ` < p > space @ mention - user < br / >
/ just / a / path . bin < br / >
< a href = "https://example.com/file.bin" rel = "nofollow" > https : //example.com/file.bin</a><br/>
@ -671,343 +551,14 @@ com 88fc37a3c0a4dda553bdcfc80c178a58247f42fb mit<br/>
@ mention - user test < br / >
# 123 < br / >
space < / p >
` ,
} ,
{ // 1
Links : markup . Links { } ,
IsWiki : true ,
Expected : ` < p > space @ mention - user < br / >
/ just / a / path . bin < br / >
< a href = "https://example.com/file.bin" rel = "nofollow" > https : //example.com/file.bin</a><br/>
< a href = "/wiki/file.bin" rel = "nofollow" > local link < / a > < br / >
< a href = "https://example.com" rel = "nofollow" > remote link < / a > < br / >
< a href = "/wiki/file.bin" rel = "nofollow" > local link < / a > < br / >
< a href = "https://example.com" rel = "nofollow" > remote link < / a > < br / >
< a href = "/wiki/raw/image.jpg" target = "_blank" rel = "nofollow noopener" > < img src = "/wiki/raw/image.jpg" alt = "local image" / > < / a > < br / >
< a href = "/wiki/raw/path/file" target = "_blank" rel = "nofollow noopener" > < img src = "/wiki/raw/path/file" alt = "local image" / > < / a > < br / >
< a href = "/wiki/raw/path/file" target = "_blank" rel = "nofollow noopener" > < img src = "/wiki/raw/path/file" alt = "local image" / > < / a > < br / >
< a href = "https://example.com/image.jpg" target = "_blank" rel = "nofollow noopener" > < img src = "https://example.com/image.jpg" alt = "remote image" / > < / a > < br / >
< a href = "/wiki/raw/image.jpg" rel = "nofollow" > < img src = "/wiki/raw/image.jpg" title = "local image" alt = "local image" / > < / a > < br / >
< a href = "https://example.com/image.jpg" rel = "nofollow" > < img src = "https://example.com/image.jpg" title = "remote link" alt = "remote link" / > < / a > < br / >
< a href = "https://example.com/user/repo/compare/88fc37a3c0a4dda553bdcfc80c178a58247f42fb...12fc37a3c0a4dda553bdcfc80c178a58247f42fb#hash" rel = "nofollow" > < code > 88 fc37a3c0 ... 12 fc37a3c0 ( hash ) < / code > < / a > < br / >
com 88 fc37a3c0a4dda553bdcfc80c178a58247f42fb ... 12 fc37a3c0a4dda553bdcfc80c178a58247f42fb pare < br / >
< a href = "https://example.com/user/repo/commit/88fc37a3c0a4dda553bdcfc80c178a58247f42fb" rel = "nofollow" > < code > 88 fc37a3c0 < / code > < / a > < br / >
com 88 fc37a3c0a4dda553bdcfc80c178a58247f42fb mit < br / >
< span class = "emoji" aria - label = "thumbs up" > 👍 < / span > < br / >
< a href = "mailto:mail@domain.com" rel = "nofollow" > mail @ domain . com < / a > < br / >
@ mention - user test < br / >
# 123 < br / >
space < / p >
` ,
} ,
{ // 2
Links : markup . Links {
Base : "https://gitea.io/" ,
} ,
IsWiki : false ,
Expected : ` < p > space @ mention - user < br / >
/ just / a / path . bin < br / >
< a href = "https://example.com/file.bin" rel = "nofollow" > https : //example.com/file.bin</a><br/>
< a href = "https://gitea.io/file.bin" rel = "nofollow" > local link < / a > < br / >
< a href = "https://example.com" rel = "nofollow" > remote link < / a > < br / >
< a href = "https://gitea.io/file.bin" rel = "nofollow" > local link < / a > < br / >
< a href = "https://example.com" rel = "nofollow" > remote link < / a > < br / >
< a href = "https://gitea.io/image.jpg" target = "_blank" rel = "nofollow noopener" > < img src = "https://gitea.io/image.jpg" alt = "local image" / > < / a > < br / >
< a href = "https://gitea.io/path/file" target = "_blank" rel = "nofollow noopener" > < img src = "https://gitea.io/path/file" alt = "local image" / > < / a > < br / >
< a href = "https://gitea.io/path/file" target = "_blank" rel = "nofollow noopener" > < img src = "https://gitea.io/path/file" alt = "local image" / > < / a > < br / >
< a href = "https://example.com/image.jpg" target = "_blank" rel = "nofollow noopener" > < img src = "https://example.com/image.jpg" alt = "remote image" / > < / a > < br / >
< a href = "https://gitea.io/image.jpg" rel = "nofollow" > < img src = "https://gitea.io/image.jpg" title = "local image" alt = "local image" / > < / a > < br / >
< a href = "https://example.com/image.jpg" rel = "nofollow" > < img src = "https://example.com/image.jpg" title = "remote link" alt = "remote link" / > < / a > < br / >
< a href = "https://example.com/user/repo/compare/88fc37a3c0a4dda553bdcfc80c178a58247f42fb...12fc37a3c0a4dda553bdcfc80c178a58247f42fb#hash" rel = "nofollow" > < code > 88 fc37a3c0 ... 12 fc37a3c0 ( hash ) < / code > < / a > < br / >
com 88 fc37a3c0a4dda553bdcfc80c178a58247f42fb ... 12 fc37a3c0a4dda553bdcfc80c178a58247f42fb pare < br / >
< a href = "https://example.com/user/repo/commit/88fc37a3c0a4dda553bdcfc80c178a58247f42fb" rel = "nofollow" > < code > 88 fc37a3c0 < / code > < / a > < br / >
com 88 fc37a3c0a4dda553bdcfc80c178a58247f42fb mit < br / >
< span class = "emoji" aria - label = "thumbs up" > 👍 < / span > < br / >
< a href = "mailto:mail@domain.com" rel = "nofollow" > mail @ domain . com < / a > < br / >
@ mention - user test < br / >
# 123 < br / >
space < / p >
` ,
} ,
{ // 3
Links : markup . Links {
Base : "https://gitea.io/" ,
} ,
IsWiki : true ,
Expected : ` < p > space @ mention - user < br / >
/ just / a / path . bin < br / >
< a href = "https://example.com/file.bin" rel = "nofollow" > https : //example.com/file.bin</a><br/>
< a href = "https://gitea.io/wiki/file.bin" rel = "nofollow" > local link < / a > < br / >
< a href = "https://example.com" rel = "nofollow" > remote link < / a > < br / >
< a href = "https://gitea.io/wiki/file.bin" rel = "nofollow" > local link < / a > < br / >
< a href = "https://example.com" rel = "nofollow" > remote link < / a > < br / >
< a href = "https://gitea.io/wiki/raw/image.jpg" target = "_blank" rel = "nofollow noopener" > < img src = "https://gitea.io/wiki/raw/image.jpg" alt = "local image" / > < / a > < br / >
< a href = "https://gitea.io/wiki/raw/path/file" target = "_blank" rel = "nofollow noopener" > < img src = "https://gitea.io/wiki/raw/path/file" alt = "local image" / > < / a > < br / >
< a href = "https://gitea.io/wiki/raw/path/file" target = "_blank" rel = "nofollow noopener" > < img src = "https://gitea.io/wiki/raw/path/file" alt = "local image" / > < / a > < br / >
< a href = "https://example.com/image.jpg" target = "_blank" rel = "nofollow noopener" > < img src = "https://example.com/image.jpg" alt = "remote image" / > < / a > < br / >
< a href = "https://gitea.io/wiki/raw/image.jpg" rel = "nofollow" > < img src = "https://gitea.io/wiki/raw/image.jpg" title = "local image" alt = "local image" / > < / a > < br / >
< a href = "https://example.com/image.jpg" rel = "nofollow" > < img src = "https://example.com/image.jpg" title = "remote link" alt = "remote link" / > < / a > < br / >
< a href = "https://example.com/user/repo/compare/88fc37a3c0a4dda553bdcfc80c178a58247f42fb...12fc37a3c0a4dda553bdcfc80c178a58247f42fb#hash" rel = "nofollow" > < code > 88 fc37a3c0 ... 12 fc37a3c0 ( hash ) < / code > < / a > < br / >
com 88 fc37a3c0a4dda553bdcfc80c178a58247f42fb ... 12 fc37a3c0a4dda553bdcfc80c178a58247f42fb pare < br / >
< a href = "https://example.com/user/repo/commit/88fc37a3c0a4dda553bdcfc80c178a58247f42fb" rel = "nofollow" > < code > 88 fc37a3c0 < / code > < / a > < br / >
com 88 fc37a3c0a4dda553bdcfc80c178a58247f42fb mit < br / >
< span class = "emoji" aria - label = "thumbs up" > 👍 < / span > < br / >
< a href = "mailto:mail@domain.com" rel = "nofollow" > mail @ domain . com < / a > < br / >
@ mention - user test < br / >
# 123 < br / >
space < / p >
` ,
} ,
{ // 4
Links : markup . Links {
Base : "/relative/path" ,
} ,
IsWiki : false ,
Expected : ` < p > space @ mention - user < br / >
/ just / a / path . bin < br / >
< a href = "https://example.com/file.bin" rel = "nofollow" > https : //example.com/file.bin</a><br/>
< a href = "/relative/path/file.bin" rel = "nofollow" > local link < / a > < br / >
< a href = "https://example.com" rel = "nofollow" > remote link < / a > < br / >
< a href = "/relative/path/file.bin" rel = "nofollow" > local link < / a > < br / >
< a href = "https://example.com" rel = "nofollow" > remote link < / a > < br / >
< a href = "/relative/path/image.jpg" target = "_blank" rel = "nofollow noopener" > < img src = "/relative/path/image.jpg" alt = "local image" / > < / a > < br / >
< a href = "/relative/path/path/file" target = "_blank" rel = "nofollow noopener" > < img src = "/relative/path/path/file" alt = "local image" / > < / a > < br / >
< a href = "/relative/path/path/file" target = "_blank" rel = "nofollow noopener" > < img src = "/relative/path/path/file" alt = "local image" / > < / a > < br / >
< a href = "https://example.com/image.jpg" target = "_blank" rel = "nofollow noopener" > < img src = "https://example.com/image.jpg" alt = "remote image" / > < / a > < br / >
< a href = "/relative/path/image.jpg" rel = "nofollow" > < img src = "/relative/path/image.jpg" title = "local image" alt = "local image" / > < / a > < br / >
< a href = "https://example.com/image.jpg" rel = "nofollow" > < img src = "https://example.com/image.jpg" title = "remote link" alt = "remote link" / > < / a > < br / >
< a href = "https://example.com/user/repo/compare/88fc37a3c0a4dda553bdcfc80c178a58247f42fb...12fc37a3c0a4dda553bdcfc80c178a58247f42fb#hash" rel = "nofollow" > < code > 88 fc37a3c0 ... 12 fc37a3c0 ( hash ) < / code > < / a > < br / >
com 88 fc37a3c0a4dda553bdcfc80c178a58247f42fb ... 12 fc37a3c0a4dda553bdcfc80c178a58247f42fb pare < br / >
< a href = "https://example.com/user/repo/commit/88fc37a3c0a4dda553bdcfc80c178a58247f42fb" rel = "nofollow" > < code > 88 fc37a3c0 < / code > < / a > < br / >
com 88 fc37a3c0a4dda553bdcfc80c178a58247f42fb mit < br / >
< span class = "emoji" aria - label = "thumbs up" > 👍 < / span > < br / >
< a href = "mailto:mail@domain.com" rel = "nofollow" > mail @ domain . com < / a > < br / >
@ mention - user test < br / >
# 123 < br / >
space < / p >
` ,
} ,
{ // 5
Links : markup . Links {
Base : "/relative/path" ,
} ,
IsWiki : true ,
Expected : ` < p > space @ mention - user < br / >
/ just / a / path . bin < br / >
< a href = "https://example.com/file.bin" rel = "nofollow" > https : //example.com/file.bin</a><br/>
< a href = "/relative/path/wiki/file.bin" rel = "nofollow" > local link < / a > < br / >
< a href = "https://example.com" rel = "nofollow" > remote link < / a > < br / >
< a href = "/relative/path/wiki/file.bin" rel = "nofollow" > local link < / a > < br / >
< a href = "https://example.com" rel = "nofollow" > remote link < / a > < br / >
< a href = "/relative/path/wiki/raw/image.jpg" target = "_blank" rel = "nofollow noopener" > < img src = "/relative/path/wiki/raw/image.jpg" alt = "local image" / > < / a > < br / >
< a href = "/relative/path/wiki/raw/path/file" target = "_blank" rel = "nofollow noopener" > < img src = "/relative/path/wiki/raw/path/file" alt = "local image" / > < / a > < br / >
< a href = "/relative/path/wiki/raw/path/file" target = "_blank" rel = "nofollow noopener" > < img src = "/relative/path/wiki/raw/path/file" alt = "local image" / > < / a > < br / >
< a href = "https://example.com/image.jpg" target = "_blank" rel = "nofollow noopener" > < img src = "https://example.com/image.jpg" alt = "remote image" / > < / a > < br / >
< a href = "/relative/path/wiki/raw/image.jpg" rel = "nofollow" > < img src = "/relative/path/wiki/raw/image.jpg" title = "local image" alt = "local image" / > < / a > < br / >
< a href = "https://example.com/image.jpg" rel = "nofollow" > < img src = "https://example.com/image.jpg" title = "remote link" alt = "remote link" / > < / a > < br / >
< a href = "https://example.com/user/repo/compare/88fc37a3c0a4dda553bdcfc80c178a58247f42fb...12fc37a3c0a4dda553bdcfc80c178a58247f42fb#hash" rel = "nofollow" > < code > 88 fc37a3c0 ... 12 fc37a3c0 ( hash ) < / code > < / a > < br / >
com 88 fc37a3c0a4dda553bdcfc80c178a58247f42fb ... 12 fc37a3c0a4dda553bdcfc80c178a58247f42fb pare < br / >
< a href = "https://example.com/user/repo/commit/88fc37a3c0a4dda553bdcfc80c178a58247f42fb" rel = "nofollow" > < code > 88 fc37a3c0 < / code > < / a > < br / >
com 88 fc37a3c0a4dda553bdcfc80c178a58247f42fb mit < br / >
< span class = "emoji" aria - label = "thumbs up" > 👍 < / span > < br / >
< a href = "mailto:mail@domain.com" rel = "nofollow" > mail @ domain . com < / a > < br / >
@ mention - user test < br / >
# 123 < br / >
space < / p >
` ,
} ,
{ // 6
Links : markup . Links {
Base : "/user/repo" ,
BranchPath : "branch/main" ,
} ,
IsWiki : false ,
Expected : ` < p > space @ mention - user < br / >
/ just / a / path . bin < br / >
< a href = "https://example.com/file.bin" rel = "nofollow" > https : //example.com/file.bin</a><br/>
< a href = "/user/repo/src/branch/main/file.bin" rel = "nofollow" > local link < / a > < br / >
< a href = "https://example.com" rel = "nofollow" > remote link < / a > < br / >
< a href = "/user/repo/src/branch/main/file.bin" rel = "nofollow" > local link < / a > < br / >
< a href = "https://example.com" rel = "nofollow" > remote link < / a > < br / >
< a href = "/user/repo/media/branch/main/image.jpg" target = "_blank" rel = "nofollow noopener" > < img src = "/user/repo/media/branch/main/image.jpg" alt = "local image" / > < / a > < br / >
< a href = "/user/repo/media/branch/main/path/file" target = "_blank" rel = "nofollow noopener" > < img src = "/user/repo/media/branch/main/path/file" alt = "local image" / > < / a > < br / >
< a href = "/user/repo/media/branch/main/path/file" target = "_blank" rel = "nofollow noopener" > < img src = "/user/repo/media/branch/main/path/file" alt = "local image" / > < / a > < br / >
< a href = "https://example.com/image.jpg" target = "_blank" rel = "nofollow noopener" > < img src = "https://example.com/image.jpg" alt = "remote image" / > < / a > < br / >
< a href = "/user/repo/media/branch/main/image.jpg" rel = "nofollow" > < img src = "/user/repo/media/branch/main/image.jpg" title = "local image" alt = "local image" / > < / a > < br / >
< a href = "https://example.com/image.jpg" rel = "nofollow" > < img src = "https://example.com/image.jpg" title = "remote link" alt = "remote link" / > < / a > < br / >
< a href = "https://example.com/user/repo/compare/88fc37a3c0a4dda553bdcfc80c178a58247f42fb...12fc37a3c0a4dda553bdcfc80c178a58247f42fb#hash" rel = "nofollow" > < code > 88 fc37a3c0 ... 12 fc37a3c0 ( hash ) < / code > < / a > < br / >
com 88 fc37a3c0a4dda553bdcfc80c178a58247f42fb ... 12 fc37a3c0a4dda553bdcfc80c178a58247f42fb pare < br / >
< a href = "https://example.com/user/repo/commit/88fc37a3c0a4dda553bdcfc80c178a58247f42fb" rel = "nofollow" > < code > 88 fc37a3c0 < / code > < / a > < br / >
com 88 fc37a3c0a4dda553bdcfc80c178a58247f42fb mit < br / >
< span class = "emoji" aria - label = "thumbs up" > 👍 < / span > < br / >
< a href = "mailto:mail@domain.com" rel = "nofollow" > mail @ domain . com < / a > < br / >
@ mention - user test < br / >
# 123 < br / >
space < / p >
` ,
} ,
{ // 7
Links : markup . Links {
Base : "/relative/path" ,
BranchPath : "branch/main" ,
} ,
IsWiki : true ,
Expected : ` < p > space @ mention - user < br / >
/ just / a / path . bin < br / >
< a href = "https://example.com/file.bin" rel = "nofollow" > https : //example.com/file.bin</a><br/>
< a href = "/relative/path/wiki/file.bin" rel = "nofollow" > local link < / a > < br / >
< a href = "https://example.com" rel = "nofollow" > remote link < / a > < br / >
< a href = "/relative/path/wiki/file.bin" rel = "nofollow" > local link < / a > < br / >
< a href = "https://example.com" rel = "nofollow" > remote link < / a > < br / >
< a href = "/relative/path/wiki/raw/image.jpg" target = "_blank" rel = "nofollow noopener" > < img src = "/relative/path/wiki/raw/image.jpg" alt = "local image" / > < / a > < br / >
< a href = "/relative/path/wiki/raw/path/file" target = "_blank" rel = "nofollow noopener" > < img src = "/relative/path/wiki/raw/path/file" alt = "local image" / > < / a > < br / >
< a href = "/relative/path/wiki/raw/path/file" target = "_blank" rel = "nofollow noopener" > < img src = "/relative/path/wiki/raw/path/file" alt = "local image" / > < / a > < br / >
< a href = "https://example.com/image.jpg" target = "_blank" rel = "nofollow noopener" > < img src = "https://example.com/image.jpg" alt = "remote image" / > < / a > < br / >
< a href = "/relative/path/wiki/raw/image.jpg" rel = "nofollow" > < img src = "/relative/path/wiki/raw/image.jpg" title = "local image" alt = "local image" / > < / a > < br / >
< a href = "https://example.com/image.jpg" rel = "nofollow" > < img src = "https://example.com/image.jpg" title = "remote link" alt = "remote link" / > < / a > < br / >
< a href = "https://example.com/user/repo/compare/88fc37a3c0a4dda553bdcfc80c178a58247f42fb...12fc37a3c0a4dda553bdcfc80c178a58247f42fb#hash" rel = "nofollow" > < code > 88 fc37a3c0 ... 12 fc37a3c0 ( hash ) < / code > < / a > < br / >
com 88 fc37a3c0a4dda553bdcfc80c178a58247f42fb ... 12 fc37a3c0a4dda553bdcfc80c178a58247f42fb pare < br / >
< a href = "https://example.com/user/repo/commit/88fc37a3c0a4dda553bdcfc80c178a58247f42fb" rel = "nofollow" > < code > 88 fc37a3c0 < / code > < / a > < br / >
com 88 fc37a3c0a4dda553bdcfc80c178a58247f42fb mit < br / >
< span class = "emoji" aria - label = "thumbs up" > 👍 < / span > < br / >
< a href = "mailto:mail@domain.com" rel = "nofollow" > mail @ domain . com < / a > < br / >
@ mention - user test < br / >
# 123 < br / >
space < / p >
` ,
} ,
{ // 8
Links : markup . Links {
Base : "/user/repo" ,
TreePath : "sub/folder" ,
} ,
IsWiki : false ,
Expected : ` < p > space @ mention - user < br / >
/ just / a / path . bin < br / >
< a href = "https://example.com/file.bin" rel = "nofollow" > https : //example.com/file.bin</a><br/>
< a href = "/user/repo/src/sub/folder/file.bin" rel = "nofollow" > local link < / a > < br / >
< a href = "https://example.com" rel = "nofollow" > remote link < / a > < br / >
< a href = "/user/repo/src/sub/folder/file.bin" rel = "nofollow" > local link < / a > < br / >
< a href = "https://example.com" rel = "nofollow" > remote link < / a > < br / >
< a href = "/user/repo/image.jpg" target = "_blank" rel = "nofollow noopener" > < img src = "/user/repo/image.jpg" alt = "local image" / > < / a > < br / >
< a href = "/user/repo/path/file" target = "_blank" rel = "nofollow noopener" > < img src = "/user/repo/path/file" alt = "local image" / > < / a > < br / >
< a href = "/user/repo/path/file" target = "_blank" rel = "nofollow noopener" > < img src = "/user/repo/path/file" alt = "local image" / > < / a > < br / >
< a href = "https://example.com/image.jpg" target = "_blank" rel = "nofollow noopener" > < img src = "https://example.com/image.jpg" alt = "remote image" / > < / a > < br / >
< a href = "/user/repo/image.jpg" rel = "nofollow" > < img src = "/user/repo/image.jpg" title = "local image" alt = "local image" / > < / a > < br / >
< a href = "https://example.com/image.jpg" rel = "nofollow" > < img src = "https://example.com/image.jpg" title = "remote link" alt = "remote link" / > < / a > < br / >
< a href = "https://example.com/user/repo/compare/88fc37a3c0a4dda553bdcfc80c178a58247f42fb...12fc37a3c0a4dda553bdcfc80c178a58247f42fb#hash" rel = "nofollow" > < code > 88 fc37a3c0 ... 12 fc37a3c0 ( hash ) < / code > < / a > < br / >
com 88 fc37a3c0a4dda553bdcfc80c178a58247f42fb ... 12 fc37a3c0a4dda553bdcfc80c178a58247f42fb pare < br / >
< a href = "https://example.com/user/repo/commit/88fc37a3c0a4dda553bdcfc80c178a58247f42fb" rel = "nofollow" > < code > 88 fc37a3c0 < / code > < / a > < br / >
com 88 fc37a3c0a4dda553bdcfc80c178a58247f42fb mit < br / >
< span class = "emoji" aria - label = "thumbs up" > 👍 < / span > < br / >
< a href = "mailto:mail@domain.com" rel = "nofollow" > mail @ domain . com < / a > < br / >
@ mention - user test < br / >
# 123 < br / >
space < / p >
` ,
} ,
{ // 9
Links : markup . Links {
Base : "/relative/path" ,
TreePath : "sub/folder" ,
} ,
IsWiki : true ,
Expected : ` < p > space @ mention - user < br / >
/ just / a / path . bin < br / >
< a href = "https://example.com/file.bin" rel = "nofollow" > https : //example.com/file.bin</a><br/>
< a href = "/relative/path/wiki/file.bin" rel = "nofollow" > local link < / a > < br / >
< a href = "https://example.com" rel = "nofollow" > remote link < / a > < br / >
< a href = "/relative/path/wiki/file.bin" rel = "nofollow" > local link < / a > < br / >
< a href = "https://example.com" rel = "nofollow" > remote link < / a > < br / >
< a href = "/relative/path/wiki/raw/image.jpg" target = "_blank" rel = "nofollow noopener" > < img src = "/relative/path/wiki/raw/image.jpg" alt = "local image" / > < / a > < br / >
< a href = "/relative/path/wiki/raw/path/file" target = "_blank" rel = "nofollow noopener" > < img src = "/relative/path/wiki/raw/path/file" alt = "local image" / > < / a > < br / >
< a href = "/relative/path/wiki/raw/path/file" target = "_blank" rel = "nofollow noopener" > < img src = "/relative/path/wiki/raw/path/file" alt = "local image" / > < / a > < br / >
< a href = "https://example.com/image.jpg" target = "_blank" rel = "nofollow noopener" > < img src = "https://example.com/image.jpg" alt = "remote image" / > < / a > < br / >
< a href = "/relative/path/wiki/raw/image.jpg" rel = "nofollow" > < img src = "/relative/path/wiki/raw/image.jpg" title = "local image" alt = "local image" / > < / a > < br / >
< a href = "https://example.com/image.jpg" rel = "nofollow" > < img src = "https://example.com/image.jpg" title = "remote link" alt = "remote link" / > < / a > < br / >
< a href = "https://example.com/user/repo/compare/88fc37a3c0a4dda553bdcfc80c178a58247f42fb...12fc37a3c0a4dda553bdcfc80c178a58247f42fb#hash" rel = "nofollow" > < code > 88 fc37a3c0 ... 12 fc37a3c0 ( hash ) < / code > < / a > < br / >
com 88 fc37a3c0a4dda553bdcfc80c178a58247f42fb ... 12 fc37a3c0a4dda553bdcfc80c178a58247f42fb pare < br / >
< a href = "https://example.com/user/repo/commit/88fc37a3c0a4dda553bdcfc80c178a58247f42fb" rel = "nofollow" > < code > 88 fc37a3c0 < / code > < / a > < br / >
com 88 fc37a3c0a4dda553bdcfc80c178a58247f42fb mit < br / >
< span class = "emoji" aria - label = "thumbs up" > 👍 < / span > < br / >
< a href = "mailto:mail@domain.com" rel = "nofollow" > mail @ domain . com < / a > < br / >
@ mention - user test < br / >
# 123 < br / >
space < / p >
` ,
} ,
{ // 10
Links : markup . Links {
Base : "/user/repo" ,
BranchPath : "branch/main" ,
TreePath : "sub/folder" ,
} ,
IsWiki : false ,
Expected : ` < p > space @ mention - user < br / >
/ just / a / path . bin < br / >
< a href = "https://example.com/file.bin" rel = "nofollow" > https : //example.com/file.bin</a><br/>
< a href = "/user/repo/src/branch/main/sub/folder/file.bin" rel = "nofollow" > local link < / a > < br / >
< a href = "https://example.com" rel = "nofollow" > remote link < / a > < br / >
< a href = "/user/repo/src/branch/main/sub/folder/file.bin" rel = "nofollow" > local link < / a > < br / >
< a href = "https://example.com" rel = "nofollow" > remote link < / a > < br / >
< a href = "/user/repo/media/branch/main/sub/folder/image.jpg" target = "_blank" rel = "nofollow noopener" > < img src = "/user/repo/media/branch/main/sub/folder/image.jpg" alt = "local image" / > < / a > < br / >
< a href = "/user/repo/media/branch/main/sub/folder/path/file" target = "_blank" rel = "nofollow noopener" > < img src = "/user/repo/media/branch/main/sub/folder/path/file" alt = "local image" / > < / a > < br / >
< a href = "/user/repo/media/branch/main/sub/folder/path/file" target = "_blank" rel = "nofollow noopener" > < img src = "/user/repo/media/branch/main/sub/folder/path/file" alt = "local image" / > < / a > < br / >
< a href = "https://example.com/image.jpg" target = "_blank" rel = "nofollow noopener" > < img src = "https://example.com/image.jpg" alt = "remote image" / > < / a > < br / >
< a href = "/user/repo/media/branch/main/sub/folder/image.jpg" rel = "nofollow" > < img src = "/user/repo/media/branch/main/sub/folder/image.jpg" title = "local image" alt = "local image" / > < / a > < br / >
< a href = "https://example.com/image.jpg" rel = "nofollow" > < img src = "https://example.com/image.jpg" title = "remote link" alt = "remote link" / > < / a > < br / >
< a href = "https://example.com/user/repo/compare/88fc37a3c0a4dda553bdcfc80c178a58247f42fb...12fc37a3c0a4dda553bdcfc80c178a58247f42fb#hash" rel = "nofollow" > < code > 88 fc37a3c0 ... 12 fc37a3c0 ( hash ) < / code > < / a > < br / >
com 88 fc37a3c0a4dda553bdcfc80c178a58247f42fb ... 12 fc37a3c0a4dda553bdcfc80c178a58247f42fb pare < br / >
< a href = "https://example.com/user/repo/commit/88fc37a3c0a4dda553bdcfc80c178a58247f42fb" rel = "nofollow" > < code > 88 fc37a3c0 < / code > < / a > < br / >
com 88 fc37a3c0a4dda553bdcfc80c178a58247f42fb mit < br / >
< span class = "emoji" aria - label = "thumbs up" > 👍 < / span > < br / >
< a href = "mailto:mail@domain.com" rel = "nofollow" > mail @ domain . com < / a > < br / >
@ mention - user test < br / >
# 123 < br / >
space < / p >
` ,
} ,
{ // 11
Links : markup . Links {
Base : "/relative/path" ,
BranchPath : "branch/main" ,
TreePath : "sub/folder" ,
} ,
IsWiki : true ,
Expected : ` < p > space @ mention - user < br / >
/ just / a / path . bin < br / >
< a href = "https://example.com/file.bin" rel = "nofollow" > https : //example.com/file.bin</a><br/>
< a href = "/relative/path/wiki/file.bin" rel = "nofollow" > local link < / a > < br / >
< a href = "https://example.com" rel = "nofollow" > remote link < / a > < br / >
< a href = "/relative/path/wiki/file.bin" rel = "nofollow" > local link < / a > < br / >
< a href = "https://example.com" rel = "nofollow" > remote link < / a > < br / >
< a href = "/relative/path/wiki/raw/image.jpg" target = "_blank" rel = "nofollow noopener" > < img src = "/relative/path/wiki/raw/image.jpg" alt = "local image" / > < / a > < br / >
< a href = "/relative/path/wiki/raw/path/file" target = "_blank" rel = "nofollow noopener" > < img src = "/relative/path/wiki/raw/path/file" alt = "local image" / > < / a > < br / >
< a href = "/relative/path/wiki/raw/path/file" target = "_blank" rel = "nofollow noopener" > < img src = "/relative/path/wiki/raw/path/file" alt = "local image" / > < / a > < br / >
< a href = "https://example.com/image.jpg" target = "_blank" rel = "nofollow noopener" > < img src = "https://example.com/image.jpg" alt = "remote image" / > < / a > < br / >
< a href = "/relative/path/wiki/raw/image.jpg" rel = "nofollow" > < img src = "/relative/path/wiki/raw/image.jpg" title = "local image" alt = "local image" / > < / a > < br / >
< a href = "https://example.com/image.jpg" rel = "nofollow" > < img src = "https://example.com/image.jpg" title = "remote link" alt = "remote link" / > < / a > < br / >
< a href = "https://example.com/user/repo/compare/88fc37a3c0a4dda553bdcfc80c178a58247f42fb...12fc37a3c0a4dda553bdcfc80c178a58247f42fb#hash" rel = "nofollow" > < code > 88 fc37a3c0 ... 12 fc37a3c0 ( hash ) < / code > < / a > < br / >
com 88 fc37a3c0a4dda553bdcfc80c178a58247f42fb ... 12 fc37a3c0a4dda553bdcfc80c178a58247f42fb pare < br / >
< a href = "https://example.com/user/repo/commit/88fc37a3c0a4dda553bdcfc80c178a58247f42fb" rel = "nofollow" > < code > 88 fc37a3c0 < / code > < / a > < br / >
com 88 fc37a3c0a4dda553bdcfc80c178a58247f42fb mit < br / >
< span class = "emoji" aria - label = "thumbs up" > 👍 < / span > < br / >
< a href = "mailto:mail@domain.com" rel = "nofollow" > mail @ domain . com < / a > < br / >
@ mention - user test < br / >
# 123 < br / >
space < / p >
` ,
} ,
}
defer test . MockVariableValue ( & markup . RenderBehaviorForTesting . ForceHardLineBreak , true ) ( )
defer test . MockVariableValue ( & markup . RenderBehaviorForTesting . DisableInter nalAttributes , true ) ( )
defer test . MockVariableValue ( & markup . RenderBehaviorForTesting . DisableAdditionalAttributes , true ) ( )
for i , c := range cases {
result , err := markdown . RenderString ( & markup . RenderContext {
Ctx : context . Background ( ) ,
Links : c . Links ,
Metas : util . Iif ( c . IsWiki , map [ string ] string { "markupContentMode" : "wiki" } , map [ string ] string { } ) ,
} , input )
result , err := markdown . RenderString ( markup . NewTestRenderContext ( localMetas ) , input )
assert . NoError ( t , err , "Unexpected error in testcase: %v" , i )
assert . Equal ( t , c . Expected , string ( result ) , "Unexpected result in testcase %v" , i )
}
@ -1029,7 +580,7 @@ func TestAttention(t *testing.T) {
}
test := func ( input , expected string ) {
result , err := markdown . RenderString ( & markup . RenderContext { Ctx : context . Background ( ) } , input )
result , err := markdown . RenderString ( markup . NewTestRenderContext ( ) , input )
assert . NoError ( t , err )
assert . Equal ( t , strings . TrimSpace ( expected ) , strings . TrimSpace ( string ( result ) ) )
}
@ -1062,6 +613,6 @@ func BenchmarkSpecializedMarkdown(b *testing.B) {
func BenchmarkMarkdownRender ( b * testing . B ) {
// 23202 50840 ns/op
for i := 0 ; i < b . N ; i ++ {
_ , _ = markdown . RenderString ( & markup . RenderContext { Ctx : context . Background ( ) } , "https://example.com\n- a\n- b\n" )
_ , _ = markdown . RenderString ( markup . NewTestRenderContext ( ) , "https://example.com\n- a\n- b\n" )
}
}