Add support for inline partials

Fixes #7444
This commit is contained in:
Bjørn Erik Pedersen
2020-07-01 10:43:17 +02:00
parent c66dc6c74f
commit 4a3efea7ef
4 changed files with 175 additions and 4 deletions

View File

@@ -65,8 +65,7 @@ func TestSiteBuildErrors(t *testing.T) {
fileFixer: func(content string) string {
return strings.Replace(content, ".Title }}", ".Title }", 1)
},
// Base templates gets parsed at build time.
assertBuildError: func(a testSiteBuildErrorAsserter, err error) {
assertCreateError: func(a testSiteBuildErrorAsserter, err error) {
a.assertLineNumber(4, err)
},
},
@@ -91,7 +90,7 @@ func TestSiteBuildErrors(t *testing.T) {
a.c.Assert(fe.Position().LineNumber, qt.Equals, 5)
a.c.Assert(fe.Position().ColumnNumber, qt.Equals, 1)
a.c.Assert(fe.ChromaLexer, qt.Equals, "go-html-template")
a.assertErrorMessage("\"layouts/foo/single.html:5:1\": parse failed: template: foo/single.html:5: unexpected \"}\" in operand", fe.Error())
a.assertErrorMessage("\"layouts/_default/single.html:5:1\": parse failed: template: _default/single.html.___b:5: unexpected \"}\" in operand", fe.Error())
},
},

View File

@@ -597,3 +597,83 @@ func collectIdentities(set map[identity.Identity]bool, provider identity.Provide
func ident(level int) string {
return strings.Repeat(" ", level)
}
func TestPartialInline(t *testing.T) {
b := newTestSitesBuilder(t)
b.WithContent("p1.md", "")
b.WithTemplates(
"index.html", `
{{ $p1 := partial "p1" . }}
{{ $p2 := partial "p2" . }}
P1: {{ $p1 }}
P2: {{ $p2 }}
{{ define "partials/p1" }}Inline: p1{{ end }}
{{ define "partials/p2" }}
{{ $value := 32 }}
{{ return $value }}
{{ end }}
`,
)
b.CreateSites().Build(BuildCfg{})
b.AssertFileContent("public/index.html",
`
P1: Inline: p1
P2: 32`,
)
}
func TestPartialInlineBase(t *testing.T) {
b := newTestSitesBuilder(t)
b.WithContent("p1.md", "")
b.WithTemplates(
"baseof.html", `{{ $p3 := partial "p3" . }}P3: {{ $p3 }}
{{ block "main" . }}{{ end }}{{ define "partials/p3" }}Inline: p3{{ end }}`,
"index.html", `
{{ define "main" }}
{{ $p1 := partial "p1" . }}
{{ $p2 := partial "p2" . }}
P1: {{ $p1 }}
P2: {{ $p2 }}
{{ end }}
{{ define "partials/p1" }}Inline: p1{{ end }}
{{ define "partials/p2" }}
{{ $value := 32 }}
{{ return $value }}
{{ end }}
`,
)
b.CreateSites().Build(BuildCfg{})
b.AssertFileContent("public/index.html",
`
P1: Inline: p1
P2: 32
P3: Inline: p3
`,
)
}