Files
weave-scope/render/dsl/lexer_internal_test.go
2015-09-01 09:25:03 +02:00

77 lines
1.5 KiB
Go

package dsl
import (
"errors"
"testing"
)
func TestLexer(t *testing.T) {
for _, test := range []struct {
input string
want []item
err error
}{
{
"",
[]item{},
errors.New("bad selector"),
},
{
"foo",
[]item{},
errors.New("bad selector"),
},
{
"ALL",
[]item{{itemAll, keywordAll}},
errors.New("bad transformer"),
},
{
"NOT ALL",
[]item{{itemNot, keywordNot}, {itemAll, keywordAll}},
errors.New("bad transformer"),
},
{
"ALL HIGHLIGHT",
[]item{{itemAll, keywordAll}, {itemHighlight, keywordHighlight}},
nil,
},
{
"WITH {{pid}} REMOVE",
[]item{{itemWith, keywordWith}, {itemKeyValue, "pid"}, {itemRemove, keywordRemove}},
nil,
},
} {
_, c := lex(test.input)
for item := range c {
if item.itemType == itemError {
if test.err == nil {
t.Errorf("%q: unexpected error: %v", test.input, item.literal)
break
}
if want, have := test.err.Error(), item.literal; want != have {
t.Errorf("%q: want error %q, have %q", test.input, want, have)
break
}
t.Logf("%q: got expected error %v", test.input, test.err)
break
}
if len(test.want) <= 0 {
t.Errorf("%q: got too many items", test.input)
break
}
want := test.want[0]
test.want = test.want[1:]
if want, have := want.itemType, item.itemType; want != have {
t.Errorf("%q: unexpected item: want %v, have %v", test.input, want, have)
break
}
t.Logf("%s: lex %s (%q) OK", test.input, item.itemType, item.literal)
}
}
}