|
20 | 20 | #include "google/protobuf/message.h" |
21 | 21 | #include "google/protobuf/message_lite.h" |
22 | 22 | #include "absl/status/status.h" |
| 23 | +#include "eval/public/cel_options.h" |
23 | 24 | #include "eval/public/cel_value.h" |
24 | 25 | #include "eval/public/containers/container_backed_list_impl.h" |
25 | 26 | #include "eval/public/containers/container_backed_map_impl.h" |
@@ -671,5 +672,70 @@ TEST(ProtoMessageTypeAdapter, AdaptFromWellKnownTypeNotAMessageError) { |
671 | 672 | StatusIs(absl::StatusCode::kInternal)); |
672 | 673 | } |
673 | 674 |
|
| 675 | +TEST(ProtoMesssageTypeAdapter, TypeInfoDebug) { |
| 676 | + google::protobuf::Arena arena; |
| 677 | + ProtoMessageTypeAdapter adapter( |
| 678 | + google::protobuf::DescriptorPool::generated_pool()->FindMessageTypeByName( |
| 679 | + "google.api.expr.runtime.TestMessage"), |
| 680 | + google::protobuf::MessageFactory::generated_factory()); |
| 681 | + ProtoMemoryManager manager(&arena); |
| 682 | + |
| 683 | + TestMessage message; |
| 684 | + message.set_int64_value(42); |
| 685 | + EXPECT_THAT(adapter.DebugString(MessageWrapper(&message, &adapter)), |
| 686 | + HasSubstr(message.ShortDebugString())); |
| 687 | + |
| 688 | + EXPECT_THAT(adapter.DebugString(MessageWrapper()), |
| 689 | + HasSubstr("<unknown message>")); |
| 690 | +} |
| 691 | + |
| 692 | +TEST(ProtoMesssageTypeAdapter, TypeInfoName) { |
| 693 | + google::protobuf::Arena arena; |
| 694 | + ProtoMessageTypeAdapter adapter( |
| 695 | + google::protobuf::DescriptorPool::generated_pool()->FindMessageTypeByName( |
| 696 | + "google.api.expr.runtime.TestMessage"), |
| 697 | + google::protobuf::MessageFactory::generated_factory()); |
| 698 | + ProtoMemoryManager manager(&arena); |
| 699 | + |
| 700 | + EXPECT_EQ(adapter.GetTypename(MessageWrapper()), |
| 701 | + "google.api.expr.runtime.TestMessage"); |
| 702 | +} |
| 703 | + |
| 704 | +TEST(ProtoMesssageTypeAdapter, TypeInfoMutator) { |
| 705 | + google::protobuf::Arena arena; |
| 706 | + ProtoMessageTypeAdapter adapter( |
| 707 | + google::protobuf::DescriptorPool::generated_pool()->FindMessageTypeByName( |
| 708 | + "google.api.expr.runtime.TestMessage"), |
| 709 | + google::protobuf::MessageFactory::generated_factory()); |
| 710 | + ProtoMemoryManager manager(&arena); |
| 711 | + |
| 712 | + const LegacyTypeMutationApis* api = adapter.GetMutationApis(MessageWrapper()); |
| 713 | + ASSERT_NE(api, nullptr); |
| 714 | + |
| 715 | + ASSERT_OK_AND_ASSIGN(MessageWrapper::Builder builder, |
| 716 | + api->NewInstance(manager)); |
| 717 | + EXPECT_NE(dynamic_cast<TestMessage*>(builder.message_ptr()), nullptr); |
| 718 | +} |
| 719 | + |
| 720 | +TEST(ProtoMesssageTypeAdapter, TypeInfoAccesor) { |
| 721 | + google::protobuf::Arena arena; |
| 722 | + ProtoMessageTypeAdapter adapter( |
| 723 | + google::protobuf::DescriptorPool::generated_pool()->FindMessageTypeByName( |
| 724 | + "google.api.expr.runtime.TestMessage"), |
| 725 | + google::protobuf::MessageFactory::generated_factory()); |
| 726 | + ProtoMemoryManager manager(&arena); |
| 727 | + |
| 728 | + TestMessage message; |
| 729 | + message.set_int64_value(42); |
| 730 | + CelValue::MessageWrapper wrapped(&message, &adapter); |
| 731 | + |
| 732 | + const LegacyTypeAccessApis* api = adapter.GetAccessApis(MessageWrapper()); |
| 733 | + ASSERT_NE(api, nullptr); |
| 734 | + |
| 735 | + EXPECT_THAT(api->GetField("int64_value", wrapped, |
| 736 | + ProtoWrapperTypeOptions::kUnsetNull, manager), |
| 737 | + IsOkAndHolds(test::IsCelInt64(42))); |
| 738 | +} |
| 739 | + |
674 | 740 | } // namespace |
675 | 741 | } // namespace google::api::expr::runtime |
0 commit comments