parser_test.go: add test on the list data type
This commit is contained in:
parent
c36c88d0fd
commit
107484d13c
@ -154,7 +154,6 @@ func TestParser(t *testing.T) {
|
|||||||
/* 91 */ {`~ false || true`, true, nil},
|
/* 91 */ {`~ false || true`, true, nil},
|
||||||
/* 92 */ {`~ (false || true)`, false, nil},
|
/* 92 */ {`~ (false || true)`, false, nil},
|
||||||
}
|
}
|
||||||
|
|
||||||
succeeded := 0
|
succeeded := 0
|
||||||
failed := 0
|
failed := 0
|
||||||
|
|
||||||
@ -197,5 +196,98 @@ func TestParser(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
t.Log(fmt.Sprintf("test count: %d, succeeded count: %d, failed count: %d", len(inputs), succeeded, failed))
|
t.Log(fmt.Sprintf("test count: %d, succeeded count: %d, failed count: %d", len(inputs), succeeded, failed))
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestListParser(t *testing.T) {
|
||||||
|
type inputType struct {
|
||||||
|
source string
|
||||||
|
wantResult any
|
||||||
|
wantErr error
|
||||||
|
}
|
||||||
|
|
||||||
|
// ctx := newTestContext()
|
||||||
|
ctx := NewSimpleFuncStore()
|
||||||
|
ctx.SetValue("var1", int64(123))
|
||||||
|
ctx.SetValue("var2", "abc")
|
||||||
|
ctx.addFunc("add", addFunc)
|
||||||
|
|
||||||
|
// inputs1 := []inputType{
|
||||||
|
// {`add(1,2,3)`, int64(6), nil},
|
||||||
|
// }
|
||||||
|
|
||||||
|
inputs := []inputType{
|
||||||
|
/* 1 */ {`[]`, []any{}, nil},
|
||||||
|
/* 2 */ {`[1,2,3]`, []any{int64(1), int64(2), int64(3)}, nil},
|
||||||
|
/* 3 */ {`[1,2,"hello"]`, []any{int64(1), int64(2), "hello"}, nil},
|
||||||
|
/* 4 */ {`[1+2, not true, "hello"]`, []any{int64(3), false, "hello"}, nil},
|
||||||
|
}
|
||||||
|
|
||||||
|
succeeded := 0
|
||||||
|
failed := 0
|
||||||
|
|
||||||
|
parser := NewParser(ctx)
|
||||||
|
for i, input := range inputs {
|
||||||
|
var expr *ast
|
||||||
|
var gotResult any
|
||||||
|
var gotErr error
|
||||||
|
|
||||||
|
if input.wantErr == nil {
|
||||||
|
t.Log(fmt.Sprintf("[+]Test nr %2d -- %q", i+1, input.source))
|
||||||
|
} else {
|
||||||
|
t.Log(fmt.Sprintf("[-]Test nr %2d -- %q", i+1, input.source))
|
||||||
|
}
|
||||||
|
|
||||||
|
r := strings.NewReader(input.source)
|
||||||
|
scanner := NewScanner(r, DefaultTranslations())
|
||||||
|
|
||||||
|
good := true
|
||||||
|
if expr, gotErr = parser.parse(scanner); gotErr == nil {
|
||||||
|
gotResult, gotErr = expr.eval(ctx)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (gotResult == nil && input.wantResult != nil) || (gotResult != nil && input.wantResult == nil) {
|
||||||
|
t.Errorf("%d: %q -> result = %v [%T], want %v [%T]", i+1, input.source, gotResult, gotResult, input.wantResult, input.wantResult)
|
||||||
|
good = false
|
||||||
|
}
|
||||||
|
|
||||||
|
// if good {}
|
||||||
|
if gotList, okGot := gotResult.([]any); okGot {
|
||||||
|
if wantList, okWant := input.wantResult.([]any); okWant {
|
||||||
|
if (gotList == nil && wantList != nil) || (gotList != nil && wantList == nil) {
|
||||||
|
t.Errorf("%d: %q -> result = %v [%T], want %v [%T]", i+1, input.source, gotResult, gotResult, input.wantResult, input.wantResult)
|
||||||
|
good = false
|
||||||
|
} else {
|
||||||
|
equal := len(gotList) == len(wantList)
|
||||||
|
if equal {
|
||||||
|
for i, gotItem := range gotList {
|
||||||
|
wantItem := wantList[i]
|
||||||
|
equal = gotItem == wantItem
|
||||||
|
if !equal {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if !equal {
|
||||||
|
t.Errorf("%d: %q -> result = %v [%T], want %v [%T]", i+1, input.source, gotResult, gotResult, input.wantResult, input.wantResult)
|
||||||
|
good = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if gotErr != input.wantErr {
|
||||||
|
if input.wantErr == nil || gotErr == nil || (gotErr.Error() != input.wantErr.Error()) {
|
||||||
|
t.Errorf("%d: %q -> err = <%v>, want <%v>", i+1, input.source, gotErr, input.wantErr)
|
||||||
|
good = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if good {
|
||||||
|
succeeded++
|
||||||
|
} else {
|
||||||
|
failed++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
t.Log(fmt.Sprintf("test count: %d, succeeded count: %d, failed count: %d", len(inputs), succeeded, failed))
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user