|
|
|
@ -340,12 +340,20 @@ TEST(ReflectionOpsTest, IsInitialized) { |
|
|
|
|
unittest::TestRequired message; |
|
|
|
|
|
|
|
|
|
EXPECT_FALSE(ReflectionOps::IsInitialized(message)); |
|
|
|
|
EXPECT_FALSE(ReflectionOps::IsInitialized(message, true, false)); |
|
|
|
|
EXPECT_TRUE(ReflectionOps::IsInitialized(message, false, true)); |
|
|
|
|
message.set_a(1); |
|
|
|
|
EXPECT_FALSE(ReflectionOps::IsInitialized(message)); |
|
|
|
|
EXPECT_FALSE(ReflectionOps::IsInitialized(message, true, true)); |
|
|
|
|
EXPECT_TRUE(ReflectionOps::IsInitialized(message, false, true)); |
|
|
|
|
message.set_b(2); |
|
|
|
|
EXPECT_FALSE(ReflectionOps::IsInitialized(message)); |
|
|
|
|
EXPECT_FALSE(ReflectionOps::IsInitialized(message, true, true)); |
|
|
|
|
EXPECT_TRUE(ReflectionOps::IsInitialized(message, false, true)); |
|
|
|
|
message.set_c(3); |
|
|
|
|
EXPECT_TRUE(ReflectionOps::IsInitialized(message)); |
|
|
|
|
EXPECT_TRUE(ReflectionOps::IsInitialized(message, true, false)); |
|
|
|
|
EXPECT_TRUE(ReflectionOps::IsInitialized(message, false, true)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
TEST(ReflectionOpsTest, ForeignIsInitialized) { |
|
|
|
@ -354,26 +362,35 @@ TEST(ReflectionOpsTest, ForeignIsInitialized) { |
|
|
|
|
// Starts out initialized because the foreign message is itself an optional
|
|
|
|
|
// field.
|
|
|
|
|
EXPECT_TRUE(ReflectionOps::IsInitialized(message)); |
|
|
|
|
EXPECT_TRUE(ReflectionOps::IsInitialized(message, false, true)); |
|
|
|
|
|
|
|
|
|
// Once we create that field, the message is no longer initialized.
|
|
|
|
|
message.mutable_optional_message(); |
|
|
|
|
EXPECT_FALSE(ReflectionOps::IsInitialized(message)); |
|
|
|
|
EXPECT_TRUE(ReflectionOps::IsInitialized(message, true, false)); |
|
|
|
|
EXPECT_FALSE(ReflectionOps::IsInitialized(message, false, true)); |
|
|
|
|
|
|
|
|
|
// Initialize it. Now we're initialized.
|
|
|
|
|
message.mutable_optional_message()->set_a(1); |
|
|
|
|
message.mutable_optional_message()->set_b(2); |
|
|
|
|
message.mutable_optional_message()->set_c(3); |
|
|
|
|
EXPECT_TRUE(ReflectionOps::IsInitialized(message)); |
|
|
|
|
EXPECT_TRUE(ReflectionOps::IsInitialized(message, true, false)); |
|
|
|
|
EXPECT_TRUE(ReflectionOps::IsInitialized(message, false, true)); |
|
|
|
|
|
|
|
|
|
// Add a repeated version of the message. No longer initialized.
|
|
|
|
|
unittest::TestRequired* sub_message = message.add_repeated_message(); |
|
|
|
|
EXPECT_FALSE(ReflectionOps::IsInitialized(message)); |
|
|
|
|
EXPECT_TRUE(ReflectionOps::IsInitialized(message, true, false)); |
|
|
|
|
EXPECT_FALSE(ReflectionOps::IsInitialized(message, false, true)); |
|
|
|
|
|
|
|
|
|
// Initialize that repeated version.
|
|
|
|
|
sub_message->set_a(1); |
|
|
|
|
sub_message->set_b(2); |
|
|
|
|
sub_message->set_c(3); |
|
|
|
|
EXPECT_TRUE(ReflectionOps::IsInitialized(message)); |
|
|
|
|
EXPECT_TRUE(ReflectionOps::IsInitialized(message, true, false)); |
|
|
|
|
EXPECT_TRUE(ReflectionOps::IsInitialized(message, false, true)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
TEST(ReflectionOpsTest, ExtensionIsInitialized) { |
|
|
|
@ -382,42 +399,62 @@ TEST(ReflectionOpsTest, ExtensionIsInitialized) { |
|
|
|
|
// Starts out initialized because the foreign message is itself an optional
|
|
|
|
|
// field.
|
|
|
|
|
EXPECT_TRUE(ReflectionOps::IsInitialized(message)); |
|
|
|
|
EXPECT_TRUE(ReflectionOps::IsInitialized(message, true, false)); |
|
|
|
|
EXPECT_TRUE(ReflectionOps::IsInitialized(message, false, true)); |
|
|
|
|
|
|
|
|
|
// Once we create that field, the message is no longer initialized.
|
|
|
|
|
message.MutableExtension(unittest::TestRequired::single); |
|
|
|
|
EXPECT_FALSE(ReflectionOps::IsInitialized(message)); |
|
|
|
|
EXPECT_TRUE(ReflectionOps::IsInitialized(message, true, false)); |
|
|
|
|
EXPECT_FALSE(ReflectionOps::IsInitialized(message, false, true)); |
|
|
|
|
|
|
|
|
|
// Initialize it. Now we're initialized.
|
|
|
|
|
message.MutableExtension(unittest::TestRequired::single)->set_a(1); |
|
|
|
|
message.MutableExtension(unittest::TestRequired::single)->set_b(2); |
|
|
|
|
message.MutableExtension(unittest::TestRequired::single)->set_c(3); |
|
|
|
|
EXPECT_TRUE(ReflectionOps::IsInitialized(message)); |
|
|
|
|
EXPECT_TRUE(ReflectionOps::IsInitialized(message, true, false)); |
|
|
|
|
EXPECT_TRUE(ReflectionOps::IsInitialized(message, false, true)); |
|
|
|
|
|
|
|
|
|
// Add a repeated version of the message. No longer initialized.
|
|
|
|
|
message.AddExtension(unittest::TestRequired::multi); |
|
|
|
|
EXPECT_FALSE(ReflectionOps::IsInitialized(message)); |
|
|
|
|
EXPECT_TRUE(ReflectionOps::IsInitialized(message, true, false)); |
|
|
|
|
EXPECT_FALSE(ReflectionOps::IsInitialized(message, false, true)); |
|
|
|
|
|
|
|
|
|
// Initialize that repeated version.
|
|
|
|
|
message.MutableExtension(unittest::TestRequired::multi, 0)->set_a(1); |
|
|
|
|
message.MutableExtension(unittest::TestRequired::multi, 0)->set_b(2); |
|
|
|
|
message.MutableExtension(unittest::TestRequired::multi, 0)->set_c(3); |
|
|
|
|
EXPECT_TRUE(ReflectionOps::IsInitialized(message)); |
|
|
|
|
EXPECT_TRUE(ReflectionOps::IsInitialized(message, true, false)); |
|
|
|
|
EXPECT_TRUE(ReflectionOps::IsInitialized(message, false, true)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
TEST(ReflectionOpsTest, OneofIsInitialized) { |
|
|
|
|
unittest::TestRequiredOneof message; |
|
|
|
|
EXPECT_TRUE(ReflectionOps::IsInitialized(message)); |
|
|
|
|
EXPECT_TRUE(ReflectionOps::IsInitialized(message, true, false)); |
|
|
|
|
EXPECT_TRUE(ReflectionOps::IsInitialized(message, false, true)); |
|
|
|
|
|
|
|
|
|
message.mutable_foo_message(); |
|
|
|
|
EXPECT_FALSE(ReflectionOps::IsInitialized(message)); |
|
|
|
|
EXPECT_TRUE(ReflectionOps::IsInitialized(message, true, false)); |
|
|
|
|
EXPECT_FALSE(ReflectionOps::IsInitialized(message, false, true)); |
|
|
|
|
|
|
|
|
|
message.set_foo_int(1); |
|
|
|
|
EXPECT_TRUE(ReflectionOps::IsInitialized(message)); |
|
|
|
|
EXPECT_TRUE(ReflectionOps::IsInitialized(message, true, false)); |
|
|
|
|
EXPECT_TRUE(ReflectionOps::IsInitialized(message, false, true)); |
|
|
|
|
|
|
|
|
|
message.mutable_foo_message(); |
|
|
|
|
EXPECT_FALSE(ReflectionOps::IsInitialized(message)); |
|
|
|
|
EXPECT_TRUE(ReflectionOps::IsInitialized(message, true, false)); |
|
|
|
|
EXPECT_FALSE(ReflectionOps::IsInitialized(message, false, true)); |
|
|
|
|
message.mutable_foo_message()->set_required_double(0.1); |
|
|
|
|
EXPECT_TRUE(ReflectionOps::IsInitialized(message)); |
|
|
|
|
EXPECT_TRUE(ReflectionOps::IsInitialized(message, true, false)); |
|
|
|
|
EXPECT_TRUE(ReflectionOps::IsInitialized(message, false, true)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static std::string FindInitializationErrors(const Message& message) { |
|
|
|
|