diff options
Diffstat (limited to 'modules')
-rw-r--r-- | modules/markup/html.go | 2 | ||||
-rw-r--r-- | modules/markup/html_test.go | 62 |
2 files changed, 63 insertions, 1 deletions
diff --git a/modules/markup/html.go b/modules/markup/html.go index 9040d43e8c..8ce8740748 100644 --- a/modules/markup/html.go +++ b/modules/markup/html.go @@ -66,7 +66,7 @@ var ( // matches http/https links. used for autlinking those. partly modified from // the original present in autolink.js - linkRegex = regexp.MustCompile(`(?:(?:http|https):\/\/(?:[\-;:&=\+\$,\w]+@)?[A-Za-z0-9\.\-]+|(?:www\.|[\-;:&=\+\$,\w]+@)[A-Za-z0-9\.\-]+)(?:(?:\/[\+~%\/\.\w\-]*)?\??(?:[\-\+:=&;%@\.\w]*)#?(?:[\.\!\/\\\w]*))?`) + linkRegex = regexp.MustCompile(`(?:(?:http|https):\/\/(?:[\-;:&=\+\$,\w]+@)?[A-Za-z0-9\.\-]+(?:\.|[\-;:&=\+\$,\w]+@)[A-Za-z0-9\.\-]+)(?:(?:\/[\+~%\/\.\w\-]*)?\??(?:[\-\+:=&;%@\.\w]*)#?(?:[\.\!\/\\\w]*))?`) ) // regexp for full links to issues/pulls diff --git a/modules/markup/html_test.go b/modules/markup/html_test.go index bf7606e1da..f17d00cd67 100644 --- a/modules/markup/html_test.go +++ b/modules/markup/html_test.go @@ -67,6 +67,68 @@ func TestMisc_IsSameDomain(t *testing.T) { assert.False(t, IsSameDomain("favicon.ico")) } +func TestRender_links(t *testing.T) { + setting.AppURL = AppURL + setting.AppSubURL = AppSubURL + + test := func(input, expected string) { + buffer := RenderString("a.md", input, setting.AppSubURL, nil) + assert.Equal(t, strings.TrimSpace(expected), strings.TrimSpace(string(buffer))) + } + // Text that should be turned into URL + + test( + "https://www.example.com", + `<p><a href="https://www.example.com" rel="nofollow">https://www.example.com</a></p>`) + test( + "http://www.example.com", + `<p><a href="http://www.example.com" rel="nofollow">http://www.example.com</a></p>`) + test( + "https://example.com", + `<p><a href="https://example.com" rel="nofollow">https://example.com</a></p>`) + test( + "http://example.com", + `<p><a href="http://example.com" rel="nofollow">http://example.com</a></p>`) + test( + "http://foo.com/blah_blah", + `<p><a href="http://foo.com/blah_blah" rel="nofollow">http://foo.com/blah_blah</a></p>`) + test( + "http://foo.com/blah_blah/", + `<p><a href="http://foo.com/blah_blah/" rel="nofollow">http://foo.com/blah_blah/</a></p>`) + test( + "http://www.example.com/wpstyle/?p=364", + `<p><a href="http://www.example.com/wpstyle/?p=364" rel="nofollow">http://www.example.com/wpstyle/?p=364</a></p>`) + test( + "https://www.example.com/foo/?bar=baz&inga=42&quux", + `<p><a href="https://www.example.com/foo/?bar=baz&inga=42&quux" rel="nofollow">https://www.example.com/foo/?bar=baz&inga=42&quux</a></p>`) + test( + "http://142.42.1.1/", + `<p><a href="http://142.42.1.1/" rel="nofollow">http://142.42.1.1/</a></p>`) + + // Test that should *not* be turned into URL + test( + "www.example.com", + `<p>www.example.com</p>`) + test( + "example.com", + `<p>example.com</p>`) + test( + "test.example.com", + `<p>test.example.com</p>`) + test( + "http://", + `<p>http://</p>`) + test( + "https://", + `<p>https://</p>`) + test( + "://", + `<p>://</p>`) + test( + "www", + `<p>www</p>`) +} + func TestRender_ShortLinks(t *testing.T) { setting.AppURL = AppURL setting.AppSubURL = AppSubURL |