github.com/informationsea/shellflow@v0.1.3/flowscript/flowscript_environment_test.go (about)

     1  package flowscript
     2  
     3  import (
     4  	"testing"
     5  )
     6  
     7  func TestEnvironment(t *testing.T) {
     8  	ge := NewGlobalEnvironment()
     9  	if p := ge.ParentEnvironment(); p != nil {
    10  		t.Fatalf("Global Environment should not have parent environment: %s", p)
    11  	}
    12  
    13  	{
    14  		v, e := ge.Value("basename")
    15  		if e != nil {
    16  			t.Fatalf("failed to get builtin function: %s", e.Error())
    17  		}
    18  		sf, ok := v.(FunctionValue)
    19  		if !ok {
    20  			t.Fatalf("failed to get builtin function: %s", sf)
    21  		}
    22  		if sf.value.name != "basename" {
    23  			t.Fatalf("failed to get builtin function: %s", sf)
    24  		}
    25  	}
    26  
    27  	{
    28  		v, e := ge.Value("dirname")
    29  		if e != nil {
    30  			t.Fatalf("failed to get builtin function: %s", e.Error())
    31  		}
    32  		sf, ok := v.(FunctionValue)
    33  		if !ok {
    34  			t.Fatalf("failed to get builtin function: %s", sf)
    35  		}
    36  		if sf.value.name != "dirname" {
    37  			t.Fatalf("failed to get builtin function: %s", sf)
    38  		}
    39  	}
    40  
    41  	{
    42  		v, e := ge.Value("prefix")
    43  		if e != nil {
    44  			t.Fatalf("failed to get builtin function: %s", e.Error())
    45  		}
    46  		sf, ok := v.(FunctionValue)
    47  		if !ok {
    48  			t.Fatalf("failed to get builtin function: %s", sf)
    49  		}
    50  		if sf.value.name != "prefix" {
    51  			t.Fatalf("failed to get builtin function: %s", sf)
    52  		}
    53  	}
    54  
    55  	if e := ge.Assign("hoge", StringValue{"foo"}); e != nil {
    56  		t.Fatalf("Cannot assign value: %s", e)
    57  	}
    58  	if e := ge.Assign("foo", IntValue{123}); e != nil {
    59  		t.Fatalf("Cannot assign value: %s", e)
    60  	}
    61  
    62  	tempArray := [...]Value{IntValue{1}, IntValue{2}, IntValue{3}}
    63  	if e := ge.Assign("bar", ArrayValue{tempArray[:]}); e != nil {
    64  		t.Fatalf("Cannot assign value: %s", e)
    65  	}
    66  
    67  	if v, e := ge.Value("hoge"); e != nil || v != (StringValue{"foo"}) {
    68  		t.Fatalf("Invalid value: %s / error: %e", v, e)
    69  	}
    70  	if v, e := ge.Value("foo"); e != nil || v != (IntValue{123}) {
    71  		t.Fatalf("Invalid value: %s / error: %e", v, e)
    72  	}
    73  	//if v, e := ge.Value("bar"); e != nil || v != (ArrayValue{tempArray[:]}) {
    74  	//	t.Fatalf("Invalid value: %s / error: %e", v, e)
    75  	//}
    76  	if v, e := ge.Value("xxx"); e.Error() != "Unknown variable xxx" || v != nil {
    77  		t.Fatalf("Invalid value: %s / error: %e", v, e)
    78  	}
    79  
    80  	se := CreateSubEnvironment(ge)
    81  	if se.ParentEnvironment() != ge {
    82  		t.Fatalf("Invalid parent environment: %p", se.ParentEnvironment())
    83  	}
    84  	if e := se.Assign("hoge", StringValue{"x"}); e != nil {
    85  		t.Fatalf("Cannot assign value: %s", e)
    86  	}
    87  	if e := se.Assign("foo2", IntValue{456}); e != nil {
    88  		t.Fatalf("Cannot assign value: %s", e)
    89  	}
    90  
    91  	if v, e := se.Value("hoge"); e != nil || v != (StringValue{"x"}) {
    92  		t.Fatalf("Invalid value: %s / error: %e", v, e)
    93  	}
    94  	if v, e := se.Value("foo"); e != nil || v != (IntValue{123}) {
    95  		t.Fatalf("Invalid value: %s / error: %e", v, e)
    96  	}
    97  	if v, e := se.Value("foo2"); e != nil || v != (IntValue{456}) {
    98  		t.Fatalf("Invalid value: %s / error: %e", v, e)
    99  	}
   100  	//if v, e := se.Value("bar"); e != nil || v != (ArrayValue{[...]int{1, 2, 3}}) {
   101  	//	t.Fatalf("Invalid value: %s / error: %e", v, e)
   102  	//}
   103  	if v, e := se.Value("xxx"); e.Error() != "Unknown variable xxx" || v != nil {
   104  		t.Fatalf("Invalid value: %s / error: %e", v, e)
   105  	}
   106  
   107  	nm := make(map[string]Value)
   108  	nm["hoge"] = StringValue{"y"}
   109  	nm["123"] = IntValue{0}
   110  	se2 := CreateMixedEnvironment(se, nm)
   111  
   112  	if v, e := se2.Value("hoge"); e != nil || v != (StringValue{"y"}) {
   113  		t.Fatalf("Invalid value: %s / error: %e", v, e)
   114  	}
   115  	if v, e := se2.Value("foo"); e != nil || v != (IntValue{123}) {
   116  		t.Fatalf("Invalid value: %s / error: %e", v, e)
   117  	}
   118  	if v, e := se2.Value("foo2"); e != nil || v != (IntValue{456}) {
   119  		t.Fatalf("Invalid value: %s / error: %e", v, e)
   120  	}
   121  	//if v, e := se2.Value("bar"); e != nil || v != (Value{[...]int{1, 2, 3}}) {
   122  	//	t.Fatalf("Invalid value: %s / error: %e", v, e)
   123  	//}
   124  	if v, e := se2.Value("123"); e != nil || v != (IntValue{0}) {
   125  		t.Fatalf("Invalid value: %s / error: %e", v, e)
   126  	}
   127  	if v, e := se2.Value("xxx"); e.Error() != "Unknown variable xxx" || v != nil {
   128  		t.Fatalf("Invalid value: %s / error: %e", v, e)
   129  	}
   130  }