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  }