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  }