summaryrefslogtreecommitdiffstats
path: root/tpl/tplimpl/template_ast_transformers_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'tpl/tplimpl/template_ast_transformers_test.go')
-rw-r--r--tpl/tplimpl/template_ast_transformers_test.go90
1 files changed, 84 insertions, 6 deletions
diff --git a/tpl/tplimpl/template_ast_transformers_test.go b/tpl/tplimpl/template_ast_transformers_test.go
index 45cf4399a..611f5d8ca 100644
--- a/tpl/tplimpl/template_ast_transformers_test.go
+++ b/tpl/tplimpl/template_ast_transformers_test.go
@@ -15,9 +15,14 @@ package tplimpl
import (
"bytes"
"fmt"
+ "html/template"
"testing"
+ "time"
- "html/template"
+ "github.com/gohugoio/hugo/tpl"
+
+ "github.com/gohugoio/hugo/deps"
+ "github.com/gohugoio/hugo/hugofs"
"github.com/spf13/cast"
@@ -26,6 +31,7 @@ import (
var (
testFuncs = map[string]interface{}{
+ "getif": func(v interface{}) interface{} { return v },
"ToTime": func(v interface{}) interface{} { return cast.ToTime(v) },
"First": func(v ...interface{}) interface{} { return v[0] },
"Echo": func(v interface{}) interface{} { return v },
@@ -183,7 +189,7 @@ func TestParamsKeysToLower(t *testing.T) {
require.Equal(t, -1, c.decl.indexOfReplacementStart([]string{}))
- c.paramsKeysToLower(templ.Tree.Root)
+ c.applyTransformations(templ.Tree.Root)
var b bytes.Buffer
@@ -265,7 +271,7 @@ func BenchmarkTemplateParamsKeysToLower(b *testing.B) {
for i := 0; i < b.N; i++ {
c := newTemplateContext(createParseTreeLookup(templates[i]))
- c.paramsKeysToLower(templ.Tree.Root)
+ c.applyTransformations(templ.Tree.Root)
}
}
@@ -304,7 +310,7 @@ Pretty First3: {{ $__amber_4.COLORS.PRETTY.FIRST}}
c := newTemplateContext(createParseTreeLookup(templ))
- c.paramsKeysToLower(templ.Tree.Root)
+ c.applyTransformations(templ.Tree.Root)
var b bytes.Buffer
@@ -348,7 +354,7 @@ P2: {{ .Params.LOWER }}
c := newTemplateContext(createParseTreeLookup(overlayTpl))
- c.paramsKeysToLower(overlayTpl.Tree.Root)
+ c.applyTransformations(overlayTpl.Tree.Root)
var b bytes.Buffer
@@ -377,6 +383,78 @@ func TestTransformRecursiveTemplate(t *testing.T) {
require.NoError(t, err)
c := newTemplateContext(createParseTreeLookup(templ))
- c.paramsKeysToLower(templ.Tree.Root)
+ c.applyTransformations(templ.Tree.Root)
+
+}
+
+type I interface {
+ Method0()
+}
+
+type T struct {
+ NonEmptyInterfaceTypedNil I
+}
+
+func (T) Method0() {
+}
+
+func TestInsertIsZeroFunc(t *testing.T) {
+ t.Parallel()
+
+ assert := require.New(t)
+
+ var (
+ ctx = map[string]interface{}{
+ "True": true,
+ "Now": time.Now(),
+ "TimeZero": time.Time{},
+ "T": &T{NonEmptyInterfaceTypedNil: (*T)(nil)},
+ }
+
+ templ = `
+{{ if .True }}.True: TRUE{{ else }}.True: FALSE{{ end }}
+{{ if .TimeZero }}.TimeZero1: TRUE{{ else }}.TimeZero1: FALSE{{ end }}
+{{ if (.TimeZero) }}.TimeZero2: TRUE{{ else }}.TimeZero2: FALSE{{ end }}
+{{ if not .TimeZero }}.TimeZero3: TRUE{{ else }}.TimeZero3: FALSE{{ end }}
+{{ if .Now }}.Now: TRUE{{ else }}.Now: FALSE{{ end }}
+{{ with .TimeZero }}.TimeZero1 with: {{ . }}{{ else }}.TimeZero1 with: FALSE{{ end }}
+{{ template "mytemplate" . }}
+{{ if .T.NonEmptyInterfaceTypedNil }}.NonEmptyInterfaceTypedNil: TRUE{{ else }}.NonEmptyInterfaceTypedNil: FALSE{{ end }}
+
+
+{{ define "mytemplate" }}
+{{ if .TimeZero }}.TimeZero1: mytemplate: TRUE{{ else }}.TimeZero1: mytemplate: FALSE{{ end }}
+{{ end }}
+
+`
+ )
+
+ v := newTestConfig()
+ fs := hugofs.NewMem(v)
+
+ depsCfg := newDepsConfig(v)
+ depsCfg.Fs = fs
+ d, err := deps.New(depsCfg)
+ assert.NoError(err)
+
+ provider := DefaultTemplateProvider
+ provider.Update(d)
+
+ h := d.Tmpl.(handler)
+
+ assert.NoError(h.addTemplate("mytemplate.html", templ))
+
+ tt, _ := d.Tmpl.Lookup("mytemplate.html")
+ result, err := tt.(tpl.TemplateExecutor).ExecuteToString(ctx)
+ assert.NoError(err)
+
+ assert.Contains(result, ".True: TRUE")
+ assert.Contains(result, ".TimeZero1: FALSE")
+ assert.Contains(result, ".TimeZero2: FALSE")
+ assert.Contains(result, ".TimeZero3: TRUE")
+ assert.Contains(result, ".Now: TRUE")
+ assert.Contains(result, "TimeZero1 with: FALSE")
+ assert.Contains(result, ".TimeZero1: mytemplate: FALSE")
+ assert.Contains(result, ".NonEmptyInterfaceTypedNil: FALSE")
}