summaryrefslogtreecommitdiffstats
path: root/hugolib/content_render_hooks_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'hugolib/content_render_hooks_test.go')
-rw-r--r--hugolib/content_render_hooks_test.go369
1 files changed, 36 insertions, 333 deletions
diff --git a/hugolib/content_render_hooks_test.go b/hugolib/content_render_hooks_test.go
index 5b2121ef8..22a33c35a 100644
--- a/hugolib/content_render_hooks_test.go
+++ b/hugolib/content_render_hooks_test.go
@@ -14,361 +14,61 @@
package hugolib
import (
- "fmt"
"testing"
-
- qt "github.com/frankban/quicktest"
)
-func TestRenderHookEditNestedPartial(t *testing.T) {
- config := `
-baseURL="https://example.org"
-workingDir="/mywork"
-`
- b := newTestSitesBuilder(t).WithWorkingDir("/mywork").WithConfigFile("toml", config).Running()
-
- b.WithTemplates("_default/single.html", "{{ .Content }}")
- b.WithTemplates("partials/mypartial1.html", `PARTIAL1 {{ partial "mypartial2.html" }}`)
- b.WithTemplates("partials/mypartial2.html", `PARTIAL2`)
- b.WithTemplates("_default/_markup/render-link.html", `Link {{ .Text | safeHTML }}|{{ partial "mypartial1.html" . }}END`)
-
- b.WithContent("p1.md", `---
-title: P1
----
-
-[First Link](https://www.google.com "Google's Homepage")
-
-`)
- b.Build(BuildCfg{})
-
- b.AssertFileContent("public/p1/index.html", `Link First Link|PARTIAL1 PARTIAL2END`)
-
- b.EditFiles("layouts/partials/mypartial1.html", `PARTIAL1_EDITED {{ partial "mypartial2.html" }}`)
-
- b.Build(BuildCfg{})
-
- b.AssertFileContent("public/p1/index.html", `Link First Link|PARTIAL1_EDITED PARTIAL2END`)
-
- b.EditFiles("layouts/partials/mypartial2.html", `PARTIAL2_EDITED`)
-
- b.Build(BuildCfg{})
-
- b.AssertFileContent("public/p1/index.html", `Link First Link|PARTIAL1_EDITED PARTIAL2_EDITEDEND`)
-}
-
-func TestRenderHooks(t *testing.T) {
- config := `
-baseURL="https://example.org"
-workingDir="/mywork"
-
-[markup]
-[markup.goldmark]
-[markup.goldmark.parser]
-autoHeadingID = true
-autoHeadingIDType = "github"
-[markup.goldmark.parser.attribute]
-block = true
-title = true
-
-`
- b := newTestSitesBuilder(t).WithWorkingDir("/mywork").WithConfigFile("toml", config).Running()
- b.WithTemplatesAdded("_default/single.html", `{{ .Content }}`)
- b.WithTemplatesAdded("shortcodes/myshortcode1.html", `{{ partial "mypartial1" }}`)
- b.WithTemplatesAdded("shortcodes/myshortcode2.html", `{{ partial "mypartial2" }}`)
- b.WithTemplatesAdded("shortcodes/myshortcode3.html", `SHORT3|`)
- b.WithTemplatesAdded("shortcodes/myshortcode4.html", `
-<div class="foo">
-{{ .Inner | markdownify }}
-</div>
-`)
- b.WithTemplatesAdded("shortcodes/myshortcode5.html", `
-Inner Inline: {{ .Inner | .Page.RenderString }}
-Inner Block: {{ .Inner | .Page.RenderString (dict "display" "block" ) }}
-`)
-
- b.WithTemplatesAdded("shortcodes/myshortcode6.html", `.Render: {{ .Page.Render "myrender" }}`)
- b.WithTemplatesAdded("partials/mypartial1.html", `PARTIAL1`)
- b.WithTemplatesAdded("partials/mypartial2.html", `PARTIAL2 {{ partial "mypartial3.html" }}`)
- b.WithTemplatesAdded("partials/mypartial3.html", `PARTIAL3`)
- b.WithTemplatesAdded("partials/mypartial4.html", `PARTIAL4`)
- b.WithTemplatesAdded("customview/myrender.html", `myrender: {{ .Title }}|P4: {{ partial "mypartial4" }}`)
- b.WithTemplatesAdded("_default/_markup/render-link.html", `{{ with .Page }}{{ .Title }}{{ end }}|{{ .Destination | safeURL }}|Title: {{ .Title | safeHTML }}|Text: {{ .Text | safeHTML }}|END`)
- b.WithTemplatesAdded("docs/_markup/render-link.html", `Link docs section: {{ .Text | safeHTML }}|END`)
- b.WithTemplatesAdded("_default/_markup/render-image.html", `IMAGE: {{ .Page.Title }}||{{ .Destination | safeURL }}|Title: {{ .Title | safeHTML }}|Text: {{ .Text | safeHTML }}|END`)
- b.WithTemplatesAdded("_default/_markup/render-heading.html", `HEADING: {{ .Page.Title }}||Level: {{ .Level }}|Anchor: {{ .Anchor | safeURL }}|Text: {{ .Text | safeHTML }}|Attributes: {{ .Attributes }}|END`)
- b.WithTemplatesAdded("docs/_markup/render-heading.html", `Docs Level: {{ .Level }}|END`)
-
- b.WithContent("customview/p1.md", `---
-title: Custom View
----
-
-{{< myshortcode6 >}}
-
- `, "blog/p1.md", `---
-title: Cool Page
----
-
-[First Link](https://www.google.com "Google's Homepage")
-<https://foo.bar/>
-https://bar.baz/
-<fake@example.com>
-<mailto:fake2@example.com>
-
-{{< myshortcode3 >}}
-
-[Second Link](https://www.google.com "Google's Homepage")
-
-Image:
-
-![Drag Racing](/images/Dragster.jpg "image title")
-
-Attributes:
-
-## Some Heading {.text-serif #a-heading title="Hovered"}
-
-
-`, "blog/p2.md", `---
-title: Cool Page2
-layout: mylayout
----
-
-{{< myshortcode1 >}}
-
-[Some Text](https://www.google.com "Google's Homepage")
-
-,[No Whitespace Please](https://gohugo.io),
-
-
-
-`, "blog/p3.md", `---
-title: Cool Page3
----
-
-{{< myshortcode2 >}}
-
-
-`, "docs/docs1.md", `---
-title: Docs 1
----
-
-
-[Docs 1](https://www.google.com "Google's Homepage")
-
-
-`, "blog/p4.md", `---
-title: Cool Page With Image
----
-
-Image:
-
-![Drag Racing](/images/Dragster.jpg "image title")
-
-
-`, "blog/p5.md", `---
-title: Cool Page With Markdownify
----
-
-{{< myshortcode4 >}}
-Inner Link: [Inner Link](https://www.google.com "Google's Homepage")
-{{< /myshortcode4 >}}
-
-`, "blog/p6.md", `---
-title: With RenderString
----
-
-{{< myshortcode5 >}}Inner Link: [Inner Link](https://www.gohugo.io "Hugo's Homepage"){{< /myshortcode5 >}}
-
-`, "blog/p7.md", `---
-title: With Headings
----
-
-# Heading Level 1
-some text
-
-## Heading Level 2
-
-### Heading Level 3
-`,
- "docs/p8.md", `---
-title: Doc With Heading
----
-
-# Docs lvl 1
-
-`,
- )
-
- for i := 1; i <= 30; i++ {
- // Add some content with no shortcodes or links, i.e no templates needed.
- b.WithContent(fmt.Sprintf("blog/notempl%d.md", i), `---
-title: No Template
----
-
-## Content
-`)
- }
- counters := &testCounters{}
- b.Build(BuildCfg{testCounters: counters})
- b.Assert(int(counters.contentRenderCounter), qt.Equals, 45)
-
- b.AssertFileContent("public/blog/p1/index.html", `
-Cool Page|https://www.google.com|Title: Google's Homepage|Text: First Link|END
-Cool Page|https://foo.bar/|Title: |Text: https://foo.bar/|END
-Cool Page|https://bar.baz/|Title: |Text: https://bar.baz/|END
-Cool Page|mailto:fake@example.com|Title: |Text: fake@example.com|END
-Cool Page|mailto:fake2@example.com|Title: |Text: mailto:fake2@example.com|END
-Text: Second
-SHORT3|
-<p>IMAGE: Cool Page||/images/Dragster.jpg|Title: image title|Text: Drag Racing|END</p>
-`)
-
- b.AssertFileContent("public/customview/p1/index.html", `.Render: myrender: Custom View|P4: PARTIAL4`)
- b.AssertFileContent("public/blog/p2/index.html",
- `PARTIAL
-,Cool Page2|https://gohugo.io|Title: |Text: No Whitespace Please|END,`,
- )
- b.AssertFileContent("public/blog/p3/index.html", `PARTIAL3`)
- // We may add type template support later, keep this for then. b.AssertFileContent("public/docs/docs1/index.html", `Link docs section: Docs 1|END`)
- b.AssertFileContent("public/blog/p4/index.html", `<p>IMAGE: Cool Page With Image||/images/Dragster.jpg|Title: image title|Text: Drag Racing|END</p>`)
- // markdownify
- b.AssertFileContent("public/blog/p5/index.html", "Inner Link: |https://www.google.com|Title: Google's Homepage|Text: Inner Link|END")
-
- b.AssertFileContent("public/blog/p6/index.html",
- "Inner Inline: Inner Link: With RenderString|https://www.gohugo.io|Title: Hugo's Homepage|Text: Inner Link|END",
- "Inner Block: <p>Inner Link: With RenderString|https://www.gohugo.io|Title: Hugo's Homepage|Text: Inner Link|END</p>",
- )
-
- b.EditFiles(
- "layouts/_default/_markup/render-link.html", `EDITED: {{ .Destination | safeURL }}|`,
- "layouts/_default/_markup/render-image.html", `IMAGE EDITED: {{ .Destination | safeURL }}|`,
- "layouts/docs/_markup/render-link.html", `DOCS EDITED: {{ .Destination | safeURL }}|`,
- "layouts/partials/mypartial1.html", `PARTIAL1_EDITED`,
- "layouts/partials/mypartial3.html", `PARTIAL3_EDITED`,
- "layouts/partials/mypartial4.html", `PARTIAL4_EDITED`,
- "layouts/shortcodes/myshortcode3.html", `SHORT3_EDITED|`,
- )
-
- counters = &testCounters{}
- b.Build(BuildCfg{testCounters: counters})
- // Make sure that only content using the changed templates are re-rendered.
- b.Assert(int(counters.contentRenderCounter), qt.Equals, 7)
-
- b.AssertFileContent("public/customview/p1/index.html", `.Render: myrender: Custom View|P4: PARTIAL4_EDITED`)
- b.AssertFileContent("public/blog/p1/index.html", `<p>EDITED: https://www.google.com|</p>`, "SHORT3_EDITED|")
- b.AssertFileContent("public/blog/p2/index.html", `PARTIAL1_EDITED`)
- b.AssertFileContent("public/blog/p3/index.html", `PARTIAL3_EDITED`)
- // We may add type template support later, keep this for then. b.AssertFileContent("public/docs/docs1/index.html", `DOCS EDITED: https://www.google.com|</p>`)
- b.AssertFileContent("public/blog/p4/index.html", `IMAGE EDITED: /images/Dragster.jpg|`)
- b.AssertFileContent("public/blog/p6/index.html", "<p>Inner Link: EDITED: https://www.gohugo.io|</p>")
- b.AssertFileContent("public/blog/p7/index.html", "HEADING: With Headings||Level: 1|Anchor: heading-level-1|Text: Heading Level 1|Attributes: map[id:heading-level-1]|END<p>some text</p>\nHEADING: With Headings||Level: 2|Anchor: heading-level-2|Text: Heading Level 2|Attributes: map[id:heading-level-2]|ENDHEADING: With Headings||Level: 3|Anchor: heading-level-3|Text: Heading Level 3|Attributes: map[id:heading-level-3]|END")
-
- // https://github.com/gohugoio/hugo/issues/7349
- b.AssertFileContent("public/docs/p8/index.html", "Docs Level: 1")
-}
-
-func TestRenderHooksDeleteTemplate(t *testing.T) {
- config := `
-baseURL="https://example.org"
-workingDir="/mywork"
-`
- b := newTestSitesBuilder(t).WithWorkingDir("/mywork").WithConfigFile("toml", config).Running()
- b.WithTemplatesAdded("_default/single.html", `{{ .Content }}`)
- b.WithTemplatesAdded("_default/_markup/render-link.html", `html-render-link`)
-
- b.WithContent("p1.md", `---
-title: P1
----
-[First Link](https://www.google.com "Google's Homepage")
-
-`)
- b.Build(BuildCfg{})
-
- b.AssertFileContent("public/p1/index.html", `<p>html-render-link</p>`)
-
- b.RemoveFiles(
- "layouts/_default/_markup/render-link.html",
- )
-
- b.Build(BuildCfg{})
- b.AssertFileContent("public/p1/index.html", `<p><a href="https://www.google.com" title="Google's Homepage">First Link</a></p>`)
-}
-
-func TestRenderHookAddTemplate(t *testing.T) {
- config := `
-baseURL="https://example.org"
-workingDir="/mywork"
-`
- b := newTestSitesBuilder(t).WithWorkingDir("/mywork").WithConfigFile("toml", config).Running()
- b.WithTemplatesAdded("_default/single.html", `{{ .Content }}`)
-
- b.WithContent("p1.md", `---
-title: P1
----
-[First Link](https://www.google.com "Google's Homepage")
-
-`)
- b.Build(BuildCfg{})
-
- b.AssertFileContent("public/p1/index.html", `<p><a href="https://www.google.com" title="Google's Homepage">First Link</a></p>`)
-
- b.EditFiles("layouts/_default/_markup/render-link.html", `html-render-link`)
-
- b.Build(BuildCfg{})
-
- b.AssertFileContent("public/p1/index.html", `<p>html-render-link</p>`)
-}
-
func TestRenderHooksRSS(t *testing.T) {
- b := newTestSitesBuilder(t)
-
- b.WithTemplates("index.html", `
+ files := `
+-- hugo.toml --
+baseURL = "https://example.org"
+disableKinds = ["taxonomy", "term"]
+-- layouts/index.html --
{{ $p := site.GetPage "p1.md" }}
{{ $p2 := site.GetPage "p2.md" }}
-
P1: {{ $p.Content }}
P2: {{ $p2.Content }}
-
- `, "index.xml", `
-
+-- layouts/index.xml --
{{ $p2 := site.GetPage "p2.md" }}
{{ $p3 := site.GetPage "p3.md" }}
-
P2: {{ $p2.Content }}
P3: {{ $p3.Content }}
-
-
- `,
- "_default/_markup/render-link.html", `html-link: {{ .Destination | safeURL }}|`,
- "_default/_markup/render-link.rss.xml", `xml-link: {{ .Destination | safeURL }}|`,
- "_default/_markup/render-heading.html", `html-heading: {{ .Text }}|`,
- "_default/_markup/render-heading.rss.xml", `xml-heading: {{ .Text }}|`,
- )
-
- b.WithContent("p1.md", `---
+-- layouts/_default/_markup/render-link.html --
+html-link: {{ .Destination | safeURL }}|
+-- layouts/_default/_markup/render-link.rss.xml --
+xml-link: {{ .Destination | safeURL }}|
+-- layouts/_default/_markup/render-heading.html --
+html-heading: {{ .Text }}|
+-- layouts/_default/_markup/render-heading.rss.xml --
+xml-heading: {{ .Text }}|
+-- content/p1.md --
+---
title: "p1"
---
P1. [I'm an inline-style link](https://www.gohugo.io)
# Heading in p1
-`, "p2.md", `---
+-- content/p2.md --
+---
title: "p2"
---
-P1. [I'm an inline-style link](https://www.bep.is)
+P2. [I'm an inline-style link](https://www.bep.is)
# Heading in p2
-`,
- "p3.md", `---
-title: "p2"
+-- content/p3.md --
+---
+title: "p3"
outputs: ["rss"]
---
P3. [I'm an inline-style link](https://www.example.org)
-
-`,
- )
-
- b.Build(BuildCfg{})
+`
+ b := NewIntegrationTestBuilder(
+ IntegrationTestConfig{
+ T: t,
+ TxtarString: files,
+ },
+ ).Build()
b.AssertFileContent("public/index.html", `
P1: <p>P1. html-link: https://www.gohugo.io|</p>
@@ -376,7 +76,7 @@ html-heading: Heading in p1|
html-heading: Heading in p2|
`)
b.AssertFileContent("public/index.xml", `
-P2: <p>P1. xml-link: https://www.bep.is|</p>
+P2: <p>P2. xml-link: https://www.bep.is|</p>
P3: <p>P3. xml-link: https://www.example.org|</p>
xml-heading: Heading in p2|
`)
@@ -453,8 +153,12 @@ title: "p2"
-- layouts/_default/_markup/render-heading.html --
Heading: {{ .Text }}|
-Self Fragments: {{ .Page.Fragments.Identifiers }}|
-P1 Fragments: {{ (site.GetPage "p1.md").Fragments.Identifiers }}|
+{{ with .Page }}
+Self Fragments: {{ .Fragments.Identifiers }}|
+{{ end }}
+{{ with (site.GetPage "p1.md") }}
+P1 Fragments: {{ .Fragments.Identifiers }}|
+{{ end }}
-- layouts/_default/single.html --
{{ .Content}}
`
@@ -474,5 +178,4 @@ P1 Fragments: [b c z]
Self Fragments: [d e f]
P1 Fragments: [b c z]
`)
-
}