Index: third_party/protobuf/src/google/protobuf/util/field_mask_util_test.cc |
diff --git a/third_party/protobuf/src/google/protobuf/util/field_mask_util_test.cc b/third_party/protobuf/src/google/protobuf/util/field_mask_util_test.cc |
index 9b7fb62a7faf5c321e1641964c0d7c95f0c1fcc5..f952786ff534bf70dc6aca2a0398872e4aa85499 100644 |
--- a/third_party/protobuf/src/google/protobuf/util/field_mask_util_test.cc |
+++ b/third_party/protobuf/src/google/protobuf/util/field_mask_util_test.cc |
@@ -159,6 +159,27 @@ TEST(FieldMaskUtilTest, JsonStringFormat) { |
EXPECT_EQ("baz_quz", mask.paths(1)); |
} |
+TEST(FieldMaskUtilTest, GetFieldDescriptors) { |
+ std::vector<const FieldDescriptor*> field_descriptors; |
+ EXPECT_TRUE(FieldMaskUtil::GetFieldDescriptors( |
+ TestAllTypes::descriptor(), "optional_int32", &field_descriptors)); |
+ EXPECT_EQ(1, field_descriptors.size()); |
+ EXPECT_EQ("optional_int32", field_descriptors[0]->name()); |
+ EXPECT_FALSE(FieldMaskUtil::GetFieldDescriptors( |
+ TestAllTypes::descriptor(), "optional_nonexist", NULL)); |
+ EXPECT_TRUE(FieldMaskUtil::GetFieldDescriptors(TestAllTypes::descriptor(), |
+ "optional_nested_message.bb", |
+ &field_descriptors)); |
+ EXPECT_EQ(2, field_descriptors.size()); |
+ EXPECT_EQ("optional_nested_message", field_descriptors[0]->name()); |
+ EXPECT_EQ("bb", field_descriptors[1]->name()); |
+ EXPECT_FALSE(FieldMaskUtil::GetFieldDescriptors( |
+ TestAllTypes::descriptor(), "optional_nested_message.nonexist", NULL)); |
+ // FieldMask cannot be used to specify sub-fields of a repeated message. |
+ EXPECT_FALSE(FieldMaskUtil::GetFieldDescriptors( |
+ TestAllTypes::descriptor(), "repeated_nested_message.bb", NULL)); |
+} |
+ |
TEST(FieldMaskUtilTest, TestIsVaildPath) { |
EXPECT_TRUE(FieldMaskUtil::IsValidPath<TestAllTypes>("optional_int32")); |
EXPECT_FALSE(FieldMaskUtil::IsValidPath<TestAllTypes>("optional_nonexist")); |
@@ -349,6 +370,10 @@ TEST(FieldMaskUtilTest, MergeMessage) { |
dst.Clear(); \ |
FieldMaskUtil::MergeMessageTo(src, mask, options, &dst); \ |
EXPECT_EQ(tmp.DebugString(), dst.DebugString()); \ |
+ src.clear_##field_name(); \ |
+ tmp.clear_##field_name(); \ |
+ FieldMaskUtil::MergeMessageTo(src, mask, options, &dst); \ |
+ EXPECT_EQ(tmp.DebugString(), dst.DebugString()); \ |
} |
TEST_MERGE_ONE_PRIMITIVE_FIELD(optional_int32) |
TEST_MERGE_ONE_PRIMITIVE_FIELD(optional_int64) |
@@ -484,6 +509,117 @@ TEST(FieldMaskUtilTest, MergeMessage) { |
EXPECT_EQ(1234, nested_dst.payload().repeated_int32(0)); |
} |
+TEST(FieldMaskUtilTest, TrimMessage) { |
+#define TEST_TRIM_ONE_PRIMITIVE_FIELD(field_name) \ |
+ { \ |
+ TestAllTypes msg; \ |
+ TestUtil::SetAllFields(&msg); \ |
+ TestAllTypes tmp; \ |
+ tmp.set_##field_name(msg.field_name()); \ |
+ FieldMask mask; \ |
+ mask.add_paths(#field_name); \ |
+ FieldMaskUtil::TrimMessage(mask, &msg); \ |
+ EXPECT_EQ(tmp.DebugString(), msg.DebugString()); \ |
+ } |
+ TEST_TRIM_ONE_PRIMITIVE_FIELD(optional_int32) |
+ TEST_TRIM_ONE_PRIMITIVE_FIELD(optional_int64) |
+ TEST_TRIM_ONE_PRIMITIVE_FIELD(optional_uint32) |
+ TEST_TRIM_ONE_PRIMITIVE_FIELD(optional_uint64) |
+ TEST_TRIM_ONE_PRIMITIVE_FIELD(optional_sint32) |
+ TEST_TRIM_ONE_PRIMITIVE_FIELD(optional_sint64) |
+ TEST_TRIM_ONE_PRIMITIVE_FIELD(optional_fixed32) |
+ TEST_TRIM_ONE_PRIMITIVE_FIELD(optional_fixed64) |
+ TEST_TRIM_ONE_PRIMITIVE_FIELD(optional_sfixed32) |
+ TEST_TRIM_ONE_PRIMITIVE_FIELD(optional_sfixed64) |
+ TEST_TRIM_ONE_PRIMITIVE_FIELD(optional_float) |
+ TEST_TRIM_ONE_PRIMITIVE_FIELD(optional_double) |
+ TEST_TRIM_ONE_PRIMITIVE_FIELD(optional_bool) |
+ TEST_TRIM_ONE_PRIMITIVE_FIELD(optional_string) |
+ TEST_TRIM_ONE_PRIMITIVE_FIELD(optional_bytes) |
+ TEST_TRIM_ONE_PRIMITIVE_FIELD(optional_nested_enum) |
+ TEST_TRIM_ONE_PRIMITIVE_FIELD(optional_foreign_enum) |
+ TEST_TRIM_ONE_PRIMITIVE_FIELD(optional_import_enum) |
+#undef TEST_TRIM_ONE_PRIMITIVE_FIELD |
+ |
+#define TEST_TRIM_ONE_FIELD(field_name) \ |
+ { \ |
+ TestAllTypes msg; \ |
+ TestUtil::SetAllFields(&msg); \ |
+ TestAllTypes tmp; \ |
+ *tmp.mutable_##field_name() = msg.field_name(); \ |
+ FieldMask mask; \ |
+ mask.add_paths(#field_name); \ |
+ FieldMaskUtil::TrimMessage(mask, &msg); \ |
+ EXPECT_EQ(tmp.DebugString(), msg.DebugString()); \ |
+ } |
+ TEST_TRIM_ONE_FIELD(optional_nested_message) |
+ TEST_TRIM_ONE_FIELD(optional_foreign_message) |
+ TEST_TRIM_ONE_FIELD(optional_import_message) |
+ |
+ TEST_TRIM_ONE_FIELD(repeated_int32) |
+ TEST_TRIM_ONE_FIELD(repeated_int64) |
+ TEST_TRIM_ONE_FIELD(repeated_uint32) |
+ TEST_TRIM_ONE_FIELD(repeated_uint64) |
+ TEST_TRIM_ONE_FIELD(repeated_sint32) |
+ TEST_TRIM_ONE_FIELD(repeated_sint64) |
+ TEST_TRIM_ONE_FIELD(repeated_fixed32) |
+ TEST_TRIM_ONE_FIELD(repeated_fixed64) |
+ TEST_TRIM_ONE_FIELD(repeated_sfixed32) |
+ TEST_TRIM_ONE_FIELD(repeated_sfixed64) |
+ TEST_TRIM_ONE_FIELD(repeated_float) |
+ TEST_TRIM_ONE_FIELD(repeated_double) |
+ TEST_TRIM_ONE_FIELD(repeated_bool) |
+ TEST_TRIM_ONE_FIELD(repeated_string) |
+ TEST_TRIM_ONE_FIELD(repeated_bytes) |
+ TEST_TRIM_ONE_FIELD(repeated_nested_message) |
+ TEST_TRIM_ONE_FIELD(repeated_foreign_message) |
+ TEST_TRIM_ONE_FIELD(repeated_import_message) |
+ TEST_TRIM_ONE_FIELD(repeated_nested_enum) |
+ TEST_TRIM_ONE_FIELD(repeated_foreign_enum) |
+ TEST_TRIM_ONE_FIELD(repeated_import_enum) |
+#undef TEST_TRIM_ONE_FIELD |
+ |
+ // Test trim nested fields. |
+ NestedTestAllTypes nested_msg; |
+ nested_msg.mutable_child()->mutable_payload()->set_optional_int32(1234); |
+ nested_msg.mutable_child() |
+ ->mutable_child() |
+ ->mutable_payload() |
+ ->set_optional_int32(5678); |
+ NestedTestAllTypes trimmed_msg(nested_msg); |
+ FieldMask mask; |
+ FieldMaskUtil::FromString("child.payload", &mask); |
+ FieldMaskUtil::TrimMessage(mask, &trimmed_msg); |
+ EXPECT_EQ(1234, trimmed_msg.child().payload().optional_int32()); |
+ EXPECT_EQ(0, trimmed_msg.child().child().payload().optional_int32()); |
+ |
+ trimmed_msg = nested_msg; |
+ FieldMaskUtil::FromString("child.child.payload", &mask); |
+ FieldMaskUtil::TrimMessage(mask, &trimmed_msg); |
+ EXPECT_EQ(0, trimmed_msg.child().payload().optional_int32()); |
+ EXPECT_EQ(5678, trimmed_msg.child().child().payload().optional_int32()); |
+ |
+ trimmed_msg = nested_msg; |
+ FieldMaskUtil::FromString("child", &mask); |
+ FieldMaskUtil::TrimMessage(mask, &trimmed_msg); |
+ EXPECT_EQ(1234, trimmed_msg.child().payload().optional_int32()); |
+ EXPECT_EQ(5678, trimmed_msg.child().child().payload().optional_int32()); |
+ |
+ trimmed_msg = nested_msg; |
+ FieldMaskUtil::FromString("child.child", &mask); |
+ FieldMaskUtil::TrimMessage(mask, &trimmed_msg); |
+ EXPECT_EQ(0, trimmed_msg.child().payload().optional_int32()); |
+ EXPECT_EQ(5678, trimmed_msg.child().child().payload().optional_int32()); |
+ |
+ // Verify than an empty FieldMask trims nothing |
+ TestAllTypes all_types_msg; |
+ TestUtil::SetAllFields(&all_types_msg); |
+ TestAllTypes trimmed_all_types(all_types_msg); |
+ FieldMask empty_mask; |
+ FieldMaskUtil::TrimMessage(empty_mask, &trimmed_all_types); |
+ EXPECT_EQ(trimmed_all_types.DebugString(), all_types_msg.DebugString()); |
+} |
+ |
} // namespace |
} // namespace util |