github.com/lmorg/murex@v0.0.0-20240217211045-e081c89cd4ef/lang/types/cast_test.go (about) 1 package types_test 2 3 import ( 4 "testing" 5 6 "github.com/lmorg/murex/lang/types" 7 "github.com/lmorg/murex/test/count" 8 ) 9 10 type test struct { 11 In interface{} 12 DataType string 13 Out interface{} 14 Error bool 15 } 16 17 func testConvertGoType(t *testing.T, tests []test) { 18 count.Tests(t, len(tests)) 19 20 for i := range tests { 21 var failed bool 22 23 v, err := types.ConvertGoType(tests[i].In, tests[i].DataType) 24 if (err != nil && !tests[i].Error) || 25 (err == nil && tests[i].Error) { 26 27 t.Error("ConvertGoType failed with an error:") 28 failed = true 29 30 } else if tests[i].Out != v { 31 t.Error("ConvertGoType out mismatch:") 32 failed = true 33 } 34 35 if failed { 36 t.Logf(" Test #: %d", i) 37 t.Logf(" Mx Type: %s", tests[i].DataType) 38 t.Logf(" In Type: %T", tests[i].In) 39 t.Logf(" Exp Type: %T", tests[i].Out) 40 t.Logf(" Act Type: %T", v) 41 t.Log(" In Value: ", tests[i].In) 42 t.Log(" Exp Value:", tests[i].Out) 43 t.Log(" Act Value:", v) 44 t.Log(" Error: ", err) 45 t.Log(" Exp Err: ", tests[i].Error) 46 } 47 } 48 } 49 func TestConvertGoTypeBaseline(t *testing.T) { 50 tests := []test{ 51 { 52 In: nil, 53 DataType: types.Null, 54 Out: "", 55 }, 56 { 57 In: "foobar", 58 DataType: types.String, 59 Out: "foobar", 60 }, 61 { 62 In: 42, 63 DataType: types.Integer, 64 Out: 42, 65 }, 66 { 67 In: 42.12345, 68 DataType: types.Float, 69 Out: float64(42.12345), 70 }, 71 { 72 In: 42, 73 DataType: types.Number, 74 Out: float64(42), 75 }, 76 { 77 In: 42.12345, 78 DataType: types.Number, 79 Out: float64(42.12345), 80 }, 81 { 82 In: true, 83 DataType: types.Boolean, 84 Out: true, 85 }, 86 { 87 In: false, 88 DataType: types.Boolean, 89 Out: false, 90 }, 91 { 92 In: `{ out: "testing" }`, 93 DataType: types.CodeBlock, 94 Out: ` out: "testing" `, 95 }, 96 { 97 In: `foobar`, 98 DataType: types.Json, 99 //Out: `{ "Value": "foobar" }`, 100 Out: `foobar`, 101 }, 102 } 103 104 testConvertGoType(t, tests) 105 }