diff --git a/helpers/url.go b/helpers/url.go index 13421632f..c780579d6 100644 --- a/helpers/url.go +++ b/helpers/url.go @@ -77,7 +77,7 @@ func sanitizeURLWithFlags(in string, f purell.NormalizationFlags) string { if err != nil { panic(err) } - if !strings.HasPrefix(u.Path, "/") { + if len(u.Path) > 0 && !strings.HasPrefix(u.Path, "/") { u.Path = "/" + u.Path } return u.String() diff --git a/helpers/url_test.go b/helpers/url_test.go index b11be3521..1dabda273 100644 --- a/helpers/url_test.go +++ b/helpers/url_test.go @@ -31,11 +31,12 @@ func TestSanitizeURL(t *testing.T) { input string expected string }{ - {"http://foo.bar/", "http://foo.bar/"}, + {"http://foo.bar/", "http://foo.bar"}, + {"http://foo.bar", "http://foo.bar"}, // issue #1105 {"http://foo.bar/zoo/", "http://foo.bar/zoo"}, // issue #931 } - for _, test := range tests { + for i, test := range tests { o1 := SanitizeURL(test.input) o2 := SanitizeURLKeepTrailingSlash(test.input) @@ -46,10 +47,10 @@ func TestSanitizeURL(t *testing.T) { } if o1 != test.expected { - t.Errorf("Expected %#v, got %#v\n", test.expected, o1) + t.Errorf("[%d] 1: Expected %#v, got %#v\n", i, test.expected, o1) } if o2 != expected2 { - t.Errorf("Expected %#v, got %#v\n", expected2, o2) + t.Errorf("[%d] 2: Expected %#v, got %#v\n", i, expected2, o2) } } } diff --git a/hugolib/site_url_test.go b/hugolib/site_url_test.go index f2f25f80d..c7fc64e44 100644 --- a/hugolib/site_url_test.go +++ b/hugolib/site_url_test.go @@ -1,7 +1,6 @@ package hugolib import ( - "html/template" "path/filepath" "testing" @@ -10,6 +9,7 @@ import ( "github.com/spf13/hugo/source" "github.com/spf13/hugo/target" "github.com/spf13/viper" + "html/template" ) const SLUG_DOC_1 = "---\ntitle: slug doc 1\nslug: slug-doc-1\naliases:\n - sd1/foo/\n - sd2\n - sd3/\n - sd4.html\n---\nslug doc 1 content\n" @@ -52,6 +52,29 @@ var urlFakeSource = []source.ByteSource{ {filepath.FromSlash("content/blue/doc2.md"), []byte(SLUG_DOC_2)}, } +// Issue #1105 +func TestShouldNotAddTrailingSlashToBaseURL(t *testing.T) { + + for i, this := range []struct { + in string + expected string + }{ + {"http://base.com/", "http://base.com/"}, + {"http://base.com/sub/", "http://base.com/sub/"}, + {"http://base.com/sub", "http://base.com/sub"}, + {"http://base.com", "http://base.com"}} { + + viper.Set("BaseURL", this.in) + s := &Site{} + s.initializeSiteInfo() + + if s.Info.BaseURL != template.URL(this.expected) { + t.Errorf("[%d] got %s expected %s", i, s.Info.BaseURL, this.expected) + } + } + +} + func TestPageCount(t *testing.T) { hugofs.DestinationFS = new(afero.MemMapFs)