tpl: Fix case handling in cast params - hugo - [fork] hugo port for 9front
 (HTM) git clone git@git.drkhsh.at/hugo.git
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) Submodules
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 64b6b290751df01c47ff8d8fe21a3eca7a5db283
 (DIR) parent bb9c2988f871ca5fe6af9c8e207ec852c631c3b3
 (HTM) Author: Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
       Date:   Wed, 19 Dec 2018 10:25:53 +0100
       
       tpl: Fix case handling in cast params
       
       Fixes #5538
       
       Diffstat:
         M tpl/tplimpl/template_ast_transform… |       8 +++-----
         M tpl/tplimpl/template_ast_transform… |      24 ++++++++++++++++++++----
       
       2 files changed, 23 insertions(+), 9 deletions(-)
       ---
 (DIR) diff --git 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 {
 (DIR) diff --git 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) {