URI: 
       tpl/cast: Handle template.HTML and friends in ToInt - hugo - [fork] hugo port for 9front
  HTML git clone git@git.drkhsh.at/hugo.git
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
   DIR README
   DIR LICENSE
       ---
   DIR commit 4113693ac1b275f3a40aa5c248269340ef9b57f6
   DIR parent f41f72822251c9a31031fd5b3dda585c57c8b028
  HTML Author: Cameron Moore <moorereason@gmail.com>
       Date:   Mon, 22 May 2017 15:05:58 -0500
       
       tpl/cast: Handle template.HTML and friends in ToInt
       
       Also add tests for ToInt and ToString.
       
       Resolves #3308
       
       Diffstat:
         M tpl/cast/cast.go                    |      14 ++++++++++++++
         A tpl/cast/cast_test.go               |      83 +++++++++++++++++++++++++++++++
       
       2 files changed, 97 insertions(+), 0 deletions(-)
       ---
   DIR diff --git a/tpl/cast/cast.go b/tpl/cast/cast.go
       @@ -14,6 +14,8 @@
        package cast
        
        import (
       +        "html/template"
       +
                _cast "github.com/spf13/cast"
        )
        
       @@ -28,6 +30,18 @@ type Namespace struct {
        
        // ToInt converts the given value to an int.
        func (ns *Namespace) ToInt(v interface{}) (int, error) {
       +        switch vv := v.(type) {
       +        case template.HTML:
       +                v = string(vv)
       +        case template.CSS:
       +                v = string(vv)
       +        case template.HTMLAttr:
       +                v = string(vv)
       +        case template.JS:
       +                v = string(vv)
       +        case template.JSStr:
       +                v = string(vv)
       +        }
                return _cast.ToIntE(v)
        }
        
   DIR diff --git a/tpl/cast/cast_test.go b/tpl/cast/cast_test.go
       @@ -0,0 +1,83 @@
       +// Copyright 2017 The Hugo Authors. All rights reserved.
       +//
       +// Licensed under the Apache License, Version 2.0 (the "License");
       +// you may not use this file except in compliance with the License.
       +// You may obtain a copy of the License at
       +// http://www.apache.org/licenses/LICENSE-2.0
       +//
       +// Unless required by applicable law or agreed to in writing, software
       +// distributed under the License is distributed on an "AS IS" BASIS,
       +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
       +// See the License for the specific language governing permissions and
       +// limitations under the License.
       +
       +package cast
       +
       +import (
       +        "fmt"
       +        "html/template"
       +        "testing"
       +
       +        "github.com/stretchr/testify/assert"
       +        "github.com/stretchr/testify/require"
       +)
       +
       +func TestToInt(t *testing.T) {
       +        t.Parallel()
       +
       +        ns := New()
       +
       +        for i, test := range []struct {
       +                v      interface{}
       +                expect interface{}
       +        }{
       +                {"1", 1},
       +                {template.HTML("2"), 2},
       +                {template.CSS("3"), 3},
       +                {template.HTMLAttr("4"), 4},
       +                {template.JS("5"), 5},
       +                {template.JSStr("6"), 6},
       +                {"a", false},
       +                {t, false},
       +        } {
       +                errMsg := fmt.Sprintf("[%d] %v", i, test.v)
       +
       +                result, err := ns.ToInt(test.v)
       +
       +                if b, ok := test.expect.(bool); ok && !b {
       +                        require.Error(t, err, errMsg)
       +                        continue
       +                }
       +
       +                require.NoError(t, err, errMsg)
       +                assert.Equal(t, test.expect, result, errMsg)
       +        }
       +}
       +
       +func TestToString(t *testing.T) {
       +        t.Parallel()
       +
       +        ns := New()
       +
       +        for i, test := range []struct {
       +                v      interface{}
       +                expect interface{}
       +        }{
       +                {1, "1"},
       +                {template.HTML("2"), "2"},
       +                {"a", "a"},
       +                {t, false},
       +        } {
       +                errMsg := fmt.Sprintf("[%d] %v", i, test.v)
       +
       +                result, err := ns.ToString(test.v)
       +
       +                if b, ok := test.expect.(bool); ok && !b {
       +                        require.Error(t, err, errMsg)
       +                        continue
       +                }
       +
       +                require.NoError(t, err, errMsg)
       +                assert.Equal(t, test.expect, result, errMsg)
       +        }
       +}