| 62 | } |
| 63 | |
| 64 | void ExpectResult(const TestCase& test_case) { |
| 65 | auto parsed_expr = parser::Parse(test_case.expr); |
| 66 | ASSERT_OK(parsed_expr); |
| 67 | const Expr& expr_ast = parsed_expr->expr(); |
| 68 | const SourceInfo& source_info = parsed_expr->source_info(); |
| 69 | |
| 70 | std::unique_ptr<CelExpressionBuilder> builder = |
| 71 | CreateCelExpressionBuilder(test_case.options); |
| 72 | ASSERT_OK( |
| 73 | RegisterBuiltinFunctions(builder->GetRegistry(), test_case.options)); |
| 74 | ASSERT_OK_AND_ASSIGN(auto cel_expression, |
| 75 | builder->CreateExpression(&expr_ast, &source_info)); |
| 76 | |
| 77 | Activation activation; |
| 78 | for (auto var : test_case.vars) { |
| 79 | activation.InsertValue(var.first, var.second); |
| 80 | } |
| 81 | |
| 82 | google::protobuf::Arena arena; |
| 83 | ASSERT_OK_AND_ASSIGN(auto value, |
| 84 | cel_expression->Evaluate(activation, &arena)); |
| 85 | if (!test_case.result.ok()) { |
| 86 | EXPECT_TRUE(value.IsError()) << value.DebugString(); |
| 87 | EXPECT_THAT(*value.ErrorOrDie(), |
| 88 | StatusIs(test_case.result.status().code(), |
| 89 | HasSubstr(test_case.result.status().message()))); |
| 90 | return; |
| 91 | } |
| 92 | EXPECT_THAT(value, test::EqualsCelValue(*test_case.result)); |
| 93 | } |
| 94 | |
| 95 | using BuiltinFuncParamsTest = testing::TestWithParam<TestCase>; |
| 96 | TEST_P(BuiltinFuncParamsTest, StandardFunctions) { ExpectResult(GetParam()); } |
no test coverage detected