(t *testing.T, testOutput *test.Output)
| 943 | } |
| 944 | |
| 945 | func (tr *TestRunner) createResultMatcher(t *testing.T, testOutput *test.Output) (func(ref.Val, error) TestResult, error) { |
| 946 | t.Helper() |
| 947 | e, err := tr.CreateEnv() |
| 948 | if err != nil { |
| 949 | return nil, err |
| 950 | } |
| 951 | successResult := TestResult{Success: true} |
| 952 | if testOutput.Value != nil { |
| 953 | want := e.CELTypeAdapter().NativeToValue(testOutput.Value) |
| 954 | return func(out ref.Val, err error) TestResult { |
| 955 | if err != nil { |
| 956 | return TestResult{Success: false, Wanted: fmt.Sprintf("simple value %v", want), Error: err} |
| 957 | } |
| 958 | if out.Equal(want) == types.True { |
| 959 | return successResult |
| 960 | } |
| 961 | if optOut, ok := out.(*types.Optional); ok { |
| 962 | if optOut.HasValue() && optOut.GetValue().Equal(want) == types.True { |
| 963 | return successResult |
| 964 | } |
| 965 | } |
| 966 | return TestResult{Success: false, Wanted: fmt.Sprintf("simple value %v", want), Error: fmt.Errorf("policy eval got %v", out)} |
| 967 | |
| 968 | }, nil |
| 969 | } |
| 970 | if testOutput.Expr != "" { |
| 971 | want, err := tr.eval(testOutput.Expr) |
| 972 | if err != nil { |
| 973 | return nil, fmt.Errorf("eval(%q) failed: %w", testOutput.Expr, err) |
| 974 | } |
| 975 | return func(out ref.Val, err error) TestResult { |
| 976 | if err != nil { |
| 977 | return TestResult{Success: false, Wanted: fmt.Sprintf("simple value %v", want), Error: err} |
| 978 | } |
| 979 | if out.Equal(want) == types.True { |
| 980 | return successResult |
| 981 | } |
| 982 | if optOut, ok := out.(*types.Optional); ok { |
| 983 | if optOut.HasValue() && optOut.GetValue().Equal(want) == types.True { |
| 984 | return successResult |
| 985 | } |
| 986 | } |
| 987 | return TestResult{Success: false, Wanted: fmt.Sprintf("simple value %v", want), Error: fmt.Errorf("policy eval got %v", out)} |
| 988 | |
| 989 | }, nil |
| 990 | } |
| 991 | if testOutput.ErrorSet != nil { |
| 992 | return func(out ref.Val, err error) TestResult { |
| 993 | failureResult := TestResult{Success: false, Wanted: fmt.Sprintf("error %v", testOutput.ErrorSet)} |
| 994 | if err == nil { |
| 995 | return failureResult |
| 996 | } |
| 997 | for _, want := range testOutput.ErrorSet { |
| 998 | if strings.Contains(err.Error(), want) { |
| 999 | return successResult |
| 1000 | } |
| 1001 | } |
| 1002 | return failureResult |
no test coverage detected