tpl: Fix case handling in cast params
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Wed, 19 Dec 2018 09:25:53 +0000 (10:25 +0100)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Wed, 19 Dec 2018 12:19:22 +0000 (13:19 +0100)
Fixes #5538

tpl/tplimpl/template_ast_transformers.go
tpl/tplimpl/template_ast_transformers_test.go

index 9faaa2249fe4ff4ae1af2974205f573b750cad01..1e158930881faae8fca1fd96f8f7ea5dc0156e2a 100644 (file)
@@ -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 {
index 46a037cecb5a4ef45af717e92d20630c5c02874d..52d8c17b116261a7340a77ab91a5e5846b11d532 100644 (file)
@@ -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) {