| 359 | |
| 360 | template <typename I, bool Flattened = false> |
| 361 | void TestGet() const { |
| 362 | using O = OutputType<I>; |
| 363 | const auto& input = case_->InputAs<I>(); |
| 364 | ASSERT_OK_AND_ASSIGN(auto v0, DoGetOne<Flattened>(*input, FieldRef("a"))); |
| 365 | ASSERT_OK_AND_ASSIGN(auto v1, DoGetOne<Flattened>(*input, FieldRef("b"))); |
| 366 | ASSERT_OK_AND_ASSIGN(auto v1_0, DoGetOne<Flattened>(*input, FieldRef("b", "a"))); |
| 367 | ASSERT_OK_AND_ASSIGN(auto v1_1, DoGetOne<Flattened>(*input, FieldRef("b", "b"))); |
| 368 | ASSERT_OK_AND_ASSIGN(auto v1_1_0, DoGetOne<Flattened>(*input, FieldRef("b", "b", 0))); |
| 369 | ASSERT_OK_AND_ASSIGN(auto v1_1_1, DoGetOne<Flattened>(*input, FieldRef("b", "b", 1))); |
| 370 | |
| 371 | AssertOutputsEqual<I>(case_->v0.OutputAs<O>(), v0); |
| 372 | AssertOutputsEqual<I>(case_->v1.OutputAs<O>(), v1); |
| 373 | if constexpr (Flattened) { |
| 374 | AssertOutputsEqual<I>(case_->v1_0_flat.OutputAs<O>(), v1_0); |
| 375 | AssertOutputsEqual<I>(case_->v1_1_flat.OutputAs<O>(), v1_1); |
| 376 | AssertOutputsEqual<I>(case_->v1_1_0_flat.OutputAs<O>(), v1_1_0); |
| 377 | AssertOutputsEqual<I>(case_->v1_1_1_flat.OutputAs<O>(), v1_1_1); |
| 378 | } else { |
| 379 | AssertOutputsEqual<I>(case_->v1_0.OutputAs<O>(), v1_0); |
| 380 | AssertOutputsEqual<I>(case_->v1_1.OutputAs<O>(), v1_1); |
| 381 | AssertOutputsEqual<I>(case_->v1_1_0.OutputAs<O>(), v1_1_0); |
| 382 | AssertOutputsEqual<I>(case_->v1_1_1.OutputAs<O>(), v1_1_1); |
| 383 | } |
| 384 | |
| 385 | // Cases where multiple matches are found |
| 386 | EXPECT_OK_AND_ASSIGN(auto multiple_matches, |
| 387 | DoGetAll<Flattened>(*input, FieldRef("b", "b", "a"))); |
| 388 | EXPECT_EQ(multiple_matches.size(), 2); |
| 389 | EXPECT_RAISES_WITH_MESSAGE_THAT( |
| 390 | Invalid, ::testing::HasSubstr("Multiple matches for "), |
| 391 | (DoGetOne<Flattened>(*input, FieldRef("b", "b", "a")))); |
| 392 | EXPECT_RAISES_WITH_MESSAGE_THAT( |
| 393 | Invalid, ::testing::HasSubstr("Multiple matches for "), |
| 394 | (DoGetOneOrNone<Flattened>(*input, FieldRef("b", "b", "a")))); |
| 395 | |
| 396 | // Cases where no match is found |
| 397 | EXPECT_OK_AND_ASSIGN(auto no_matches, |
| 398 | DoGetAll<Flattened>(*input, FieldRef("b", "b", "b"))); |
| 399 | EXPECT_EQ(no_matches.size(), 0); |
| 400 | EXPECT_RAISES_WITH_MESSAGE_THAT( |
| 401 | Invalid, ::testing::HasSubstr("No match for "), |
| 402 | (DoGetOne<Flattened>(*input, FieldRef("b", "b", "b")))); |
| 403 | ASSERT_OK_AND_EQ(nullptr, |
| 404 | (DoGetOneOrNone<Flattened>(*input, FieldRef("b", "b", "b")))); |
| 405 | } |
| 406 | }; |
| 407 | |
| 408 | // ---------------------------------------------------------------------- |
nothing calls this directly
no test coverage detected