| 963 | } |
| 964 | |
| 965 | func testParse(t testing.TB, env *Env, expr string, want any) { |
| 966 | t.Helper() |
| 967 | ast, iss := env.Parse(expr) |
| 968 | if iss.Err() != nil { |
| 969 | t.Fatalf("env.Parse(%s) failed: %v", expr, iss.Err()) |
| 970 | } |
| 971 | prg, err := env.Program(ast) |
| 972 | if err != nil { |
| 973 | t.Fatalf("env.Program() failed: %v", err) |
| 974 | } |
| 975 | out, _, err := prg.Eval(map[string]any{"err": types.NewErr("error argument"), "unk": types.NewUnknown(42, nil)}) |
| 976 | switch want := want.(type) { |
| 977 | case *types.Unknown: |
| 978 | if !want.Contains(out.(*types.Unknown)) { |
| 979 | t.Errorf("prg.Eval() got %v, wanted %v", out, want) |
| 980 | } |
| 981 | case ref.Val: |
| 982 | if want.Equal(out) != types.True { |
| 983 | t.Errorf("prg.Eval() got %v, wanted %v", out, want) |
| 984 | } |
| 985 | case error: |
| 986 | if err == nil || want.Error() != err.Error() { |
| 987 | t.Errorf("prg.Eval() got error '%v', wanted '%v'", err, want) |
| 988 | } |
| 989 | } |
| 990 | } |
| 991 | |
| 992 | func testCompile(t testing.TB, env *Env, expr string, want any) { |
| 993 | t.Helper() |