| 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());
|
| }
|
| }
|
| -
|
|
|