diff options
Diffstat (limited to 'internal/rosa/azalea/evaluate_test.go')
| -rw-r--r-- | internal/rosa/azalea/evaluate_test.go | 74 |
1 files changed, 69 insertions, 5 deletions
diff --git a/internal/rosa/azalea/evaluate_test.go b/internal/rosa/azalea/evaluate_test.go index 4a6c2f56..049fcb52 100644 --- a/internal/rosa/azalea/evaluate_test.go +++ b/internal/rosa/azalea/evaluate_test.go @@ -100,15 +100,79 @@ func TestEvaluate(t *testing.T) { Err: UndefinedError("f"), }}, - {"error wrap deep", `f { v = nil; }`, makeStackCheck(func( + {"error wrap deep", `f { v = nonexistent; }`, makeStackCheck(func( FArgs, ) (any, error) { panic("unreachable") }), "", EvaluationError{ - Expr: Ident("nil"), - Err: UndefinedError("nil"), + Expr: Ident("nonexistent"), + Err: UndefinedError("nonexistent"), }}, + {"nil", `f { v = nil; }`, checkArgs(FArgs{ + {K: unique.Make(Ident("v")), V: Nil{}}, + }), "\xfd", nil}, + + {"apply nil string", `f { v = nil; }`, makeStackCheck(func( + args FArgs, + ) (v any, err error) { + var s string + err = args.Apply(map[unique.Handle[Ident]]any{ + unique.Make(Ident("v")): &s, + }) + v = s + return + }), "", EvaluationError{ + Expr: Func{ + Ident: Ident("f"), + Args: []Arg{ + {K: []Ident{"v"}, V: Val{Ident("nil")}}, + }, + }, + Err: NilError{Type: reflect.TypeFor[string]()}, + }}, + + {"apply nil AString", `f { v = nil; }`, makeStackCheck(func( + args FArgs, + ) (v any, err error) { + s := AString{} + err = args.Apply(map[unique.Handle[Ident]]any{ + unique.Make(Ident("v")): &s, + }) + v = s.V + if !s.Nil { + err = fmt.Errorf("got non-nil string %q", s.V) + } + return + }), "", nil}, + + {"apply AString", `f { v = "\xfd"; }`, makeStackCheck(func( + args FArgs, + ) (v any, err error) { + s := AString{} + err = args.Apply(map[unique.Handle[Ident]]any{ + unique.Make(Ident("v")): &s, + }) + v = s.V + if s.Nil { + err = fmt.Errorf("unexpected nil %q", s.V) + } + return + }), "\xfd", nil}, + + {"apply nil", `f { v = nil; }`, makeStackCheck(func( + args FArgs, + ) (v any, err error) { + s := make([]struct{}, 9) + err = args.Apply(map[unique.Handle[Ident]]any{ + unique.Make(Ident("v")): &s, + }) + if s != nil { + err = fmt.Errorf("got non-nil value %#v", s) + } + return + }), "", nil}, + {"common inputs", `package name { inputs, v = []; }`, nil, "", EvaluationError{ Expr: Func{ Ident: Ident("name"), @@ -214,8 +278,8 @@ func TestEvaluate(t *testing.T) { } var errEquals bool - if _, ok := errors.AsType[TypeError](err); ok { - errEquals = errors.Is(err, tc.err) + if e, ok := errors.AsType[TypeError](err); ok { + errEquals = e.Is(tc.err) } else { errEquals = reflect.DeepEqual(err, tc.err) } |
