cast_test.go (2514B)
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 any 31 expect any 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 any 63 expect any 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 any 91 expect any 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 }