|
28 | 28 | #include "internal/testing.h" |
29 | 29 | #include "internal/testing_descriptor_pool.h" |
30 | 30 | #include "internal/testing_message_factory.h" |
| 31 | +#include "cel/expr/conformance/proto2/test_all_types.pb.h" |
31 | 32 | #include "cel/expr/conformance/proto3/test_all_types.pb.h" |
32 | 33 | #include "google/protobuf/arena.h" |
33 | 34 | #include "google/protobuf/descriptor.h" |
| 35 | +#include "google/protobuf/dynamic_message.h" |
34 | 36 | #include "google/protobuf/generated_enum_reflection.h" |
35 | 37 |
|
36 | 38 | namespace cel { |
@@ -973,6 +975,43 @@ TEST(Value, NumericHeterogeneousEquality) { |
973 | 975 | EXPECT_NE(DoubleValue(1), UintValue(2)); |
974 | 976 | } |
975 | 977 |
|
| 978 | +TEST(Value, WrapDynamicExtensionMessageField) { |
| 979 | + google::protobuf::DescriptorPool pool(google::protobuf::DescriptorPool::generated_pool()); |
| 980 | + google::protobuf::FileDescriptorProto file_proto; |
| 981 | + file_proto.set_name("dynamic_extension.proto"); |
| 982 | + file_proto.set_package("cel.expr.conformance.proto2"); |
| 983 | + file_proto.add_dependency( |
| 984 | + cel::expr::conformance::proto2::TestAllTypes::descriptor() |
| 985 | + ->file() |
| 986 | + ->name()); |
| 987 | + |
| 988 | + auto* msg_type = file_proto.add_message_type(); |
| 989 | + msg_type->set_name("DynamicExtensionMessage"); |
| 990 | + |
| 991 | + auto* ext = file_proto.add_extension(); |
| 992 | + ext->set_name("dynamic_ext"); |
| 993 | + ext->set_number(1000); |
| 994 | + ext->set_label(google::protobuf::FieldDescriptorProto::LABEL_OPTIONAL); |
| 995 | + ext->set_type(google::protobuf::FieldDescriptorProto::TYPE_MESSAGE); |
| 996 | + ext->set_type_name(".cel.expr.conformance.proto2.DynamicExtensionMessage"); |
| 997 | + ext->set_extendee( |
| 998 | + cel::expr::conformance::proto2::TestAllTypes::descriptor()->full_name()); |
| 999 | + |
| 1000 | + const google::protobuf::FileDescriptor* file_desc = pool.BuildFile(file_proto); |
| 1001 | + ASSERT_NE(file_desc, nullptr); |
| 1002 | + |
| 1003 | + const google::protobuf::FieldDescriptor* ext_desc = |
| 1004 | + pool.FindExtensionByName("cel.expr.conformance.proto2.dynamic_ext"); |
| 1005 | + ASSERT_NE(ext_desc, nullptr); |
| 1006 | + |
| 1007 | + google::protobuf::DynamicMessageFactory dynamic_factory(&pool); |
| 1008 | + google::protobuf::Arena arena; |
| 1009 | + cel::expr::conformance::proto2::TestAllTypes test_msg; |
| 1010 | + Value val = |
| 1011 | + Value::WrapField(&test_msg, ext_desc, &pool, &dynamic_factory, &arena); |
| 1012 | + EXPECT_TRUE(val.IsMessage()); |
| 1013 | +} |
| 1014 | + |
976 | 1015 | using ValueIteratorTest = common_internal::ValueTest<>; |
977 | 1016 |
|
978 | 1017 | TEST_F(ValueIteratorTest, Empty) { |
|
0 commit comments