| 74 | } |
| 75 | |
| 76 | TEST(OptionalTest, OptSelectDoesNotAnnotateFieldType) { |
| 77 | ASSERT_OK_AND_ASSIGN( |
| 78 | std::unique_ptr<TypeCheckerBuilder> builder, |
| 79 | CreateTypeCheckerBuilder(GetSharedTestingDescriptorPool())); |
| 80 | ASSERT_THAT(builder->AddLibrary(StandardCheckerLibrary()), IsOk()); |
| 81 | ASSERT_THAT(builder->AddLibrary(OptionalCheckerLibrary()), IsOk()); |
| 82 | builder->set_container("cel.expr.conformance.proto3"); |
| 83 | ASSERT_OK_AND_ASSIGN(std::unique_ptr<TypeChecker> checker, |
| 84 | std::move(*builder).Build()); |
| 85 | |
| 86 | ASSERT_OK_AND_ASSIGN(auto ast, |
| 87 | MakeTestParsedAst("TestAllTypes{}.?single_int64")); |
| 88 | |
| 89 | ASSERT_OK_AND_ASSIGN(auto result, checker->Check(std::move(ast))); |
| 90 | |
| 91 | EXPECT_THAT(result.GetIssues(), IsEmpty()); |
| 92 | ASSERT_OK_AND_ASSIGN(auto checked_ast, result.ReleaseAst()); |
| 93 | |
| 94 | ASSERT_THAT(checked_ast->root_expr().call_expr().args(), SizeIs(2)); |
| 95 | int64_t field_id = checked_ast->root_expr().call_expr().args()[1].id(); |
| 96 | EXPECT_NE(field_id, 0); |
| 97 | |
| 98 | EXPECT_THAT(checked_ast->type_map(), Not(Contains(Key(field_id)))); |
| 99 | EXPECT_THAT(checked_ast->GetTypeOrDyn(checked_ast->root_expr().id()), |
| 100 | IsOptionalType(TypeSpec(PrimitiveType::kInt64))); |
| 101 | } |
| 102 | |
| 103 | struct TestCase { |
| 104 | std::string expr; |
nothing calls this directly
no test coverage detected