| 384 | } |
| 385 | |
| 386 | TEST(StringViewArray, Validate) { |
| 387 | // Since this is a test of validation, we need to be able to construct invalid arrays. |
| 388 | auto buffer_s = Buffer::FromString("supercalifragilistic(sp?)"); |
| 389 | auto buffer_y = Buffer::FromString("yyyyyyyyyyyyyyyyyyyyyyyyy"); |
| 390 | |
| 391 | // empty array is valid |
| 392 | EXPECT_THAT(MakeBinaryViewArray({}, {}), Ok()); |
| 393 | |
| 394 | // empty array with some data buffers is valid |
| 395 | EXPECT_THAT(MakeBinaryViewArray({buffer_s, buffer_y}, {}), Ok()); |
| 396 | |
| 397 | // inline views need not have a corresponding buffer |
| 398 | EXPECT_THAT(MakeBinaryViewArray({}, |
| 399 | { |
| 400 | util::ToInlineBinaryView("hello"), |
| 401 | util::ToInlineBinaryView("world"), |
| 402 | util::ToInlineBinaryView("inline me"), |
| 403 | }), |
| 404 | Ok()); |
| 405 | |
| 406 | // Variadic buffer slots, when present, must contain real buffers. |
| 407 | EXPECT_THAT(MakeBinaryViewArray({nullptr}, |
| 408 | { |
| 409 | util::ToInlineBinaryView("hello"), |
| 410 | util::ToInlineBinaryView("world"), |
| 411 | }), |
| 412 | Raises(StatusCode::Invalid, |
| 413 | ::testing::HasSubstr("null variadic buffer at buffer index #2 " |
| 414 | "(variadic buffer index #0)"))); |
| 415 | |
| 416 | // non-inline views are expected to reference only buffers managed by the array |
| 417 | EXPECT_THAT( |
| 418 | MakeBinaryViewArray( |
| 419 | {buffer_s, buffer_y}, |
| 420 | {util::ToBinaryView("supe", static_cast<int32_t>(buffer_s->size()), 0, 0), |
| 421 | util::ToBinaryView("yyyy", static_cast<int32_t>(buffer_y->size()), 1, 0)}), |
| 422 | Ok()); |
| 423 | |
| 424 | // views may not reference data buffers not present in the array |
| 425 | EXPECT_THAT( |
| 426 | MakeBinaryViewArray( |
| 427 | {}, {util::ToBinaryView("supe", static_cast<int32_t>(buffer_s->size()), 0, 0)}), |
| 428 | Raises(StatusCode::IndexError)); |
| 429 | // ... or ranges which overflow the referenced data buffer |
| 430 | EXPECT_THAT( |
| 431 | MakeBinaryViewArray( |
| 432 | {buffer_s}, {util::ToBinaryView( |
| 433 | "supe", static_cast<int32_t>(buffer_s->size() + 50), 0, 0)}), |
| 434 | Raises(StatusCode::IndexError)); |
| 435 | |
| 436 | // Additionally, the prefixes of non-inline views must match the data buffer |
| 437 | EXPECT_THAT( |
| 438 | MakeBinaryViewArray( |
| 439 | {buffer_s, buffer_y}, |
| 440 | {util::ToBinaryView("SUPE", static_cast<int32_t>(buffer_s->size()), 0, 0), |
| 441 | util::ToBinaryView("yyyy", static_cast<int32_t>(buffer_y->size()), 1, 0)}), |
| 442 | Raises(StatusCode::Invalid)); |
| 443 |
nothing calls this directly
no test coverage detected