diff --git a/hugolib/site_test.go b/hugolib/site_test.go index 5d74c911e..a096b3cbf 100644 --- a/hugolib/site_test.go +++ b/hugolib/site_test.go @@ -248,10 +248,14 @@ func TestSkipRender(t *testing.T) { func TestAbsUrlify(t *testing.T) { files := make(map[string][]byte) target := &InMemoryTarget{files: files} + sources := []byteSource{ + {"sect/doc1.html", []byte("
link")}, + {"content/blue/doc2.html", []byte("---\nf: t\n---\nmore content")}, + } s := &Site{ Target: target, Config: Config{BaseUrl: "http://auth/bub/"}, - Source: &inMemorySource{urlFakeSource}, + Source: &inMemorySource{sources}, } s.initializeSiteInfo() s.prepTemplates() @@ -269,13 +273,22 @@ func TestAbsUrlify(t *testing.T) { t.Fatalf("Unable to render pages. %s", err) } - content, ok := target.files["content/blue/slug-doc-1.html"] - if !ok { - t.Fatalf("Unable to locate rendered content") + tests := []struct { + file, expected string + }{ + {"content/blue/doc2.html", "Going"}, + {"sect/doc1.html", "link"}, } - expected := "Going" + for _, test := range tests { + content, ok := target.files[test.file] + if !ok { + t.Fatalf("Unable to locate rendered content: %s", test.file) + } + + expected := test.expected if string(content) != expected { t.Errorf("AbsUrlify content expected:\n%q\ngot\n%q", expected, string(content)) } } +} diff --git a/transform/post.go b/transform/post.go index 369b2d6ca..be383700d 100644 --- a/transform/post.go +++ b/transform/post.go @@ -39,6 +39,9 @@ func (t *Transformer) absUrlify(tr *htmltran.Transformer, selectors ...elattr) ( if inURL, err = url.Parse(in); err != nil { return in + "?" } + if fragmentOnly(inURL) { + return in + } return baseURL.ResolveReference(inURL).String() } @@ -50,3 +53,7 @@ func (t *Transformer) absUrlify(tr *htmltran.Transformer, selectors ...elattr) ( return } + +func fragmentOnly(u *url.URL) bool { + return u.Fragment != "" && u.Scheme == "" && u.Opaque == "" && u.User == nil && u.Host == "" && u.Path == "" && u.Path == "" && u.RawQuery == "" +}