summaryrefslogtreecommitdiffstats
path: root/tpl/tplimpl/render_hook_integration_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'tpl/tplimpl/render_hook_integration_test.go')
-rw-r--r--tpl/tplimpl/render_hook_integration_test.go112
1 files changed, 112 insertions, 0 deletions
diff --git a/tpl/tplimpl/render_hook_integration_test.go b/tpl/tplimpl/render_hook_integration_test.go
index 45c6cced1..e67701594 100644
--- a/tpl/tplimpl/render_hook_integration_test.go
+++ b/tpl/tplimpl/render_hook_integration_test.go
@@ -192,3 +192,115 @@ iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAA
`<img src="/dir/p1/pixel.png" alt="alt4" id="&#34;&gt;&lt;script&gt;alert()&lt;/script&gt;">`,
)
}
+
+// Issue 13535
+func TestEmbeddedLinkAndImageRenderHookConfig(t *testing.T) {
+ t.Parallel()
+
+ files := `
+-- hugo.toml --
+disableKinds = ['home','rss','section','sitemap','taxonomy','term']
+
+[markup.goldmark]
+duplicateResourceFiles = false
+
+[markup.goldmark.renderHooks.image]
+#KEY_VALUE
+
+[markup.goldmark.renderHooks.link]
+#KEY_VALUE
+
+#LANGUAGES
+-- content/s1/p1/index.md --
+---
+title: p1
+---
+[p2](p2)
+
+[a](a.txt)
+
+![b](b.jpg)
+-- content/s1/p1/a.txt --
+-- content/s1/p1/b.jpg --
+-- content/s1/p2.md --
+---
+title: p2
+---
+-- layouts/all.html --
+{{ .Content }}
+`
+
+ const customHooks string = `
+-- layouts/s1/_markup/render-link.html --
+custom link render hook: {{ .Text }}|{{ .Destination }}
+-- layouts/s1/_markup/render-image.html --
+custom image render hook: {{ .Text }}|{{ .Destination }}
+`
+
+ const languages string = `
+[languages.en]
+[languages.fr]
+`
+
+ const (
+ fileToCheck = "public/s1/p1/index.html"
+ wantCustom string = "<p>custom link render hook: p2|p2</p>\n<p>custom link render hook: a|a.txt</p>\n<p>custom image render hook: b|b.jpg</p>"
+ wantEmbedded string = "<p><a href=\"/s1/p2/\">p2</a></p>\n<p><a href=\"/s1/p1/a.txt\">a</a></p>\n<p><img src=\"/s1/p1/b.jpg\" alt=\"b\"></p>"
+ wantGoldmark string = "<p><a href=\"p2\">p2</a></p>\n<p><a href=\"a.txt\">a</a></p>\n<p><img src=\"b.jpg\" alt=\"b\"></p>"
+ )
+
+ tests := []struct {
+ id string // the test id
+ isMultilingual bool // whether the site is multilingual single-host
+ hasCustomHooks bool // whether the site has custom link and image render hooks
+ keyValuePair string // the enableDefault (deprecated in v0.148.0) or useEmbedded key-value pair
+ want string // the expected content of public/s1/p1/index.html
+ }{
+ {"01", false, false, "", wantGoldmark}, // monolingual
+ {"02", false, false, "enableDefault = false", wantGoldmark}, // monolingual, enableDefault = false
+ {"03", false, false, "enableDefault = true", wantEmbedded}, // monolingual, enableDefault = true
+ {"04", false, false, "useEmbedded = 'always'", wantEmbedded}, // monolingual, useEmbedded = 'always'
+ {"05", false, false, "useEmbedded = 'auto'", wantGoldmark}, // monolingual, useEmbedded = 'auto'
+ {"06", false, false, "useEmbedded = 'fallback'", wantEmbedded}, // monolingual, useEmbedded = 'fallback'
+ {"07", false, false, "useEmbedded = 'never'", wantGoldmark}, // monolingual, useEmbedded = 'never'
+ {"08", false, true, "", wantCustom}, // monolingual, with custom hooks
+ {"09", false, true, "enableDefault = false", wantCustom}, // monolingual, with custom hooks, enableDefault = false
+ {"10", false, true, "enableDefault = true", wantCustom}, // monolingual, with custom hooks, enableDefault = true
+ {"11", false, true, "useEmbedded = 'always'", wantEmbedded}, // monolingual, with custom hooks, useEmbedded = 'always'
+ {"12", false, true, "useEmbedded = 'auto'", wantCustom}, // monolingual, with custom hooks, useEmbedded = 'auto'
+ {"13", false, true, "useEmbedded = 'fallback'", wantCustom}, // monolingual, with custom hooks, useEmbedded = 'fallback'
+ {"14", false, true, "useEmbedded = 'never'", wantCustom}, // monolingual, with custom hooks, useEmbedded = 'never'
+ {"15", true, false, "", wantEmbedded}, // multilingual
+ {"16", true, false, "enableDefault = false", wantGoldmark}, // multilingual, enableDefault = false
+ {"17", true, false, "enableDefault = true", wantEmbedded}, // multilingual, enableDefault = true
+ {"18", true, false, "useEmbedded = 'always'", wantEmbedded}, // multilingual, useEmbedded = 'always'
+ {"19", true, false, "useEmbedded = 'auto'", wantEmbedded}, // multilingual, useEmbedded = 'auto'
+ {"20", true, false, "useEmbedded = 'fallback'", wantEmbedded}, // multilingual, useEmbedded = 'fallback'
+ {"21", true, false, "useEmbedded = 'never'", wantGoldmark}, // multilingual, useEmbedded = 'never'
+ {"22", true, true, "", wantCustom}, // multilingual, with custom hooks
+ {"23", true, true, "enableDefault = false", wantCustom}, // multilingual, with custom hooks, enableDefault = false
+ {"24", true, true, "enableDefault = true", wantCustom}, // multilingual, with custom hooks, enableDefault = true
+ {"25", true, true, "useEmbedded = 'always'", wantEmbedded}, // multilingual, with custom hooks, useEmbedded = 'always'
+ {"26", true, true, "useEmbedded = 'auto'", wantCustom}, // multilingual, with custom hooks, useEmbedded = 'auto'
+ {"27", true, true, "useEmbedded = 'fallback'", wantCustom}, // multilingual, with custom hooks, useEmbedded = 'fallback'
+ {"28", true, true, "useEmbedded = 'never'", wantCustom}, // multilingual, with custom hooks, useEmbedded = 'never'
+ }
+
+ for _, tt := range tests {
+ t.Run(tt.id, func(t *testing.T) {
+ t.Parallel()
+
+ f := files
+ if tt.isMultilingual {
+ f = strings.ReplaceAll(f, "#LANGUAGES", languages)
+ }
+ if tt.hasCustomHooks {
+ f = f + customHooks
+ }
+ f = strings.ReplaceAll(f, "#KEY_VALUE", tt.keyValuePair)
+
+ b := hugolib.Test(t, f)
+ b.AssertFileContent(fileToCheck, tt.want)
+ })
+ }
+}