github.com/informationsea/shellflow@v0.1.3/flowscript/flowscript_value_test.go (about) 1 package flowscript 2 3 import ( 4 "testing" 5 ) 6 7 type BadType struct{} 8 9 func TestValueStringAndType(t *testing.T) { 10 { 11 var str Value = StringValue{"str"} 12 if r, e := str.AsString(); e != nil || r != "str" { 13 t.Fatalf("Invalid str: %s / error:%s", r, e) 14 } 15 if r, e := str.AsInt(); e == nil { 16 t.Fatalf("Invalid str: %d / error:%s", r, e) 17 } 18 if r := str.String(); r != "\"str\"" { 19 t.Fatalf("Invalid str: %s", r) 20 } 21 if v, ok := str.(StringValue); !ok || v.Value() != "str" { 22 t.Fatalf("Invalid value: %s", v.Value()) 23 } 24 } 25 26 { 27 var str Value = StringValue{"456"} 28 if r, e := str.AsString(); e != nil || r != "456" { 29 t.Fatalf("Invalid str: %s / error:%s", r, e) 30 } 31 if r, e := str.AsInt(); e != nil || r != 456 { 32 t.Fatalf("Invalid str: %d / error:%s", r, e) 33 } 34 if r := str.String(); r != "\"456\"" { 35 t.Fatalf("Invalid str: %s", r) 36 } 37 if v, ok := str.(StringValue); !ok || v.Value() != "456" { 38 t.Fatalf("Invalid value: %s", v.Value()) 39 } 40 } 41 42 { 43 var num Value = IntValue{123} 44 if r, e := num.AsString(); e != nil || r != "123" { 45 t.Fatalf("Invalid num: %s / error:%s", r, e) 46 } 47 if r, e := num.AsInt(); e != nil || r != 123 { 48 t.Fatalf("Invalid num: %d / error:%s", r, e) 49 } 50 if r := num.String(); r != "123" { 51 t.Fatalf("Invalid num: %s", r) 52 } 53 if v, ok := num.(IntValue); !ok || v.Value() != 123 { 54 t.Fatalf("Invalid value: %d", v.Value()) 55 } 56 } 57 58 originalArray := [...]Value{IntValue{1}, StringValue{"hoge"}, IntValue{3}} 59 { 60 var array1 Value = ArrayValue{originalArray[:1]} 61 if r, e := array1.AsString(); e != nil || r != "1" { 62 t.Fatalf("Invalid array1: %s / error:%s", r, e) 63 } 64 if r, e := array1.AsInt(); e == nil || e.Error() != "Cannot convert array to int" { 65 t.Fatalf("Invalid array1: %d / error:%s", r, e) 66 } 67 if r := array1.String(); r != "[1]" { 68 t.Fatalf("Invalid array1: %s", r) 69 } 70 if v, ok := array1.(ArrayValue); !ok { 71 t.Fatalf("Invalid value: %s", v.Value()) 72 } 73 } 74 { 75 var array2 Value = ArrayValue{originalArray[:2]} 76 if r, e := array2.AsString(); e != nil || r != "1 hoge" { 77 t.Fatalf("Invalid array2: %s / error:%s", r, e) 78 } 79 if r, e := array2.AsInt(); e == nil || e.Error() != "Cannot convert array to int" { 80 t.Fatalf("Invalid array2: %d / error:%s", r, e) 81 } 82 if r := array2.String(); r != "[1, \"hoge\"]" { 83 t.Fatalf("Invalid array2: %s", r) 84 } 85 if v, ok := array2.(ArrayValue); !ok { 86 t.Fatalf("Invalid value: %s", v.Value()) 87 } 88 } 89 { 90 var array3 Value = ArrayValue{originalArray[:3]} 91 if r, e := array3.AsString(); e != nil || r != "1 hoge 3" { 92 t.Fatalf("Invalid array3: %s / error:%s", r, e) 93 } 94 if r, e := array3.AsInt(); e == nil || e.Error() != "Cannot convert array to int" { 95 t.Fatalf("Invalid array3: %d / error:%s", r, e) 96 } 97 if r := array3.String(); r != "[1, \"hoge\", 3]" { 98 t.Fatalf("Invalid array3: %s", r) 99 } 100 if v, ok := array3.(ArrayValue); !ok { 101 t.Fatalf("Invalid value: %s", v.Value()) 102 } 103 } 104 { 105 var array4 Value = CreateArrayValue2(IntValue{1}, IntValue{2}) 106 if r, e := array4.AsString(); e != nil || r != "1 2" { 107 t.Fatalf("Invalid array3: %s / error:%s", r, e) 108 } 109 if r, e := array4.AsInt(); e == nil || e.Error() != "Cannot convert array to int" { 110 t.Fatalf("Invalid array3: %d / error:%s", r, e) 111 } 112 if r := array4.String(); r != "[1, 2]" { 113 t.Fatalf("Invalid array3: %s", r) 114 } 115 if v, ok := array4.(ArrayValue); !ok { 116 t.Fatalf("Invalid value: %s", v.Value()) 117 } 118 } 119 120 { 121 originalMap := make(map[string]Value) 122 originalMap["hoge"] = StringValue{"foo"} 123 originalMap["foo"] = StringValue{"bar"} 124 var mapValue Value = MapValue{originalMap} 125 if r, e := mapValue.AsString(); e != nil || (r != "hoge=foo foo=bar" && r != "foo=bar hoge=foo") { 126 t.Fatalf("Invalid map: %s / error:%s", r, e) 127 } 128 if r, e := mapValue.AsInt(); e == nil || e.Error() != "Cannot convert map to int" { 129 t.Fatalf("Invalid map: %d / error:%s", r, e) 130 } 131 if r := mapValue.String(); r != "{hoge=\"foo\", foo=\"bar\"}" && r != "{foo=\"bar\", hoge=\"foo\"}" { 132 t.Fatalf("Invalid map: %s", r) 133 } 134 if v, ok := mapValue.(MapValue); !ok { 135 t.Fatalf("Invalid value: %s", v.Value()) 136 } 137 } 138 139 { 140 basename := BuiltinFunctions["basename"] 141 var functionValue Value = FunctionValue{basename} 142 if r, e := functionValue.AsString(); e == nil || e.Error() != "Cannot convert function to string" { 143 t.Fatalf("Invalid string representation: %s / error:%s", r, e) 144 } 145 if r, e := functionValue.AsInt(); e == nil || e.Error() != "Cannot convert function to int" { 146 t.Fatalf("Invalid functionValue: %d / error:%s", r, e) 147 } 148 if r := functionValue.String(); r != "basename" { 149 t.Fatalf("Invalid functionValue: %s", r) 150 } 151 if v, ok := functionValue.(FunctionValue); !ok { 152 t.Fatalf("Invalid value: %s", v.Value()) 153 } 154 } 155 }