From 64b6b290751df01c47ff8d8fe21a3eca7a5db283 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Wed, 19 Dec 2018 10:25:53 +0100 Subject: [PATCH] tpl: Fix case handling in cast params Fixes #5538 --- tpl/tplimpl/template_ast_transformers.go | 8 +++---- tpl/tplimpl/template_ast_transformers_test.go | 24 +++++++++++++++---- 2 files changed, 23 insertions(+), 9 deletions(-) diff --git a/tpl/tplimpl/template_ast_transformers.go b/tpl/tplimpl/template_ast_transformers.go index 9faaa2249fe..1e158930881 100644 --- a/tpl/tplimpl/template_ast_transformers.go +++ b/tpl/tplimpl/template_ast_transformers.go @@ -112,11 +112,9 @@ func (c *templateContext) paramsKeysToLower(n parse.Node) { c.paramsKeysToLowerForNodes(subTempl.Root) } case *parse.PipeNode: - for i, elem := range x.Decl { - if len(x.Cmds) > i { - // maps $site => .Site etc. - c.decl[elem.Ident[0]] = x.Cmds[i].String() - } + if len(x.Decl) == 1 && len(x.Cmds) == 1 { + // maps $site => .Site etc. + c.decl[x.Decl[0].Ident[0]] = x.Cmds[0].String() } for _, cmd := range x.Cmds { diff --git a/tpl/tplimpl/template_ast_transformers_test.go b/tpl/tplimpl/template_ast_transformers_test.go index 46a037cecb5..52d8c17b116 100644 --- a/tpl/tplimpl/template_ast_transformers_test.go +++ b/tpl/tplimpl/template_ast_transformers_test.go @@ -19,13 +19,16 @@ import ( "html/template" + "github.com/spf13/cast" + "github.com/stretchr/testify/require" ) var ( testFuncs = map[string]interface{}{ - "First": func(v ...interface{}) interface{} { return v[0] }, - "Echo": 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 }, "where": func(seq, key interface{}, args ...interface{}) (interface{}, error) { return map[string]interface{}{ "ByWeight": fmt.Sprintf("%v:%v:%v", seq, key, args), @@ -37,8 +40,9 @@ var ( "NotParam": "Hi There", "Slice": []int{1, 3}, "Params": map[string]interface{}{ - "lower": "P1L", - "slice": []int{1, 3}, + "lower": "P1L", + "slice": []int{1, 3}, + "mydate": "1972-01-28", }, "Pages": map[string]interface{}{ "ByWeight": []int{1, 3}, @@ -142,6 +146,14 @@ PARAMS STRING2: {{ with $pages }}{{ .ByWeight }}{{ end }} PARAMS STRING3: {{ $pages3.ByWeight }} {{ $first := First .Pages .Site.Params.LOWER }} PARAMS COMPOSITE: {{ $first.ByWeight }} + + +{{ $time := $.Params.MyDate | ToTime }} +{{ $time = $time.AddDate 0 1 0 }} +PARAMS TIME: {{ $time.Format "2006-01-02" }} + +{{ $_x := $.Params.MyDate | ToTime }} +PARAMS TIME2: {{ $_x.AddDate 0 1 0 }} ` ) @@ -209,6 +221,10 @@ func TestParamsKeysToLower(t *testing.T) { // Issue #5068 require.Contains(t, result, "PCurrentSection: pcurrentsection") + // Issue #5541 + require.Contains(t, result, "PARAMS TIME: 1972-02-28") + require.Contains(t, result, "PARAMS TIME2: 1972-02-28") + } func BenchmarkTemplateParamsKeysToLower(b *testing.B) {