Skip to content

Commit e2500a2

Browse files
seirlcopybara-github
authored andcommitted
Add unit test for cel::Value::WrapField with dynamic message extension fields.
Adds TEST(Value, WrapDynamicExtensionMessageField) to value_test.cc to verify that wrapping a dynamic extension message field on a compiled C++ GeneratedMessage using cel::Value::WrapField succeeds when message_factory is passed to GetMessage. PiperOrigin-RevId: 958314339
1 parent 4f1003d commit e2500a2

2 files changed

Lines changed: 40 additions & 0 deletions

File tree

common/BUILD

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -885,6 +885,7 @@ cc_test(
885885
"@com_google_absl//absl/strings:string_view",
886886
"@com_google_absl//absl/time",
887887
"@com_google_absl//absl/types:optional",
888+
"@com_google_cel_spec//proto/cel/expr/conformance/proto2:test_all_types_cc_proto",
888889
"@com_google_cel_spec//proto/cel/expr/conformance/proto3:test_all_types_cc_proto",
889890
"@com_google_protobuf//:protobuf",
890891
"@com_google_protobuf//:struct_cc_proto",

common/value_test.cc

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,11 @@
2828
#include "internal/testing.h"
2929
#include "internal/testing_descriptor_pool.h"
3030
#include "internal/testing_message_factory.h"
31+
#include "cel/expr/conformance/proto2/test_all_types.pb.h"
3132
#include "cel/expr/conformance/proto3/test_all_types.pb.h"
3233
#include "google/protobuf/arena.h"
3334
#include "google/protobuf/descriptor.h"
35+
#include "google/protobuf/dynamic_message.h"
3436
#include "google/protobuf/generated_enum_reflection.h"
3537

3638
namespace cel {
@@ -973,6 +975,43 @@ TEST(Value, NumericHeterogeneousEquality) {
973975
EXPECT_NE(DoubleValue(1), UintValue(2));
974976
}
975977

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+
9761015
using ValueIteratorTest = common_internal::ValueTest<>;
9771016

9781017
TEST_F(ValueIteratorTest, Empty) {

0 commit comments

Comments
 (0)