src.elv.sh@v0.21.0-dev.0.20240515223629-06979efb9a2a/pkg/eval/value_test.go (about) 1 package eval 2 3 import ( 4 "reflect" 5 "testing" 6 7 "src.elv.sh/pkg/eval/vals" 8 "src.elv.sh/pkg/glob" 9 ) 10 11 var reprTests = []struct { 12 v any 13 want string 14 }{ 15 {"233", "233"}, 16 {"a\nb", `"a\nb"`}, 17 {"foo bar", "'foo bar'"}, 18 {"a\x00b", `"a\x00b"`}, 19 {true, "$true"}, 20 {false, "$false"}, 21 {vals.EmptyList, "[]"}, 22 {vals.MakeList("bash", false), "[bash $false]"}, 23 {vals.EmptyMap, "[&]"}, 24 {vals.MakeMap(&exception{nil, nil}, "elvish"), "[&$ok=elvish]"}, 25 // TODO: test maps of more elements 26 } 27 28 func TestRepr(t *testing.T) { 29 for _, test := range reprTests { 30 repr := vals.ReprPlain(test.v) 31 if repr != test.want { 32 t.Errorf("Repr = %s, want %s", repr, test.want) 33 } 34 } 35 } 36 37 var stringToSegmentsTests = []struct { 38 s string 39 want []glob.Segment 40 }{ 41 {"", []glob.Segment{}}, 42 {"a", []glob.Segment{glob.Literal{Data: "a"}}}, 43 {"/a", []glob.Segment{glob.Slash{}, glob.Literal{Data: "a"}}}, 44 {"a/", []glob.Segment{glob.Literal{Data: "a"}, glob.Slash{}}}, 45 {"/a/", []glob.Segment{glob.Slash{}, glob.Literal{Data: "a"}, glob.Slash{}}}, 46 {"a//b", []glob.Segment{glob.Literal{Data: "a"}, glob.Slash{}, glob.Literal{Data: "b"}}}, 47 } 48 49 func TestStringToSegments(t *testing.T) { 50 for _, tc := range stringToSegmentsTests { 51 segs := stringToSegments(tc.s) 52 if !reflect.DeepEqual(segs, tc.want) { 53 t.Errorf("stringToSegments(%q) => %v, want %v", tc.s, segs, tc.want) 54 } 55 } 56 }