| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 | 
							- package glob
 
- import (
 
- 	"testing"
 
- )
 
- func TestLexGood(t *testing.T) {
 
- 	for id, test := range []struct {
 
- 		pattern string
 
- 		items   []item
 
- 	}{
 
- 		{
 
- 			pattern: "hello",
 
- 			items: []item{
 
- 				item{item_text, "hello"},
 
- 				item{item_eof, ""},
 
- 			},
 
- 		},
 
- 		{
 
- 			pattern: "hello,world",
 
- 			items: []item{
 
- 				item{item_text, "hello,world"},
 
- 				item{item_eof, ""},
 
- 			},
 
- 		},
 
- 		{
 
- 			pattern: "hello\\,world",
 
- 			items: []item{
 
- 				item{item_text, "hello,world"},
 
- 				item{item_eof, ""},
 
- 			},
 
- 		},
 
- 		{
 
- 			pattern: "hello\\{world",
 
- 			items: []item{
 
- 				item{item_text, "hello{world"},
 
- 				item{item_eof, ""},
 
- 			},
 
- 		},
 
- 		{
 
- 			pattern: "hello?",
 
- 			items: []item{
 
- 				item{item_text, "hello"},
 
- 				item{item_single, "?"},
 
- 				item{item_eof, ""},
 
- 			},
 
- 		},
 
- 		{
 
- 			pattern: "hellof*",
 
- 			items: []item{
 
- 				item{item_text, "hellof"},
 
- 				item{item_any, "*"},
 
- 				item{item_eof, ""},
 
- 			},
 
- 		},
 
- 		{
 
- 			pattern: "hello**",
 
- 			items: []item{
 
- 				item{item_text, "hello"},
 
- 				item{item_super, "**"},
 
- 				item{item_eof, ""},
 
- 			},
 
- 		},
 
- 		{
 
- 			pattern: "[日-語]",
 
- 			items: []item{
 
- 				item{item_range_open, "["},
 
- 				item{item_range_lo, "日"},
 
- 				item{item_range_between, "-"},
 
- 				item{item_range_hi, "語"},
 
- 				item{item_range_close, "]"},
 
- 				item{item_eof, ""},
 
- 			},
 
- 		},
 
- 		{
 
- 			pattern: "[!日-語]",
 
- 			items: []item{
 
- 				item{item_range_open, "["},
 
- 				item{item_not, "!"},
 
- 				item{item_range_lo, "日"},
 
- 				item{item_range_between, "-"},
 
- 				item{item_range_hi, "語"},
 
- 				item{item_range_close, "]"},
 
- 				item{item_eof, ""},
 
- 			},
 
- 		},
 
- 		{
 
- 			pattern: "[日本語]",
 
- 			items: []item{
 
- 				item{item_range_open, "["},
 
- 				item{item_text, "日本語"},
 
- 				item{item_range_close, "]"},
 
- 				item{item_eof, ""},
 
- 			},
 
- 		},
 
- 		{
 
- 			pattern: "[!日本語]",
 
- 			items: []item{
 
- 				item{item_range_open, "["},
 
- 				item{item_not, "!"},
 
- 				item{item_text, "日本語"},
 
- 				item{item_range_close, "]"},
 
- 				item{item_eof, ""},
 
- 			},
 
- 		},
 
- 		{
 
- 			pattern: "{a,b}",
 
- 			items: []item{
 
- 				item{item_terms_open, "{"},
 
- 				item{item_text, "a"},
 
- 				item{item_separator, ","},
 
- 				item{item_text, "b"},
 
- 				item{item_terms_close, "}"},
 
- 				item{item_eof, ""},
 
- 			},
 
- 		},
 
- 		{
 
- 			pattern: "{[!日-語],*,?,{a,b,\\c}}",
 
- 			items: []item{
 
- 				item{item_terms_open, "{"},
 
- 				item{item_range_open, "["},
 
- 				item{item_not, "!"},
 
- 				item{item_range_lo, "日"},
 
- 				item{item_range_between, "-"},
 
- 				item{item_range_hi, "語"},
 
- 				item{item_range_close, "]"},
 
- 				item{item_separator, ","},
 
- 				item{item_any, "*"},
 
- 				item{item_separator, ","},
 
- 				item{item_single, "?"},
 
- 				item{item_separator, ","},
 
- 				item{item_terms_open, "{"},
 
- 				item{item_text, "a"},
 
- 				item{item_separator, ","},
 
- 				item{item_text, "b"},
 
- 				item{item_separator, ","},
 
- 				item{item_text, "c"},
 
- 				item{item_terms_close, "}"},
 
- 				item{item_terms_close, "}"},
 
- 				item{item_eof, ""},
 
- 			},
 
- 		},
 
- 	} {
 
- 		lexer := newLexer(test.pattern)
 
- 		for i, exp := range test.items {
 
- 			act := lexer.nextItem()
 
- 			if act.t != exp.t {
 
- 				t.Errorf("#%d %q: wrong %d-th item type: exp: %q; act: %q\n\t(%s vs %s)", id, test.pattern, i, exp.t, act.t, exp, act)
 
- 			}
 
- 			if act.s != exp.s {
 
- 				t.Errorf("#%d %q: wrong %d-th item contents: exp: %q; act: %q\n\t(%s vs %s)", id, test.pattern, i, exp.s, act.s, exp, act)
 
- 			}
 
- 		}
 
- 	}
 
- }
 
 
  |