@@ -104,7 +104,7 @@ class CelProtoWrapperTest : public ::testing::Test {
104104
105105 T dyn_value;
106106 CelValue cel_dyn_value =
107- CelProtoWrapper::CreateMessage (ReflectedCopy (message). get () , arena ());
107+ CelProtoWrapper::CreateMessage (ReflectedCopy (message), arena ());
108108 EXPECT_THAT (cel_dyn_value.type (), Eq (cel_value.type ()));
109109 EXPECT_TRUE (cel_dyn_value.GetValue (&dyn_value));
110110 EXPECT_THAT (value, Eq (dyn_value));
@@ -121,10 +121,9 @@ class CelProtoWrapperTest : public ::testing::Test {
121121 EXPECT_THAT (cel_value.MessageOrDie (), testutil::EqualsProto (*result));
122122 }
123123
124- std::unique_ptr<google::protobuf::Message> ReflectedCopy (
125- const google::protobuf::Message& message) {
126- std::unique_ptr<google::protobuf::Message> dynamic_value (
127- factory_.GetPrototype (message.GetDescriptor ())->New ());
124+ google::protobuf::Message* ReflectedCopy (const google::protobuf::Message& message) {
125+ google::protobuf::Message* dynamic_value =
126+ factory_.GetPrototype (message.GetDescriptor ())->New (&arena_);
128127 dynamic_value->CopyFrom (message);
129128 return dynamic_value;
130129 }
@@ -213,7 +212,7 @@ TEST_F(CelProtoWrapperTest, UnwrapDynamicValueNull) {
213212 value_msg.set_null_value (protobuf::NULL_VALUE );
214213
215214 CelValue value =
216- CelProtoWrapper::CreateMessage (ReflectedCopy (value_msg). get () , arena ());
215+ CelProtoWrapper::CreateMessage (ReflectedCopy (value_msg), arena ());
217216 EXPECT_TRUE (value.IsNull ());
218217}
219218
@@ -314,8 +313,8 @@ TEST_F(CelProtoWrapperTest, UnwrapDynamicStruct) {
314313 const std::string kFieldBool = " field_bool" ;
315314 (*struct_msg.mutable_fields ())[kFieldInt ].set_number_value (1 .);
316315 (*struct_msg.mutable_fields ())[kFieldBool ].set_bool_value (true );
317- CelValue value =
318- CelProtoWrapper::CreateMessage (ReflectedCopy (struct_msg). get () , arena ());
316+ auto reflected_copy = ReflectedCopy (struct_msg);
317+ CelValue value = CelProtoWrapper::CreateMessage (reflected_copy , arena ());
319318 EXPECT_TRUE (value.IsMap ());
320319 const CelMap* cel_map = value.MapOrDie ();
321320 ASSERT_TRUE (cel_map != nullptr );
@@ -355,7 +354,7 @@ TEST_F(CelProtoWrapperTest, UnwrapDynamicValueStruct) {
355354 .set_number_value (2 );
356355
357356 CelValue value =
358- CelProtoWrapper::CreateMessage (ReflectedCopy (value_msg). get () , arena ());
357+ CelProtoWrapper::CreateMessage (ReflectedCopy (value_msg), arena ());
359358 EXPECT_TRUE (value.IsMap ());
360359 EXPECT_TRUE (
361360 (*value.MapOrDie ())[CelValue::CreateString (&kField1 )].has_value ());
@@ -398,7 +397,7 @@ TEST_F(CelProtoWrapperTest, UnwrapDynamicValueListValue) {
398397 value_msg.mutable_list_value ()->add_values ()->set_number_value (2 .);
399398
400399 CelValue value =
401- CelProtoWrapper::CreateMessage (ReflectedCopy (value_msg). get () , arena ());
400+ CelProtoWrapper::CreateMessage (ReflectedCopy (value_msg), arena ());
402401 EXPECT_TRUE (value.IsList ());
403402 EXPECT_THAT ((*value.ListOrDie ())[0 ].DoubleOrDie (), testing::DoubleEq (1 ));
404403 EXPECT_THAT ((*value.ListOrDie ())[1 ].DoubleOrDie (), testing::DoubleEq (2 ));
@@ -426,6 +425,47 @@ TEST_F(CelProtoWrapperTest, UnwrapInvalidAny) {
426425 ASSERT_TRUE (CelProtoWrapper::CreateMessage (&any, arena ()).IsError ());
427426}
428427
428+ TEST_F (CelProtoWrapperTest, CreateMessageExplicitPoolAndFactory) {
429+ TestMessage test_message;
430+ test_message.set_string_value (" test" );
431+
432+ CelValue value = CelProtoWrapper::CreateMessage (
433+ &test_message, google::protobuf::DescriptorPool::generated_pool (),
434+ google::protobuf::MessageFactory::generated_factory (), arena ());
435+ ASSERT_TRUE (value.IsMessage ());
436+ EXPECT_THAT (value.MessageOrDie (), testutil::EqualsProto (test_message));
437+ }
438+
439+ TEST_F (CelProtoWrapperTest, CreateMessageExplicitPoolAndFactoryUnpackAny) {
440+ TestMessage test_message;
441+ test_message.set_string_value (" test" );
442+
443+ Any any;
444+ any.PackFrom (test_message);
445+
446+ google::protobuf::DynamicMessageFactory factory (
447+ google::protobuf::DescriptorPool::generated_pool ());
448+ CelValue value = CelProtoWrapper::CreateMessage (
449+ &any, google::protobuf::DescriptorPool::generated_pool (), &factory, arena ());
450+ ASSERT_TRUE (value.IsMessage ());
451+ EXPECT_THAT (value.MessageOrDie (), testutil::EqualsProto (test_message));
452+ }
453+
454+ TEST_F (CelProtoWrapperTest,
455+ CreateMessageExplicitPoolAndFactoryUnpackAnyNotFound) {
456+ TestMessage test_message;
457+ test_message.set_string_value (" test" );
458+
459+ Any any;
460+ any.PackFrom (test_message);
461+
462+ google::protobuf::DescriptorPool empty_pool;
463+ google::protobuf::DynamicMessageFactory factory (&empty_pool);
464+ CelValue value =
465+ CelProtoWrapper::CreateMessage (&any, &empty_pool, &factory, arena ());
466+ EXPECT_TRUE (value.IsError ());
467+ }
468+
429469// Test support of google.protobuf.<Type>Value wrappers in CelValue.
430470TEST_F (CelProtoWrapperTest, UnwrapBoolWrapper) {
431471 bool value = true ;
0 commit comments