| 109 | class OptionalTest : public testing::TestWithParam<TestCase> {}; |
| 110 | |
| 111 | TEST_P(OptionalTest, Runner) { |
| 112 | ASSERT_OK_AND_ASSIGN( |
| 113 | std::unique_ptr<TypeCheckerBuilder> builder, |
| 114 | CreateTypeCheckerBuilder(GetSharedTestingDescriptorPool())); |
| 115 | const TestCase& test_case = GetParam(); |
| 116 | ASSERT_THAT(builder->AddLibrary(StandardCheckerLibrary()), IsOk()); |
| 117 | ASSERT_THAT(builder->AddLibrary(OptionalCheckerLibrary()), IsOk()); |
| 118 | ASSERT_OK_AND_ASSIGN(std::unique_ptr<TypeChecker> checker, |
| 119 | std::move(*builder).Build()); |
| 120 | |
| 121 | ASSERT_OK_AND_ASSIGN(auto ast, MakeTestParsedAst(test_case.expr)); |
| 122 | |
| 123 | ASSERT_OK_AND_ASSIGN(auto result, checker->Check(std::move(ast))); |
| 124 | |
| 125 | if (!test_case.error_substring.empty()) { |
| 126 | EXPECT_THAT(result.GetIssues(), |
| 127 | Contains(Property(&TypeCheckIssue::message, |
| 128 | HasSubstr(test_case.error_substring)))) |
| 129 | << absl::StrJoin(result.GetIssues(), "\n", |
| 130 | [](std::string* out, const auto& i) { |
| 131 | absl::StrAppend(out, i.message()); |
| 132 | }); |
| 133 | return; |
| 134 | } |
| 135 | |
| 136 | EXPECT_THAT(result.GetIssues(), IsEmpty()) |
| 137 | << "for expression: " << test_case.expr; |
| 138 | ASSERT_OK_AND_ASSIGN(auto checked_ast, result.ReleaseAst()); |
| 139 | |
| 140 | int64_t root_id = checked_ast->root_expr().id(); |
| 141 | |
| 142 | EXPECT_THAT(checked_ast->GetTypeOrDyn(root_id), test_case.result_type_matcher) |
| 143 | << "for expression: " << test_case.expr; |
| 144 | } |
| 145 | |
| 146 | INSTANTIATE_TEST_SUITE_P( |
| 147 | OptionalTests, OptionalTest, |
nothing calls this directly
no test coverage detected