31 package com.google.protobuf.util;
41 import junit.framework.TestCase;
45 FieldMaskTree
tree =
new FieldMaskTree();
46 assertEquals(
"",
tree.toString());
47 tree.addFieldPath(
"");
48 assertEquals(
"",
tree.toString());
50 tree.addFieldPath(
"foo");
51 assertEquals(
"foo",
tree.toString());
53 tree.addFieldPath(
"foo");
54 assertEquals(
"foo",
tree.toString());
56 tree.addFieldPath(
"bar.baz");
57 assertEquals(
"bar.baz,foo",
tree.toString());
59 tree.addFieldPath(
"foo.bar");
60 assertEquals(
"bar.baz,foo",
tree.toString());
62 tree.addFieldPath(
"bar.quz");
63 assertEquals(
"bar.baz,bar.quz,foo",
tree.toString());
65 tree.addFieldPath(
"bar");
66 assertEquals(
"bar,foo",
tree.toString());
71 assertEquals(
"bar.baz,bar.quz,foo",
tree.toString());
73 assertEquals(
"bar,foo",
tree.toString());
78 FieldMaskTree result =
new FieldMaskTree();
80 tree.intersectFieldPath(
"", result);
81 assertEquals(
"", result.toString());
83 tree.intersectFieldPath(
"quz", result);
84 assertEquals(
"", result.toString());
86 tree.intersectFieldPath(
"foo.bar", result);
87 assertEquals(
"foo.bar", result.toString());
89 tree.intersectFieldPath(
"foo", result);
90 assertEquals(
"foo", result.toString());
92 tree.intersectFieldPath(
"bar.foo", result);
93 assertEquals(
"foo", result.toString());
95 tree.intersectFieldPath(
"bar", result);
96 assertEquals(
"bar.baz,bar.quz,foo", result.toString());
111 boolean useDynamicMessage)
113 if (useDynamicMessage) {
116 .
mergeFrom(builder.buildPartial().toByteArray());
124 builder.mergeFrom(newBuilder.buildPartial());
131 TestRequired
value = TestRequired.newBuilder().setA(4321).setB(8765).setC(233333).build();
132 TestRequiredMessage
source = TestRequiredMessage.newBuilder().setRequiredMessage(
value).build();
135 TestRequiredMessage.Builder builder = TestRequiredMessage.newBuilder();
137 new FieldMaskTree().addFieldPath(
"required_message.a"),
142 assertTrue(builder.hasRequiredMessage());
143 assertTrue(builder.getRequiredMessage().hasA());
144 assertFalse(builder.getRequiredMessage().hasB());
145 assertFalse(builder.getRequiredMessage().hasC());
147 new FieldMaskTree().addFieldPath(
"required_message.b").addFieldPath(
"required_message.c"),
153 assertEquals(builder.build(),
source);
155 throw new AssertionError(
"required field isn't set", e);
161 TestAllTypes.newBuilder()
162 .setOptionalInt32(1234)
163 .setOptionalNestedMessage(NestedMessage.newBuilder().setBb(5678))
164 .addRepeatedInt32(4321)
165 .addRepeatedNestedMessage(NestedMessage.newBuilder().setBb(8765))
167 NestedTestAllTypes
source =
168 NestedTestAllTypes.newBuilder()
170 .setChild(NestedTestAllTypes.newBuilder().setPayload(
value))
186 NestedTestAllTypes.Builder builder = NestedTestAllTypes.newBuilder();
187 merge(
new FieldMaskTree().addFieldPath(
"payload.optional_int32"),
189 NestedTestAllTypes.Builder expected = NestedTestAllTypes.newBuilder();
190 expected.getPayloadBuilder().setOptionalInt32(1234);
191 assertEquals(expected.build(), builder.build());
193 builder = NestedTestAllTypes.newBuilder();
194 merge(
new FieldMaskTree().addFieldPath(
"payload.optional_nested_message"),
196 expected = NestedTestAllTypes.newBuilder();
197 expected.getPayloadBuilder().setOptionalNestedMessage(NestedMessage.newBuilder().setBb(5678));
198 assertEquals(expected.build(), builder.build());
200 builder = NestedTestAllTypes.newBuilder();
201 merge(
new FieldMaskTree().addFieldPath(
"payload.repeated_int32"),
203 expected = NestedTestAllTypes.newBuilder();
204 expected.getPayloadBuilder().addRepeatedInt32(4321);
205 assertEquals(expected.build(), builder.build());
207 builder = NestedTestAllTypes.newBuilder();
208 merge(
new FieldMaskTree().addFieldPath(
"payload.repeated_nested_message"),
210 expected = NestedTestAllTypes.newBuilder();
211 expected.getPayloadBuilder().addRepeatedNestedMessage(NestedMessage.newBuilder().setBb(8765));
212 assertEquals(expected.build(), builder.build());
214 builder = NestedTestAllTypes.newBuilder();
216 new FieldMaskTree().addFieldPath(
"child.payload.optional_int32"),
221 expected = NestedTestAllTypes.newBuilder();
222 expected.getChildBuilder().getPayloadBuilder().setOptionalInt32(1234);
223 assertEquals(expected.build(), builder.build());
225 builder = NestedTestAllTypes.newBuilder();
227 new FieldMaskTree().addFieldPath(
"child.payload.optional_nested_message"),
232 expected = NestedTestAllTypes.newBuilder();
236 .setOptionalNestedMessage(NestedMessage.newBuilder().setBb(5678));
237 assertEquals(expected.build(), builder.build());
239 builder = NestedTestAllTypes.newBuilder();
240 merge(
new FieldMaskTree().addFieldPath(
"child.payload.repeated_int32"),
242 expected = NestedTestAllTypes.newBuilder();
243 expected.getChildBuilder().getPayloadBuilder().addRepeatedInt32(4321);
244 assertEquals(expected.build(), builder.build());
246 builder = NestedTestAllTypes.newBuilder();
247 merge(
new FieldMaskTree().addFieldPath(
"child.payload.repeated_nested_message"),
249 expected = NestedTestAllTypes.newBuilder();
253 .addRepeatedNestedMessage(NestedMessage.newBuilder().setBb(8765));
254 assertEquals(expected.build(), builder.build());
257 builder = NestedTestAllTypes.newBuilder();
258 merge(
new FieldMaskTree().addFieldPath(
"child").addFieldPath(
"payload"),
260 assertEquals(
source, builder.build());
263 builder = NestedTestAllTypes.newBuilder();
264 builder.getPayloadBuilder().addRepeatedInt32(1000);
265 merge(
new FieldMaskTree().addFieldPath(
"payload.repeated_int32"),
268 assertEquals(2, builder.getPayload().getRepeatedInt32Count());
269 assertEquals(1000, builder.getPayload().getRepeatedInt32(0));
270 assertEquals(4321, builder.getPayload().getRepeatedInt32(1));
272 options.setReplaceRepeatedFields(
true);
273 merge(
new FieldMaskTree().addFieldPath(
"payload.repeated_int32"),
275 assertEquals(1, builder.getPayload().getRepeatedInt32Count());
276 assertEquals(4321, builder.getPayload().getRepeatedInt32(0));
279 builder = NestedTestAllTypes.newBuilder();
280 builder.getPayloadBuilder().setOptionalInt32(1000);
281 builder.getPayloadBuilder().setOptionalUint32(2000);
282 merge(
new FieldMaskTree().addFieldPath(
"payload"),
285 assertEquals(1234, builder.getPayload().getOptionalInt32());
286 assertEquals(2000, builder.getPayload().getOptionalUint32());
289 NestedTestAllTypes clearedSource =
source.toBuilder().clearPayload().build();
290 builder = NestedTestAllTypes.newBuilder();
291 merge(
new FieldMaskTree().addFieldPath(
"payload"),
292 clearedSource, builder,
options, useDynamicMessage);
293 assertEquals(
false, builder.hasPayload());
296 builder = NestedTestAllTypes.newBuilder();
297 merge(
new FieldMaskTree().addFieldPath(
"payload.optional_int32"),
298 clearedSource, builder,
options, useDynamicMessage);
299 assertEquals(
false, builder.hasPayload());
302 options.setReplaceMessageFields(
true);
303 builder = NestedTestAllTypes.newBuilder();
304 builder.getPayloadBuilder().setOptionalInt32(1000);
305 builder.getPayloadBuilder().setOptionalUint32(2000);
306 merge(
new FieldMaskTree().addFieldPath(
"payload"),
308 assertEquals(1234, builder.getPayload().getOptionalInt32());
309 assertEquals(0, builder.getPayload().getOptionalUint32());
312 builder = NestedTestAllTypes.newBuilder();
313 builder.getPayloadBuilder().setOptionalInt32(1000);
314 builder.getPayloadBuilder().setOptionalUint32(2000);
315 merge(
new FieldMaskTree().addFieldPath(
"payload"),
316 clearedSource, builder,
options, useDynamicMessage);
317 assertEquals(
false, builder.hasPayload());
320 builder =
source.toBuilder();
321 builder.getPayloadBuilder().clearOptionalInt32();
322 NestedTestAllTypes sourceWithPayloadInt32Unset = builder.build();
323 builder =
source.toBuilder();
324 merge(
new FieldMaskTree().addFieldPath(
"payload.optional_int32"),
325 sourceWithPayloadInt32Unset, builder,
options, useDynamicMessage);
326 assertEquals(
true, builder.getPayload().hasOptionalInt32());
327 assertEquals(0, builder.getPayload().getOptionalInt32());
330 options.setReplacePrimitiveFields(
true);
331 builder =
source.toBuilder();
332 merge(
new FieldMaskTree().addFieldPath(
"payload.optional_int32"),
333 sourceWithPayloadInt32Unset, builder,
options, useDynamicMessage);
334 assertEquals(
true, builder.hasPayload());
335 assertEquals(
false, builder.getPayload().hasOptionalInt32());