diff options
Diffstat (limited to 'tpl/tplimpl/render_hook_integration_test.go')
-rw-r--r-- | tpl/tplimpl/render_hook_integration_test.go | 112 |
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=""><script>alert()</script>">`, ) } + +// 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) + + +-- 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) + }) + } +} |