github.com/andrewsun2898/u-root@v6.0.1-0.20200616011413-4b2895c1b815+incompatible/cmds/core/elvish/glob/parse_test.go (about)

     1  package glob
     2  
     3  import (
     4  	"reflect"
     5  	"testing"
     6  )
     7  
     8  var parseCases = []struct {
     9  	src  string
    10  	want []Segment
    11  }{
    12  	{``, []Segment{}},
    13  	{`foo`, []Segment{Literal{"foo"}}},
    14  	{`*foo*bar`, []Segment{
    15  		Wild{Star, false, nil}, Literal{"foo"},
    16  		Wild{Star, false, nil}, Literal{"bar"}}},
    17  	{`foo**bar`, []Segment{
    18  		Literal{"foo"}, Wild{StarStar, false, nil}, Literal{"bar"}}},
    19  	{`/usr/a**b/c`, []Segment{
    20  		Slash{}, Literal{"usr"}, Slash{}, Literal{"a"},
    21  		Wild{StarStar, false, nil}, Literal{"b"}, Slash{}, Literal{"c"}}},
    22  	{`??b`, []Segment{
    23  		Wild{Question, false, nil}, Wild{Question, false, nil}, Literal{"b"}}},
    24  	// Multiple slashes should be parsed as one.
    25  	{`//a//b`, []Segment{
    26  		Slash{}, Literal{"a"}, Slash{}, Literal{"b"}}},
    27  	// Escaping.
    28  	{`\*\?b`, []Segment{
    29  		Literal{"*?b"},
    30  	}},
    31  	{`abc\`, []Segment{
    32  		Literal{"abc"},
    33  	}},
    34  }
    35  
    36  func TestParse(t *testing.T) {
    37  	for _, tc := range parseCases {
    38  		p := Parse(tc.src)
    39  		if !reflect.DeepEqual(p.Segments, tc.want) {
    40  			t.Errorf("Parse(%q) => %v, want %v", tc.src, p, tc.want)
    41  		}
    42  	}
    43  }