mirror of
https://github.com/weaveworks/scope.git
synced 2026-07-16 03:49:52 +00:00
77 lines
1.5 KiB
Go
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)
|
|
}
|
|
}
|
|
}
|