Index: third_party/protobuf/java/util/src/test/java/com/google/protobuf/util/FieldMaskTreeTest.java |
diff --git a/third_party/protobuf/java/util/src/test/java/com/google/protobuf/util/FieldMaskTreeTest.java b/third_party/protobuf/java/util/src/test/java/com/google/protobuf/util/FieldMaskTreeTest.java |
index 3391f239feb7d2e5a2fcee97d19e9abd42e35add..3ee0fc6e6aaf48ad72b2c4d6cfab8e911f3bd59e 100644 |
--- a/third_party/protobuf/java/util/src/test/java/com/google/protobuf/util/FieldMaskTreeTest.java |
+++ b/third_party/protobuf/java/util/src/test/java/com/google/protobuf/util/FieldMaskTreeTest.java |
@@ -61,19 +61,16 @@ public class FieldMaskTreeTest extends TestCase { |
tree.addFieldPath("bar"); |
assertEquals("bar,foo", tree.toString()); |
} |
- |
+ |
public void testMergeFromFieldMask() throws Exception { |
- FieldMaskTree tree = new FieldMaskTree( |
- FieldMaskUtil.fromString("foo,bar.baz,bar.quz")); |
+ FieldMaskTree tree = new FieldMaskTree(FieldMaskUtil.fromString("foo,bar.baz,bar.quz")); |
assertEquals("bar.baz,bar.quz,foo", tree.toString()); |
- tree.mergeFromFieldMask( |
- FieldMaskUtil.fromString("foo.bar,bar")); |
+ tree.mergeFromFieldMask(FieldMaskUtil.fromString("foo.bar,bar")); |
assertEquals("bar,foo", tree.toString()); |
} |
- |
+ |
public void testIntersectFieldPath() throws Exception { |
- FieldMaskTree tree = new FieldMaskTree( |
- FieldMaskUtil.fromString("foo,bar.baz,bar.quz")); |
+ FieldMaskTree tree = new FieldMaskTree(FieldMaskUtil.fromString("foo,bar.baz,bar.quz")); |
FieldMaskTree result = new FieldMaskTree(); |
// Empty path. |
tree.intersectFieldPath("", result); |
@@ -96,16 +93,18 @@ public class FieldMaskTreeTest extends TestCase { |
} |
public void testMerge() throws Exception { |
- TestAllTypes value = TestAllTypes.newBuilder() |
- .setOptionalInt32(1234) |
- .setOptionalNestedMessage(NestedMessage.newBuilder().setBb(5678)) |
- .addRepeatedInt32(4321) |
- .addRepeatedNestedMessage(NestedMessage.newBuilder().setBb(8765)) |
- .build(); |
- NestedTestAllTypes source = NestedTestAllTypes.newBuilder() |
- .setPayload(value) |
- .setChild(NestedTestAllTypes.newBuilder().setPayload(value)) |
- .build(); |
+ TestAllTypes value = |
+ TestAllTypes.newBuilder() |
+ .setOptionalInt32(1234) |
+ .setOptionalNestedMessage(NestedMessage.newBuilder().setBb(5678)) |
+ .addRepeatedInt32(4321) |
+ .addRepeatedNestedMessage(NestedMessage.newBuilder().setBb(8765)) |
+ .build(); |
+ NestedTestAllTypes source = |
+ NestedTestAllTypes.newBuilder() |
+ .setPayload(value) |
+ .setChild(NestedTestAllTypes.newBuilder().setPayload(value)) |
+ .build(); |
// Now we have a message source with the following structure: |
// [root] -+- payload -+- optional_int32 |
// | +- optional_nested_message |
@@ -116,114 +115,147 @@ public class FieldMaskTreeTest extends TestCase { |
// +- optional_nested_message |
// +- repeated_int32 |
// +- repeated_nested_message |
- |
+ |
FieldMaskUtil.MergeOptions options = new FieldMaskUtil.MergeOptions(); |
- |
+ |
// Test merging each individual field. |
NestedTestAllTypes.Builder builder = NestedTestAllTypes.newBuilder(); |
- new FieldMaskTree().addFieldPath("payload.optional_int32") |
- .merge(source, builder, options); |
+ new FieldMaskTree().addFieldPath("payload.optional_int32").merge(source, builder, options); |
NestedTestAllTypes.Builder expected = NestedTestAllTypes.newBuilder(); |
expected.getPayloadBuilder().setOptionalInt32(1234); |
assertEquals(expected.build(), builder.build()); |
builder = NestedTestAllTypes.newBuilder(); |
- new FieldMaskTree().addFieldPath("payload.optional_nested_message") |
+ new FieldMaskTree() |
+ .addFieldPath("payload.optional_nested_message") |
.merge(source, builder, options); |
expected = NestedTestAllTypes.newBuilder(); |
- expected.getPayloadBuilder().setOptionalNestedMessage( |
- NestedMessage.newBuilder().setBb(5678)); |
+ expected.getPayloadBuilder().setOptionalNestedMessage(NestedMessage.newBuilder().setBb(5678)); |
assertEquals(expected.build(), builder.build()); |
- |
builder = NestedTestAllTypes.newBuilder(); |
- new FieldMaskTree().addFieldPath("payload.repeated_int32") |
- .merge(source, builder, options); |
+ new FieldMaskTree().addFieldPath("payload.repeated_int32").merge(source, builder, options); |
expected = NestedTestAllTypes.newBuilder(); |
expected.getPayloadBuilder().addRepeatedInt32(4321); |
assertEquals(expected.build(), builder.build()); |
builder = NestedTestAllTypes.newBuilder(); |
- new FieldMaskTree().addFieldPath("payload.repeated_nested_message") |
+ new FieldMaskTree() |
+ .addFieldPath("payload.repeated_nested_message") |
.merge(source, builder, options); |
expected = NestedTestAllTypes.newBuilder(); |
- expected.getPayloadBuilder().addRepeatedNestedMessage( |
- NestedMessage.newBuilder().setBb(8765)); |
+ expected.getPayloadBuilder().addRepeatedNestedMessage(NestedMessage.newBuilder().setBb(8765)); |
assertEquals(expected.build(), builder.build()); |
builder = NestedTestAllTypes.newBuilder(); |
- new FieldMaskTree().addFieldPath("child.payload.optional_int32") |
+ new FieldMaskTree() |
+ .addFieldPath("child.payload.optional_int32") |
.merge(source, builder, options); |
expected = NestedTestAllTypes.newBuilder(); |
expected.getChildBuilder().getPayloadBuilder().setOptionalInt32(1234); |
assertEquals(expected.build(), builder.build()); |
builder = NestedTestAllTypes.newBuilder(); |
- new FieldMaskTree().addFieldPath("child.payload.optional_nested_message") |
+ new FieldMaskTree() |
+ .addFieldPath("child.payload.optional_nested_message") |
.merge(source, builder, options); |
expected = NestedTestAllTypes.newBuilder(); |
- expected.getChildBuilder().getPayloadBuilder().setOptionalNestedMessage( |
- NestedMessage.newBuilder().setBb(5678)); |
+ expected |
+ .getChildBuilder() |
+ .getPayloadBuilder() |
+ .setOptionalNestedMessage(NestedMessage.newBuilder().setBb(5678)); |
assertEquals(expected.build(), builder.build()); |
- |
builder = NestedTestAllTypes.newBuilder(); |
- new FieldMaskTree().addFieldPath("child.payload.repeated_int32") |
+ new FieldMaskTree() |
+ .addFieldPath("child.payload.repeated_int32") |
.merge(source, builder, options); |
expected = NestedTestAllTypes.newBuilder(); |
expected.getChildBuilder().getPayloadBuilder().addRepeatedInt32(4321); |
assertEquals(expected.build(), builder.build()); |
- |
builder = NestedTestAllTypes.newBuilder(); |
- new FieldMaskTree().addFieldPath("child.payload.repeated_nested_message") |
+ new FieldMaskTree() |
+ .addFieldPath("child.payload.repeated_nested_message") |
.merge(source, builder, options); |
expected = NestedTestAllTypes.newBuilder(); |
- expected.getChildBuilder().getPayloadBuilder().addRepeatedNestedMessage( |
- NestedMessage.newBuilder().setBb(8765)); |
+ expected |
+ .getChildBuilder() |
+ .getPayloadBuilder() |
+ .addRepeatedNestedMessage(NestedMessage.newBuilder().setBb(8765)); |
assertEquals(expected.build(), builder.build()); |
- |
+ |
// Test merging all fields. |
builder = NestedTestAllTypes.newBuilder(); |
- new FieldMaskTree().addFieldPath("child").addFieldPath("payload") |
- .merge(source, builder, options); |
+ new FieldMaskTree() |
+ .addFieldPath("child") |
+ .addFieldPath("payload") |
+ .merge(source, builder, options); |
assertEquals(source, builder.build()); |
- |
+ |
// Test repeated options. |
builder = NestedTestAllTypes.newBuilder(); |
builder.getPayloadBuilder().addRepeatedInt32(1000); |
- new FieldMaskTree().addFieldPath("payload.repeated_int32") |
- .merge(source, builder, options); |
+ new FieldMaskTree().addFieldPath("payload.repeated_int32").merge(source, builder, options); |
// Default behavior is to append repeated fields. |
assertEquals(2, builder.getPayload().getRepeatedInt32Count()); |
assertEquals(1000, builder.getPayload().getRepeatedInt32(0)); |
assertEquals(4321, builder.getPayload().getRepeatedInt32(1)); |
// Change to replace repeated fields. |
options.setReplaceRepeatedFields(true); |
- new FieldMaskTree().addFieldPath("payload.repeated_int32") |
- .merge(source, builder, options); |
+ new FieldMaskTree().addFieldPath("payload.repeated_int32").merge(source, builder, options); |
assertEquals(1, builder.getPayload().getRepeatedInt32Count()); |
assertEquals(4321, builder.getPayload().getRepeatedInt32(0)); |
- |
+ |
// Test message options. |
builder = NestedTestAllTypes.newBuilder(); |
builder.getPayloadBuilder().setOptionalInt32(1000); |
builder.getPayloadBuilder().setOptionalUint32(2000); |
- new FieldMaskTree().addFieldPath("payload") |
- .merge(source, builder, options); |
+ new FieldMaskTree().addFieldPath("payload").merge(source, builder, options); |
// Default behavior is to merge message fields. |
assertEquals(1234, builder.getPayload().getOptionalInt32()); |
assertEquals(2000, builder.getPayload().getOptionalUint32()); |
- |
+ |
+ // Test merging unset message fields. |
+ NestedTestAllTypes clearedSource = source.toBuilder().clearPayload().build(); |
+ builder = NestedTestAllTypes.newBuilder(); |
+ new FieldMaskTree().addFieldPath("payload").merge(clearedSource, builder, options); |
+ assertEquals(false, builder.hasPayload()); |
+ |
// Change to replace message fields. |
options.setReplaceMessageFields(true); |
builder = NestedTestAllTypes.newBuilder(); |
builder.getPayloadBuilder().setOptionalInt32(1000); |
builder.getPayloadBuilder().setOptionalUint32(2000); |
- new FieldMaskTree().addFieldPath("payload") |
- .merge(source, builder, options); |
+ new FieldMaskTree().addFieldPath("payload").merge(source, builder, options); |
assertEquals(1234, builder.getPayload().getOptionalInt32()); |
assertEquals(0, builder.getPayload().getOptionalUint32()); |
+ |
+ // Test merging unset message fields. |
+ builder = NestedTestAllTypes.newBuilder(); |
+ builder.getPayloadBuilder().setOptionalInt32(1000); |
+ builder.getPayloadBuilder().setOptionalUint32(2000); |
+ new FieldMaskTree().addFieldPath("payload").merge(clearedSource, builder, options); |
+ assertEquals(false, builder.hasPayload()); |
+ |
+ // Test merging unset primitive fields. |
+ builder = source.toBuilder(); |
+ builder.getPayloadBuilder().clearOptionalInt32(); |
+ NestedTestAllTypes sourceWithPayloadInt32Unset = builder.build(); |
+ builder = source.toBuilder(); |
+ new FieldMaskTree() |
+ .addFieldPath("payload.optional_int32") |
+ .merge(sourceWithPayloadInt32Unset, builder, options); |
+ assertEquals(true, builder.getPayload().hasOptionalInt32()); |
+ assertEquals(0, builder.getPayload().getOptionalInt32()); |
+ |
+ // Change to clear unset primitive fields. |
+ options.setReplacePrimitiveFields(true); |
+ builder = source.toBuilder(); |
+ new FieldMaskTree() |
+ .addFieldPath("payload.optional_int32") |
+ .merge(sourceWithPayloadInt32Unset, builder, options); |
+ assertEquals(true, builder.hasPayload()); |
+ assertEquals(false, builder.getPayload().hasOptionalInt32()); |
} |
} |
- |