aboutsummaryrefslogtreecommitdiffhomepage
path: root/internal/rosa/azalea/evaluate_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/rosa/azalea/evaluate_test.go')
-rw-r--r--internal/rosa/azalea/evaluate_test.go74
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)
}