github.com/graemephi/kahugo@v0.62.3-0.20211121071557-d78c0423784d/tpl/cast/cast_test.go (about)

     1  // Copyright 2017 The Hugo Authors. All rights reserved.
     2  //
     3  // Licensed under the Apache License, Version 2.0 (the "License");
     4  // you may not use this file except in compliance with the License.
     5  // You may obtain a copy of the License at
     6  // http://www.apache.org/licenses/LICENSE-2.0
     7  //
     8  // Unless required by applicable law or agreed to in writing, software
     9  // distributed under the License is distributed on an "AS IS" BASIS,
    10  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    11  // See the License for the specific language governing permissions and
    12  // limitations under the License.
    13  
    14  package cast
    15  
    16  import (
    17  	"html/template"
    18  	"testing"
    19  
    20  	qt "github.com/frankban/quicktest"
    21  )
    22  
    23  func TestToInt(t *testing.T) {
    24  	t.Parallel()
    25  	c := qt.New(t)
    26  
    27  	ns := New()
    28  
    29  	for i, test := range []struct {
    30  		v      interface{}
    31  		expect interface{}
    32  	}{
    33  		{"1", 1},
    34  		{template.HTML("2"), 2},
    35  		{template.CSS("3"), 3},
    36  		{template.HTMLAttr("4"), 4},
    37  		{template.JS("5"), 5},
    38  		{template.JSStr("6"), 6},
    39  		{"a", false},
    40  		{t, false},
    41  	} {
    42  		errMsg := qt.Commentf("[%d] %v", i, test.v)
    43  
    44  		result, err := ns.ToInt(test.v)
    45  
    46  		if b, ok := test.expect.(bool); ok && !b {
    47  			c.Assert(err, qt.Not(qt.IsNil), errMsg)
    48  			continue
    49  		}
    50  
    51  		c.Assert(err, qt.IsNil, errMsg)
    52  		c.Assert(result, qt.Equals, test.expect, errMsg)
    53  	}
    54  }
    55  
    56  func TestToString(t *testing.T) {
    57  	t.Parallel()
    58  	c := qt.New(t)
    59  	ns := New()
    60  
    61  	for i, test := range []struct {
    62  		v      interface{}
    63  		expect interface{}
    64  	}{
    65  		{1, "1"},
    66  		{template.HTML("2"), "2"},
    67  		{"a", "a"},
    68  		{t, false},
    69  	} {
    70  		errMsg := qt.Commentf("[%d] %v", i, test.v)
    71  
    72  		result, err := ns.ToString(test.v)
    73  
    74  		if b, ok := test.expect.(bool); ok && !b {
    75  			c.Assert(err, qt.Not(qt.IsNil), errMsg)
    76  			continue
    77  		}
    78  
    79  		c.Assert(err, qt.IsNil, errMsg)
    80  		c.Assert(result, qt.Equals, test.expect, errMsg)
    81  	}
    82  }
    83  
    84  func TestToFloat(t *testing.T) {
    85  	t.Parallel()
    86  	c := qt.New(t)
    87  	ns := New()
    88  
    89  	for i, test := range []struct {
    90  		v      interface{}
    91  		expect interface{}
    92  	}{
    93  		{"1", 1.0},
    94  		{template.HTML("2"), 2.0},
    95  		{template.CSS("3"), 3.0},
    96  		{template.HTMLAttr("4"), 4.0},
    97  		{template.JS("-5.67"), -5.67},
    98  		{template.JSStr("6"), 6.0},
    99  		{"1.23", 1.23},
   100  		{"-1.23", -1.23},
   101  		{"0", 0.0},
   102  		{float64(2.12), 2.12},
   103  		{int64(123), 123.0},
   104  		{2, 2.0},
   105  		{t, false},
   106  	} {
   107  		errMsg := qt.Commentf("[%d] %v", i, test.v)
   108  
   109  		result, err := ns.ToFloat(test.v)
   110  
   111  		if b, ok := test.expect.(bool); ok && !b {
   112  			c.Assert(err, qt.Not(qt.IsNil), errMsg)
   113  			continue
   114  		}
   115  
   116  		c.Assert(err, qt.IsNil, errMsg)
   117  		c.Assert(result, qt.Equals, test.expect, errMsg)
   118  	}
   119  }