github.com/hoop33/elvish@v0.0.0-20160801152013-6d25485beab4/eval/value_test.go (about) 1 package eval 2 3 import ( 4 "errors" 5 "reflect" 6 "testing" 7 8 "github.com/elves/elvish/glob" 9 ) 10 11 var reprTests = []struct { 12 v Value 13 want string 14 }{ 15 {String("233"), "233"}, 16 {String("a\nb"), `"a\nb"`}, 17 {String("foo bar"), "'foo bar'"}, 18 {String("a\x00b"), `"a\x00b"`}, 19 {Bool(true), "$true"}, 20 {Bool(false), "$false"}, 21 {Error{nil}, "$ok"}, 22 {Error{errors.New("foo bar")}, "?(error 'foo bar')"}, 23 {Error{MultiError{[]Error{{nil}, {errors.New("lorem")}}}}, 24 "?(multi-error $ok ?(error lorem))"}, 25 {Error{Return}, "?(return)"}, 26 {List{&[]Value{}}, "[]"}, 27 {List{&[]Value{String("bash"), Bool(false)}}, "[bash $false]"}, 28 {Map{&map[Value]Value{}}, "[&]"}, 29 {Map{&map[Value]Value{Error{nil}: String("elvish")}}, "[&$ok=elvish]"}, 30 // TODO: test maps of more elements 31 } 32 33 func TestRepr(t *testing.T) { 34 for _, test := range reprTests { 35 repr := test.v.Repr(NoPretty) 36 if repr != test.want { 37 t.Errorf("Repr = %s, want %s", repr, test.want) 38 } 39 } 40 } 41 42 var stringToSegmentsTests = []struct { 43 s string 44 want []glob.Segment 45 }{ 46 {"", []glob.Segment{}}, 47 {"a", []glob.Segment{{glob.Literal, "a"}}}, 48 {"/a", []glob.Segment{{glob.Slash, ""}, {glob.Literal, "a"}}}, 49 {"a/", []glob.Segment{{glob.Literal, "a"}, {glob.Slash, ""}}}, 50 {"/a/", []glob.Segment{{glob.Slash, ""}, {glob.Literal, "a"}, {glob.Slash, ""}}}, 51 {"a//b", []glob.Segment{{glob.Literal, "a"}, {glob.Slash, ""}, {glob.Literal, "b"}}}, 52 } 53 54 func TestStringToSegments(t *testing.T) { 55 for _, tc := range stringToSegmentsTests { 56 segs := stringToSegments(tc.s) 57 if !reflect.DeepEqual(segs, tc.want) { 58 t.Errorf("stringToSegments(%q) => %v, want %v", tc.s, segs, tc.want) 59 } 60 } 61 }