31 package com.google.protobuf;
33 import static org.junit.Assert.assertArrayEquals;
39 import map_test.MapTestProto.BizarroTestMap;
40 import map_test.MapTestProto.ReservedAsMapField;
41 import map_test.MapTestProto.ReservedAsMapFieldWithEnumValue;
42 import map_test.MapTestProto.TestMap;
43 import map_test.MapTestProto.TestMap.MessageValue;
44 import map_test.MapTestProto.TestMapOrBuilder;
45 import map_test.MapTestProto.TestOnChangeEventPropagation;
46 import java.io.ByteArrayOutputStream;
47 import java.io.IOException;
48 import java.util.ArrayList;
49 import java.util.Arrays;
50 import java.util.HashMap;
51 import java.util.List;
53 import junit.framework.TestCase;
59 builder.getMutableInt32ToInt32Field().put(1, 11);
60 builder.getMutableInt32ToInt32Field().put(2, 22);
61 builder.getMutableInt32ToInt32Field().put(3, 33);
63 builder.getMutableInt32ToStringField().put(1,
"11");
64 builder.getMutableInt32ToStringField().put(2,
"22");
65 builder.getMutableInt32ToStringField().put(3,
"33");
67 builder.getMutableInt32ToBytesField().put(1,
TestUtil.toBytes(
"11"));
68 builder.getMutableInt32ToBytesField().put(2,
TestUtil.toBytes(
"22"));
69 builder.getMutableInt32ToBytesField().put(3,
TestUtil.toBytes(
"33"));
71 builder.getMutableInt32ToEnumField().put(1, TestMap.EnumValue.FOO);
72 builder.getMutableInt32ToEnumField().put(2, TestMap.EnumValue.BAR);
73 builder.getMutableInt32ToEnumField().put(3, TestMap.EnumValue.BAZ);
75 builder.getMutableInt32ToMessageField().put(
76 1, MessageValue.newBuilder().setValue(11).build());
77 builder.getMutableInt32ToMessageField().put(
78 2, MessageValue.newBuilder().setValue(22).build());
79 builder.getMutableInt32ToMessageField().put(
80 3, MessageValue.newBuilder().setValue(33).build());
82 builder.getMutableStringToInt32Field().put(
"1", 11);
83 builder.getMutableStringToInt32Field().put(
"2", 22);
84 builder.getMutableStringToInt32Field().put(
"3", 33);
89 .putInt32ToInt32Field(1, 11)
90 .putInt32ToInt32Field(2, 22)
91 .putInt32ToInt32Field(3, 33)
92 .putInt32ToStringField(1,
"11")
93 .putInt32ToStringField(2,
"22")
94 .putInt32ToStringField(3,
"33")
95 .putInt32ToBytesField(1,
TestUtil.toBytes(
"11"))
96 .putInt32ToBytesField(2,
TestUtil.toBytes(
"22"))
97 .putInt32ToBytesField(3,
TestUtil.toBytes(
"33"))
98 .putInt32ToEnumField(1, TestMap.EnumValue.FOO)
99 .putInt32ToEnumField(2, TestMap.EnumValue.BAR)
100 .putInt32ToEnumField(3, TestMap.EnumValue.BAZ)
101 .putInt32ToMessageField(1, MessageValue.newBuilder().setValue(11).build())
102 .putInt32ToMessageField(2, MessageValue.newBuilder().setValue(22).build())
103 .putInt32ToMessageField(3, MessageValue.newBuilder().setValue(33).build())
104 .putStringToInt32Field(
"1", 11)
105 .putStringToInt32Field(
"2", 22)
106 .putStringToInt32Field(
"3", 33);
110 TestMap.Builder usingMutableMapBuilder = TestMap.newBuilder();
112 TestMap usingMutableMap = usingMutableMapBuilder.build();
115 TestMap.Builder usingAccessorsBuilder = TestMap.newBuilder();
117 TestMap usingAccessors = usingAccessorsBuilder.build();
120 assertEquals(usingAccessors, usingMutableMap);
125 .putAllInt32ToInt32Field(
source.getInt32ToInt32Field())
126 .putAllInt32ToStringField(
source.getInt32ToStringField())
127 .putAllInt32ToBytesField(
source.getInt32ToBytesField())
128 .putAllInt32ToEnumField(
source.getInt32ToEnumField())
129 .putAllInt32ToMessageField(
source.getInt32ToMessageField())
130 .putAllStringToInt32Field(
source.getStringToInt32Field());
134 assertEquals(3,
message.getInt32ToInt32Field().size());
135 assertEquals(11,
message.getInt32ToInt32Field().get(1).intValue());
136 assertEquals(22,
message.getInt32ToInt32Field().get(2).intValue());
137 assertEquals(33,
message.getInt32ToInt32Field().get(3).intValue());
139 assertEquals(3,
message.getInt32ToStringField().size());
140 assertEquals(
"11",
message.getInt32ToStringField().get(1));
141 assertEquals(
"22",
message.getInt32ToStringField().get(2));
142 assertEquals(
"33",
message.getInt32ToStringField().get(3));
144 assertEquals(3,
message.getInt32ToBytesField().size());
145 assertEquals(
TestUtil.toBytes(
"11"),
message.getInt32ToBytesField().get(1));
146 assertEquals(
TestUtil.toBytes(
"22"),
message.getInt32ToBytesField().get(2));
147 assertEquals(
TestUtil.toBytes(
"33"),
message.getInt32ToBytesField().get(3));
149 assertEquals(3,
message.getInt32ToEnumField().size());
150 assertEquals(TestMap.EnumValue.FOO,
message.getInt32ToEnumField().get(1));
151 assertEquals(TestMap.EnumValue.BAR,
message.getInt32ToEnumField().get(2));
152 assertEquals(TestMap.EnumValue.BAZ,
message.getInt32ToEnumField().get(3));
154 assertEquals(3,
message.getInt32ToMessageField().size());
155 assertEquals(11,
message.getInt32ToMessageField().get(1).getValue());
156 assertEquals(22,
message.getInt32ToMessageField().get(2).getValue());
157 assertEquals(33,
message.getInt32ToMessageField().get(3).getValue());
159 assertEquals(3,
message.getStringToInt32Field().size());
160 assertEquals(11,
message.getStringToInt32Field().get(
"1").intValue());
161 assertEquals(22,
message.getStringToInt32Field().get(
"2").intValue());
162 assertEquals(33,
message.getStringToInt32Field().get(
"3").intValue());
166 builder.getMutableInt32ToInt32Field().put(1, 111);
167 builder.getMutableInt32ToInt32Field().remove(2);
168 builder.getMutableInt32ToInt32Field().put(4, 44);
170 builder.getMutableInt32ToStringField().put(1,
"111");
171 builder.getMutableInt32ToStringField().remove(2);
172 builder.getMutableInt32ToStringField().put(4,
"44");
174 builder.getMutableInt32ToBytesField().put(1,
TestUtil.toBytes(
"111"));
175 builder.getMutableInt32ToBytesField().remove(2);
176 builder.getMutableInt32ToBytesField().put(4,
TestUtil.toBytes(
"44"));
178 builder.getMutableInt32ToEnumField().put(1, TestMap.EnumValue.BAR);
179 builder.getMutableInt32ToEnumField().remove(2);
180 builder.getMutableInt32ToEnumField().put(4, TestMap.EnumValue.QUX);
182 builder.getMutableInt32ToMessageField().put(
183 1, MessageValue.newBuilder().setValue(111).build());
184 builder.getMutableInt32ToMessageField().remove(2);
185 builder.getMutableInt32ToMessageField().put(
186 4, MessageValue.newBuilder().setValue(44).build());
188 builder.getMutableStringToInt32Field().put(
"1", 111);
189 builder.getMutableStringToInt32Field().remove(
"2");
190 builder.getMutableStringToInt32Field().put(
"4", 44);
195 .putInt32ToInt32Field(1, 111)
196 .removeInt32ToInt32Field(2)
197 .putInt32ToInt32Field(4, 44)
198 .putInt32ToStringField(1,
"111")
199 .removeInt32ToStringField(2)
200 .putInt32ToStringField(4,
"44")
201 .putInt32ToBytesField(1,
TestUtil.toBytes(
"111"))
202 .removeInt32ToBytesField(2)
203 .putInt32ToBytesField(4,
TestUtil.toBytes(
"44"))
204 .putInt32ToEnumField(1, TestMap.EnumValue.BAR)
205 .removeInt32ToEnumField(2)
206 .putInt32ToEnumField(4, TestMap.EnumValue.QUX)
207 .putInt32ToMessageField(1, MessageValue.newBuilder().setValue(111).build())
208 .removeInt32ToMessageField(2)
209 .putInt32ToMessageField(4, MessageValue.newBuilder().setValue(44).build())
210 .putStringToInt32Field(
"1", 111)
211 .removeStringToInt32Field(
"2")
212 .putStringToInt32Field(
"4", 44);
216 TestMap.Builder usingMutableMapBuilder = TestMap.newBuilder();
218 TestMap usingMutableMap = usingMutableMapBuilder.build();
221 TestMap.Builder usingAccessorsBuilder = TestMap.newBuilder();
223 TestMap usingAccessors = usingAccessorsBuilder.build();
226 assertEquals(usingAccessors, usingMutableMap);
228 usingMutableMapBuilder = usingMutableMap.toBuilder();
230 usingMutableMap = usingMutableMapBuilder.build();
233 usingAccessorsBuilder = usingAccessors.toBuilder();
235 usingAccessors = usingAccessorsBuilder.build();
238 assertEquals(usingAccessors, usingMutableMap);
242 assertEquals(3,
message.getInt32ToInt32Field().size());
243 assertEquals(111,
message.getInt32ToInt32Field().get(1).intValue());
244 assertEquals(33,
message.getInt32ToInt32Field().get(3).intValue());
245 assertEquals(44,
message.getInt32ToInt32Field().get(4).intValue());
247 assertEquals(3,
message.getInt32ToStringField().size());
248 assertEquals(
"111",
message.getInt32ToStringField().get(1));
249 assertEquals(
"33",
message.getInt32ToStringField().get(3));
250 assertEquals(
"44",
message.getInt32ToStringField().get(4));
252 assertEquals(3,
message.getInt32ToBytesField().size());
253 assertEquals(
TestUtil.toBytes(
"111"),
message.getInt32ToBytesField().get(1));
254 assertEquals(
TestUtil.toBytes(
"33"),
message.getInt32ToBytesField().get(3));
255 assertEquals(
TestUtil.toBytes(
"44"),
message.getInt32ToBytesField().get(4));
257 assertEquals(3,
message.getInt32ToEnumField().size());
258 assertEquals(TestMap.EnumValue.BAR,
message.getInt32ToEnumField().get(1));
259 assertEquals(TestMap.EnumValue.BAZ,
message.getInt32ToEnumField().get(3));
260 assertEquals(TestMap.EnumValue.QUX,
message.getInt32ToEnumField().get(4));
262 assertEquals(3,
message.getInt32ToMessageField().size());
263 assertEquals(111,
message.getInt32ToMessageField().get(1).getValue());
264 assertEquals(33,
message.getInt32ToMessageField().get(3).getValue());
265 assertEquals(44,
message.getInt32ToMessageField().get(4).getValue());
267 assertEquals(3,
message.getStringToInt32Field().size());
268 assertEquals(111,
message.getStringToInt32Field().get(
"1").intValue());
269 assertEquals(33,
message.getStringToInt32Field().get(
"3").intValue());
270 assertEquals(44,
message.getStringToInt32Field().get(
"4").intValue());
274 assertEquals(0, testMapOrBuilder.getInt32ToInt32Field().size());
275 assertEquals(0, testMapOrBuilder.getInt32ToInt32FieldCount());
276 assertEquals(0, testMapOrBuilder.getInt32ToStringField().size());
277 assertEquals(0, testMapOrBuilder.getInt32ToStringFieldCount());
278 assertEquals(0, testMapOrBuilder.getInt32ToBytesField().size());
279 assertEquals(0, testMapOrBuilder.getInt32ToBytesFieldCount());
280 assertEquals(0, testMapOrBuilder.getInt32ToEnumField().size());
281 assertEquals(0, testMapOrBuilder.getInt32ToEnumFieldCount());
282 assertEquals(0, testMapOrBuilder.getInt32ToMessageField().size());
283 assertEquals(0, testMapOrBuilder.getInt32ToMessageFieldCount());
284 assertEquals(0, testMapOrBuilder.getStringToInt32Field().size());
285 assertEquals(0, testMapOrBuilder.getStringToInt32FieldCount());
289 TestMap.Builder builder = TestMap.newBuilder();
299 assertImmutable(testMapOrBuilder.getInt32ToInt32Field(), 1, 2);
300 assertImmutable(testMapOrBuilder.getInt32ToStringField(), 1,
"2");
301 assertImmutable(testMapOrBuilder.getInt32ToBytesField(), 1,
TestUtil.toBytes(
"2"));
302 assertImmutable(testMapOrBuilder.getInt32ToEnumField(), 1, TestMap.EnumValue.FOO);
304 testMapOrBuilder.getInt32ToMessageField(), 1, MessageValue.getDefaultInstance());
305 assertImmutable(testMapOrBuilder.getStringToInt32Field(),
"1", 2);
308 private <K, V>
void assertImmutable(Map<K, V>
map,
K key, V
value) {
312 }
catch (UnsupportedOperationException e) {
318 TestMap.Builder builder = TestMap.newBuilder();
319 Map<Integer, Integer> intMap = builder.getMutableInt32ToInt32Field();
321 assertEquals(
newMap(1, 2), builder.build().getInt32ToInt32Field());
325 }
catch (UnsupportedOperationException e) {
328 assertEquals(
newMap(1, 2), builder.getInt32ToInt32Field());
329 builder.getMutableInt32ToInt32Field().put(2, 3);
330 assertEquals(
newMap(1, 2, 2, 3), builder.getInt32ToInt32Field());
332 Map<Integer, TestMap.EnumValue> enumMap = builder.getMutableInt32ToEnumField();
333 enumMap.put(1, TestMap.EnumValue.BAR);
334 assertEquals(
newMap(1, TestMap.EnumValue.BAR), builder.build().getInt32ToEnumField());
336 enumMap.put(2, TestMap.EnumValue.FOO);
338 }
catch (UnsupportedOperationException e) {
341 assertEquals(
newMap(1, TestMap.EnumValue.BAR), builder.getInt32ToEnumField());
342 builder.getMutableInt32ToEnumField().put(2, TestMap.EnumValue.FOO);
344 newMap(1, TestMap.EnumValue.BAR, 2, TestMap.EnumValue.FOO),
345 builder.getInt32ToEnumField());
347 Map<Integer, String> stringMap = builder.getMutableInt32ToStringField();
348 stringMap.put(1,
"1");
349 assertEquals(
newMap(1,
"1"), builder.build().getInt32ToStringField());
351 stringMap.put(2,
"2");
353 }
catch (UnsupportedOperationException e) {
356 assertEquals(
newMap(1,
"1"), builder.getInt32ToStringField());
357 builder.putInt32ToStringField(2,
"2");
360 builder.getInt32ToStringField());
362 Map<Integer, TestMap.MessageValue> messageMap = builder.getMutableInt32ToMessageField();
363 messageMap.put(1, TestMap.MessageValue.getDefaultInstance());
364 assertEquals(
newMap(1, TestMap.MessageValue.getDefaultInstance()),
365 builder.build().getInt32ToMessageField());
367 messageMap.put(2, TestMap.MessageValue.getDefaultInstance());
369 }
catch (UnsupportedOperationException e) {
372 assertEquals(
newMap(1, TestMap.MessageValue.getDefaultInstance()),
373 builder.getInt32ToMessageField());
374 builder.putInt32ToMessageField(2, TestMap.MessageValue.getDefaultInstance());
376 newMap(1, TestMap.MessageValue.getDefaultInstance(),
377 2, TestMap.MessageValue.getDefaultInstance()),
378 builder.getInt32ToMessageField());
382 TestMap.Builder builder = TestMap.newBuilder();
383 Map<Integer, Integer> intMap = builder.getMutableInt32ToInt32Field();
385 assertEquals(
newMap(1, 2), builder.build().getInt32ToInt32Field());
389 }
catch (UnsupportedOperationException e) {
393 intMap.entrySet().remove(
new Object());
395 }
catch (UnsupportedOperationException e) {
399 intMap.entrySet().iterator().remove();
401 }
catch (UnsupportedOperationException e) {
405 intMap.keySet().remove(
new Object());
407 }
catch (UnsupportedOperationException e) {
411 intMap.values().remove(
new Object());
413 }
catch (UnsupportedOperationException e) {
417 intMap.values().iterator().remove();
419 }
catch (UnsupportedOperationException e) {
422 assertEquals(
newMap(1, 2), intMap);
423 assertEquals(
newMap(1, 2), builder.getInt32ToInt32Field());
424 assertEquals(
newMap(1, 2), builder.build().getInt32ToInt32Field());
428 TestMap.Builder builder = TestMap.newBuilder();
429 TestMap
message = builder.build();
450 TestMap.Builder sourceBuilder = TestMap.newBuilder();
452 TestMap
source = sourceBuilder.build();
455 TestMap.Builder destination = TestMap.newBuilder();
463 .putAllInt32ToEnumFieldValue(
470 TestMap destination =
471 TestMap.newBuilder().putAllInt32ToEnumFieldValue(
source.getInt32ToEnumFieldValue()).build();
473 assertEquals(0, destination.getInt32ToEnumFieldValue().get(0).intValue());
474 assertEquals(1, destination.getInt32ToEnumFieldValue().get(1).intValue());
475 assertEquals(1000, destination.getInt32ToEnumFieldValue().get(2).intValue());
476 assertEquals(3, destination.getInt32ToEnumFieldCount());
482 .putInt32ToEnumFieldValue(0, 0)
483 .putInt32ToEnumFieldValue(1, 1)
484 .putInt32ToEnumFieldValue(2, 1000)
486 assertEquals(0,
message.getInt32ToEnumFieldValueOrThrow(0));
487 assertEquals(1,
message.getInt32ToEnumFieldValueOrThrow(1));
488 assertEquals(1000,
message.getInt32ToEnumFieldValueOrThrow(2));
489 assertEquals(3,
message.getInt32ToEnumFieldCount());
493 TestMap.Builder builder = TestMap.newBuilder();
496 builder.putInt32ToStringField(1,
null);
498 }
catch (NullPointerException e) {
503 builder.putInt32ToBytesField(1,
null);
505 }
catch (NullPointerException e) {
510 builder.putInt32ToEnumField(1,
null);
512 }
catch (NullPointerException e) {
517 builder.putInt32ToMessageField(1,
null);
519 }
catch (NullPointerException e) {
524 builder.putStringToInt32Field(
null, 1);
526 }
catch (NullPointerException e) {
532 TestMap.Builder builder = TestMap.newBuilder();
534 TestMap
message = builder.build();
535 assertEquals(
message.getSerializedSize(),
message.toByteString().size());
542 assertEquals(
message.getSerializedSize(),
message.toByteString().size());
549 assertEquals(
message.getSerializedSize(),
message.toByteString().size());
555 ByteArrayOutputStream byteArrayOutputStream =
new ByteArrayOutputStream();
557 bizarroMap.writeTo(
output);
559 return TestMap.parser().parseFrom(
ByteString.copyFrom(byteArrayOutputStream.toByteArray()));
564 String stringKey =
"a string key";
568 assertEquals(0,
map.getInt32ToInt32FieldOrDefault(5, -1));
570 map =
tryParseTestMap(BizarroTestMap.newBuilder().putInt32ToStringField(stringKey, 5).build());
571 assertEquals(
"",
map.getInt32ToStringFieldOrDefault(0,
null));
573 map =
tryParseTestMap(BizarroTestMap.newBuilder().putInt32ToBytesField(stringKey, 5).build());
578 assertEquals(TestMap.EnumValue.FOO,
map.getInt32ToEnumFieldOrDefault(0,
null));
586 assertTrue(
map.getInt32ToMessageField().isEmpty());
591 BizarroTestMap.newBuilder().putStringToInt32Field(stringKey,
bytes).build());
592 assertEquals(0,
map.getStringToInt32FieldOrDefault(stringKey, -1));
596 TestMap.Builder builder = TestMap.newBuilder();
598 TestMap
message = builder.build();
600 TestMap.Builder other = TestMap.newBuilder();
613 .putInt32ToInt32Field(1, 2)
614 .putInt32ToInt32Field(3, 4)
615 .putInt32ToInt32Field(5, 6)
620 .putInt32ToInt32Field(5, 6)
621 .putInt32ToInt32Field(1, 2)
622 .putInt32ToInt32Field(3, 4);
623 TestMap m2 = b2.build();
625 assertEquals(m1, m2);
626 assertEquals(m1.hashCode(), m2.hashCode());
629 b2.putInt32ToInt32Field(1, 0);
631 assertFalse(m1.equals(m2));
637 b2.removeInt32ToInt32Field(1);
639 assertFalse(m1.equals(m2));
640 assertFalse(m2.equals(m1));
644 TestOnChangeEventPropagation.Builder parent = TestOnChangeEventPropagation.newBuilder();
645 parent.getOptionalMessageBuilder().putInt32ToInt32Field(1, 2);
646 TestOnChangeEventPropagation
message = parent.build();
647 assertEquals(2,
message.getOptionalMessage().getInt32ToInt32Field().get(1).intValue());
650 parent.getOptionalMessageBuilder().putInt32ToInt32Field(1, 3);
654 assertEquals(3,
message.getOptionalMessage().getInt32ToInt32Field().get(1).intValue());
657 TestMap other = TestMap.newBuilder().putInt32ToInt32Field(1, 4).build();
658 parent.getOptionalMessageBuilder().mergeFrom(other);
662 assertEquals(4,
message.getOptionalMessage().getInt32ToInt32Field().get(1).intValue());
665 parent.getOptionalMessageBuilder().clear();
669 assertEquals(0,
message.getOptionalMessage().getInt32ToInt32Field().size());
675 TestOnChangeEventPropagation.Builder parentBuilder = TestOnChangeEventPropagation.newBuilder();
676 TestMap.Builder testMapBuilder = parentBuilder.getOptionalMessageBuilder();
679 TestMap.Builder entryBuilder = TestMap.newBuilder().putInt32ToInt32Field(1, 1);
682 testMapBuilder.addRepeatedField(intMapField, entryBuilder.getRepeatedField(intMapField, 0));
685 TestOnChangeEventPropagation
message = parentBuilder.build();
686 assertEquals(1,
message.getOptionalMessage().getInt32ToInt32Field().size());
689 entryBuilder.putInt32ToInt32Field(1, 4);
690 testMapBuilder = parentBuilder.getOptionalMessageBuilder();
691 testMapBuilder.setRepeatedField(intMapField, 0, entryBuilder.getRepeatedField(intMapField, 0));
694 message = parentBuilder.build();
695 assertEquals(4,
message.getOptionalMessage().getInt32ToInt32Field().get(1).intValue());
698 testMapBuilder = parentBuilder.getOptionalMessageBuilder();
699 testMapBuilder.clearField(intMapField);
702 message = parentBuilder.build();
703 assertEquals(0,
message.getOptionalMessage().getInt32ToInt32Field().size());
709 return TestMap.getDescriptor().findFieldByName(
name);
726 for (Object entry : (List<?>)
message.getField(
field)) {
746 FieldDescriptor keyField = entryBuilder.getDescriptorForType().findFieldByName(
"key");
747 FieldDescriptor valueField = entryBuilder.getDescriptorForType().findFieldByName(
"value");
748 entryBuilder.setField(keyField,
key);
749 entryBuilder.setField(valueField,
value);
750 return entryBuilder.build();
754 List<Message> entryList =
new ArrayList<>();
755 for (
Map.Entry<?, ?> entry :
values.entrySet()) {
756 entryList.add(
newMapEntry(builder,
name, entry.getKey(), entry.getValue()));
759 builder.setField(
field, entryList);
762 private static <K, V> Map<K, V>
mapForValues(
K key1, V value1,
K key2, V value2) {
763 Map<K, V>
map =
new HashMap<>();
764 map.put(key1, value1);
765 map.put(key2, value2);
771 TestMap.Builder builder =
773 .putInt32ToInt32Field(1, 2)
774 .putInt32ToInt32Field(3, 4)
775 .putInt32ToMessageField(11, MessageValue.newBuilder().setValue(22).build())
776 .putInt32ToMessageField(33, MessageValue.newBuilder().setValue(44).build());
777 TestMap
message = builder.build();
783 "int32_to_message_field",
785 11, MessageValue.newBuilder().setValue(22).build(),
786 33, MessageValue.newBuilder().setValue(44).build()));
789 builder.clearField(
f(
"int32_to_int32_field"));
790 builder.clearField(
f(
"int32_to_message_field"));
792 assertEquals(0,
message.getInt32ToInt32Field().size());
793 assertEquals(0,
message.getInt32ToMessageField().size());
799 "int32_to_message_field",
801 111, MessageValue.newBuilder().setValue(222).build(),
802 333, MessageValue.newBuilder().setValue(444).build()));
804 assertEquals(22,
message.getInt32ToInt32Field().get(11).intValue());
805 assertEquals(44,
message.getInt32ToInt32Field().get(33).intValue());
806 assertEquals(222,
message.getInt32ToMessageField().get(111).getValue());
807 assertEquals(444,
message.getInt32ToMessageField().get(333).getValue());
810 builder.addRepeatedField(
811 f(
"int32_to_int32_field"),
newMapEntry(builder,
"int32_to_int32_field", 55, 66));
812 builder.addRepeatedField(
813 f(
"int32_to_message_field"),
816 "int32_to_message_field",
818 MessageValue.newBuilder().setValue(666).build()));
820 assertEquals(66,
message.getInt32ToInt32Field().get(55).intValue());
821 assertEquals(666,
message.getInt32ToMessageField().get(555).getValue());
824 builder.addRepeatedField(
825 f(
"int32_to_int32_field"),
newMapEntry(builder,
"int32_to_int32_field", 55, 55));
826 builder.addRepeatedField(
827 f(
"int32_to_message_field"),
830 "int32_to_message_field",
832 MessageValue.newBuilder().setValue(555).build()));
834 assertEquals(55,
message.getInt32ToInt32Field().get(55).intValue());
835 assertEquals(555,
message.getInt32ToMessageField().get(555).getValue());
838 for (
int i = 0;
i < builder.getRepeatedFieldCount(
f(
"int32_to_int32_field"));
i++) {
846 builder.setRepeatedField(
f(
"int32_to_int32_field"),
i, mapEntryBuilder.build());
849 assertEquals(11,
message.getInt32ToInt32Field().get(22).intValue());
850 assertEquals(33,
message.getInt32ToInt32Field().get(44).intValue());
851 assertEquals(55,
message.getInt32ToInt32Field().get(55).intValue());
856 TestMap.Builder builder = TestMap.newBuilder();
858 TestMap
message = builder.build();
862 builder = TestMap.newBuilder();
870 TestMap.Builder builder = TestMap.newBuilder();
872 TestMap
message = builder.build();
878 assertEquals(
message, dynamicMessage);
919 assertEquals(m1, m2);
923 b2.setRepeatedField(
field, 0,
newMapEntry(b1,
"int32_to_int32_field", 0, 0));
925 assertFalse(m1.
equals(m2));
931 TestMap.Builder builder =
933 .putAllInt32ToEnumFieldValue(
938 TestMap
message = builder.build();
940 assertEquals(TestMap.EnumValue.FOO,
message.getInt32ToEnumField().get(0));
941 assertEquals(TestMap.EnumValue.BAR,
message.getInt32ToEnumField().get(1));
942 assertEquals(TestMap.EnumValue.UNRECOGNIZED,
message.getInt32ToEnumField().get(2));
943 assertEquals(1000,
message.getInt32ToEnumFieldValue().get(2).intValue());
950 assertEquals(1000,
message.getInt32ToEnumFieldValue().get(2).intValue());
952 assertEquals(1000, builder.getInt32ToEnumFieldValue().get(2).intValue());
953 builder = TestMap.newBuilder().mergeFrom(
message);
954 assertEquals(1000, builder.getInt32ToEnumFieldValue().get(2).intValue());
957 builder.putAllInt32ToEnumFieldValue(
newMap(2, 1001));
958 TestMap message2 = builder.build();
959 assertFalse(
message.hashCode() == message2.hashCode());
960 assertFalse(
message.equals(message2));
963 assertEquals(message2.getInt32ToEnumField(),
message.getInt32ToEnumField());
968 EnumDescriptor enumDescriptor = TestMap.EnumValue.getDescriptor();
971 Map<Integer, Integer>
data =
977 TestMap.Builder builder = TestMap.newBuilder().putAllInt32ToEnumFieldValue(
data);
980 for (
int i = 0;
i < builder.getRepeatedFieldCount(
field);
i++) {
989 builder.setRepeatedField(
field,
i, mapEntryBuilder.build());
993 TestMap
message = builder.build();
994 for (
Map.Entry<Integer, Integer> entry :
message.getInt32ToEnumFieldValue().entrySet()) {
995 assertEquals(
data.get(entry.getKey()) + 1, entry.getValue().intValue());
1000 TestMap.Builder builder = TestMap.newBuilder();
1002 TestMap
message = builder.build();
1005 Arrays.asList(
"1",
"2",
"3"),
new ArrayList<>(
message.getStringToInt32Field().keySet()));
1009 TestMap.Builder builder = TestMap.newBuilder();
1011 TestMap
message = builder.build();
1012 assertEquals(
message.getStringToInt32Field(),
message.getStringToInt32FieldMap());
1013 assertEquals(
message.getInt32ToBytesField(),
message.getInt32ToBytesFieldMap());
1014 assertEquals(
message.getInt32ToEnumField(),
message.getInt32ToEnumFieldMap());
1015 assertEquals(
message.getInt32ToEnumFieldValue(),
message.getInt32ToEnumFieldValueMap());
1016 assertEquals(
message.getInt32ToMessageField(),
message.getInt32ToMessageFieldMap());
1020 TestMap.Builder builder = TestMap.newBuilder();
1027 assertTrue(testMapOrBuilder.containsInt32ToInt32Field(1));
1028 assertTrue(testMapOrBuilder.containsInt32ToInt32Field(2));
1029 assertTrue(testMapOrBuilder.containsInt32ToInt32Field(3));
1030 assertFalse(testMapOrBuilder.containsInt32ToInt32Field(-1));
1032 assertTrue(testMapOrBuilder.containsInt32ToStringField(1));
1033 assertTrue(testMapOrBuilder.containsInt32ToStringField(2));
1034 assertTrue(testMapOrBuilder.containsInt32ToStringField(3));
1035 assertFalse(testMapOrBuilder.containsInt32ToStringField(-1));
1037 assertTrue(testMapOrBuilder.containsInt32ToBytesField(1));
1038 assertTrue(testMapOrBuilder.containsInt32ToBytesField(2));
1039 assertTrue(testMapOrBuilder.containsInt32ToBytesField(3));
1040 assertFalse(testMapOrBuilder.containsInt32ToBytesField(-1));
1042 assertTrue(testMapOrBuilder.containsInt32ToEnumField(1));
1043 assertTrue(testMapOrBuilder.containsInt32ToEnumField(2));
1044 assertTrue(testMapOrBuilder.containsInt32ToEnumField(3));
1045 assertFalse(testMapOrBuilder.containsInt32ToEnumField(-1));
1047 assertTrue(testMapOrBuilder.containsInt32ToMessageField(1));
1048 assertTrue(testMapOrBuilder.containsInt32ToMessageField(2));
1049 assertTrue(testMapOrBuilder.containsInt32ToMessageField(3));
1050 assertFalse(testMapOrBuilder.containsInt32ToMessageField(-1));
1052 assertTrue(testMapOrBuilder.containsStringToInt32Field(
"1"));
1053 assertTrue(testMapOrBuilder.containsStringToInt32Field(
"2"));
1054 assertTrue(testMapOrBuilder.containsStringToInt32Field(
"3"));
1055 assertFalse(testMapOrBuilder.containsStringToInt32Field(
"-1"));
1059 TestMap.Builder builder = TestMap.newBuilder();
1065 TestMap
message = builder.build();
1068 builder =
message.toBuilder().putInt32ToInt32Field(4, 44);
1069 assertEquals(4, builder.getInt32ToInt32FieldCount());
1070 assertEquals(4, builder.build().getInt32ToInt32FieldCount());
1073 builder.putInt32ToInt32Field(4, 44);
1074 assertEquals(4, builder.getInt32ToInt32FieldCount());
1078 assertEquals(expectedCount, testMapOrBuilder.getInt32ToInt32FieldCount());
1079 assertEquals(expectedCount, testMapOrBuilder.getInt32ToStringFieldCount());
1080 assertEquals(expectedCount, testMapOrBuilder.getInt32ToBytesFieldCount());
1081 assertEquals(expectedCount, testMapOrBuilder.getInt32ToEnumFieldCount());
1082 assertEquals(expectedCount, testMapOrBuilder.getInt32ToMessageFieldCount());
1083 assertEquals(expectedCount, testMapOrBuilder.getStringToInt32FieldCount());
1087 TestMap.Builder builder = TestMap.newBuilder();
1095 assertEquals(11, testMapOrBuilder.getInt32ToInt32FieldOrDefault(1, -11));
1096 assertEquals(-11, testMapOrBuilder.getInt32ToInt32FieldOrDefault(-1, -11));
1098 assertEquals(
"11", testMapOrBuilder.getInt32ToStringFieldOrDefault(1,
"-11"));
1099 assertNull(
"-11", testMapOrBuilder.getInt32ToStringFieldOrDefault(-1,
null));
1101 assertEquals(
TestUtil.toBytes(
"11"), testMapOrBuilder.getInt32ToBytesFieldOrDefault(1,
null));
1102 assertNull(testMapOrBuilder.getInt32ToBytesFieldOrDefault(-1,
null));
1104 assertEquals(TestMap.EnumValue.FOO, testMapOrBuilder.getInt32ToEnumFieldOrDefault(1,
null));
1105 assertNull(testMapOrBuilder.getInt32ToEnumFieldOrDefault(-1,
null));
1108 TestMap.EnumValue.BAR.getNumber(),
1109 testMapOrBuilder.getInt32ToEnumFieldValueOrDefault(2, -1));
1110 assertEquals(-1, testMapOrBuilder.getInt32ToEnumFieldValueOrDefault(-1000, -1));
1113 MessageValue.newBuilder().setValue(11).build(),
1114 testMapOrBuilder.getInt32ToMessageFieldOrDefault(1,
null));
1115 assertNull(testMapOrBuilder.getInt32ToMessageFieldOrDefault(-1,
null));
1117 assertEquals(11, testMapOrBuilder.getStringToInt32FieldOrDefault(
"1", -11));
1118 assertEquals(-11, testMapOrBuilder.getStringToInt32FieldOrDefault(
"-1", -11));
1121 testMapOrBuilder.getStringToInt32FieldOrDefault(
null, -11);
1123 }
catch (NullPointerException e) {
1129 TestMap.Builder builder = TestMap.newBuilder();
1137 assertEquals(11, testMapOrBuilder.getInt32ToInt32FieldOrThrow(1));
1139 testMapOrBuilder.getInt32ToInt32FieldOrThrow(-1);
1141 }
catch (IllegalArgumentException e) {
1145 assertEquals(
"11", testMapOrBuilder.getInt32ToStringFieldOrThrow(1));
1148 testMapOrBuilder.getInt32ToStringFieldOrThrow(-1);
1150 }
catch (IllegalArgumentException e) {
1154 assertEquals(
TestUtil.toBytes(
"11"), testMapOrBuilder.getInt32ToBytesFieldOrThrow(1));
1157 testMapOrBuilder.getInt32ToBytesFieldOrThrow(-1);
1159 }
catch (IllegalArgumentException e) {
1163 assertEquals(TestMap.EnumValue.FOO, testMapOrBuilder.getInt32ToEnumFieldOrThrow(1));
1165 testMapOrBuilder.getInt32ToEnumFieldOrThrow(-1);
1167 }
catch (IllegalArgumentException e) {
1172 TestMap.EnumValue.BAR.getNumber(), testMapOrBuilder.getInt32ToEnumFieldValueOrThrow(2));
1174 testMapOrBuilder.getInt32ToEnumFieldValueOrThrow(-1);
1176 }
catch (IllegalArgumentException e) {
1181 MessageValue.newBuilder().setValue(11).build(),
1182 testMapOrBuilder.getInt32ToMessageFieldOrThrow(1));
1184 testMapOrBuilder.getInt32ToMessageFieldOrThrow(-1);
1186 }
catch (IllegalArgumentException e) {
1190 assertEquals(11, testMapOrBuilder.getStringToInt32FieldOrThrow(
"1"));
1192 testMapOrBuilder.getStringToInt32FieldOrThrow(
"-1");
1194 }
catch (IllegalArgumentException e) {
1199 testMapOrBuilder.getStringToInt32FieldOrThrow(
null);
1201 }
catch (NullPointerException e) {
1207 TestMap.Builder builder = TestMap.newBuilder();
1208 builder.putInt32ToInt32Field(1, 11);
1209 assertEquals(11, builder.getInt32ToInt32FieldOrThrow(1));
1211 builder.putInt32ToStringField(1,
"a");
1212 assertEquals(
"a", builder.getInt32ToStringFieldOrThrow(1));
1214 builder.putInt32ToStringField(1,
null);
1216 }
catch (NullPointerException e) {
1220 builder.putInt32ToBytesField(1,
TestUtil.toBytes(
"11"));
1221 assertEquals(
TestUtil.toBytes(
"11"), builder.getInt32ToBytesFieldOrThrow(1));
1223 builder.putInt32ToBytesField(1,
null);
1225 }
catch (NullPointerException e) {
1229 builder.putInt32ToEnumField(1, TestMap.EnumValue.FOO);
1230 assertEquals(TestMap.EnumValue.FOO, builder.getInt32ToEnumFieldOrThrow(1));
1232 builder.putInt32ToEnumField(1,
null);
1234 }
catch (NullPointerException e) {
1238 builder.putInt32ToEnumFieldValue(1, TestMap.EnumValue.BAR.getNumber());
1239 assertEquals(TestMap.EnumValue.BAR.getNumber(), builder.getInt32ToEnumFieldValueOrThrow(1));
1240 builder.putInt32ToEnumFieldValue(1, -1);
1241 assertEquals(-1, builder.getInt32ToEnumFieldValueOrThrow(1));
1242 assertEquals(TestMap.EnumValue.UNRECOGNIZED, builder.getInt32ToEnumFieldOrThrow(1));
1244 builder.putStringToInt32Field(
"a", 1);
1245 assertEquals(1, builder.getStringToInt32FieldOrThrow(
"a"));
1247 builder.putStringToInt32Field(
null, -1);
1248 }
catch (NullPointerException e) {
1254 TestMap.Builder builder = TestMap.newBuilder();
1256 assertEquals(11, builder.getInt32ToInt32FieldOrThrow(1));
1257 for (
int times = 0; times < 2; times++) {
1258 builder.removeInt32ToInt32Field(1);
1259 assertEquals(-1, builder.getInt32ToInt32FieldOrDefault(1, -1));
1262 assertEquals(
"11", builder.getInt32ToStringFieldOrThrow(1));
1263 for (
int times = 0; times < 2; times++) {
1264 builder.removeInt32ToStringField(1);
1265 assertNull(builder.getInt32ToStringFieldOrDefault(1,
null));
1268 assertEquals(
TestUtil.toBytes(
"11"), builder.getInt32ToBytesFieldOrThrow(1));
1269 for (
int times = 0; times < 2; times++) {
1270 builder.removeInt32ToBytesField(1);
1271 assertNull(builder.getInt32ToBytesFieldOrDefault(1,
null));
1274 assertEquals(TestMap.EnumValue.FOO, builder.getInt32ToEnumFieldOrThrow(1));
1275 for (
int times = 0; times < 2; times++) {
1276 builder.removeInt32ToEnumField(1);
1277 assertNull(builder.getInt32ToEnumFieldOrDefault(1,
null));
1280 assertEquals(11, builder.getStringToInt32FieldOrThrow(
"1"));
1281 for (
int times = 0; times < 2; times++) {
1282 builder.removeStringToInt32Field(
"1");
1283 assertEquals(-1, builder.getStringToInt32FieldOrDefault(
"1", -1));
1287 builder.removeStringToInt32Field(
null);
1289 }
catch (NullPointerException e) {
1295 ReservedAsMapField.newBuilder().build();
1296 ReservedAsMapFieldWithEnumValue.newBuilder().build();
1300 TestMap.Builder builder = TestMap.newBuilder();
1302 builder.putInt32ToInt32Field(5, 1);
1303 builder.putInt32ToInt32Field(1, 1);
1304 builder.putInt32ToInt32Field(4, 1);
1305 builder.putInt32ToInt32Field(-2, 1);
1306 builder.putInt32ToInt32Field(0, 1);
1309 builder.putUint32ToInt32Field(5, 1);
1310 builder.putUint32ToInt32Field(1, 1);
1311 builder.putUint32ToInt32Field(4, 1);
1312 builder.putUint32ToInt32Field(-2, 1);
1313 builder.putUint32ToInt32Field(0, 1);
1316 builder.putInt64ToInt32Field(5L, 1);
1317 builder.putInt64ToInt32Field(1L, 1);
1318 builder.putInt64ToInt32Field(4L, 1);
1319 builder.putInt64ToInt32Field(-2L, 1);
1320 builder.putInt64ToInt32Field(0L, 1);
1323 builder.putStringToInt32Field(
"baz", 1);
1324 builder.putStringToInt32Field(
"foo", 1);
1325 builder.putStringToInt32Field(
"bar", 1);
1326 builder.putStringToInt32Field(
"", 1);
1327 builder.putStringToInt32Field(
"hello", 1);
1328 builder.putStringToInt32Field(
"world", 1);
1330 TestMap
message = builder.build();
1331 byte[] serialized =
new byte[
message.getSerializedSize()];
1333 output.useDeterministicSerialization();
1338 List<Integer> int32Keys =
new ArrayList<>();
1339 List<Integer> uint32Keys =
new ArrayList<>();
1340 List<Long> int64Keys =
new ArrayList<>();
1341 List<String> stringKeys =
new ArrayList<>();
1344 tag =
input.readTag();
1351 case TestMap.STRING_TO_INT32_FIELD_FIELD_NUMBER:
1354 case TestMap.INT32_TO_INT32_FIELD_FIELD_NUMBER:
1357 case TestMap.UINT32_TO_INT32_FIELD_FIELD_NUMBER:
1360 case TestMap.INT64_TO_INT32_FIELD_FIELD_NUMBER:
1364 fail(
"Unexpected fields.");
1366 input.popLimit(oldLimit);
1368 assertEquals(Arrays.asList(-2, 0, 1, 4, 5), int32Keys);
1369 assertEquals(Arrays.asList(-2, 0, 1, 4, 5), uint32Keys);
1370 assertEquals(Arrays.asList(-2L, 0L, 1L, 4L, 5L), int64Keys);
1371 assertEquals(Arrays.asList(
"",
"bar",
"baz",
"foo",
"hello",
"world"), stringKeys);
1376 TestMap.getDescriptor().findFieldByNumber(TestMap.INT32_TO_MESSAGE_FIELD_FIELD_NUMBER);
1386 .
setField(valueField, TestMap.MessageValue.newBuilder().setValue(10).build())
1391 TestMap.MessageValue.newBuilder().setValue(10).build(),
1392 message.getInt32ToMessageFieldMap().get(10));
1397 TestMap.getDescriptor().findFieldByNumber(TestMap.INT32_TO_MESSAGE_FIELD_FIELD_NUMBER);
1411 TestMap.MessageValue.getDescriptor().findFieldByName(
"value"), 10)
1417 TestMap.MessageValue.newBuilder().setValue(10).build(),
1418 message.getInt32ToMessageFieldMap().get(10));
1422 int tag =
input.readTag();
1424 int ret =
input.readInt32();
1427 assertTrue(
input.isAtEnd());
1432 int tag =
input.readTag();
1434 long ret =
input.readInt64();
1437 assertTrue(
input.isAtEnd());
1442 int tag =
input.readTag();
1444 String ret =
input.readString();
1447 assertTrue(
input.isAtEnd());
1451 private static <K, V> Map<K, V>
newMap(
K key1, V value1) {
1452 Map<K, V>
map =
new HashMap<>();
1453 map.put(key1, value1);
1457 private static <K, V> Map<K, V>
newMap(
K key1, V value1,
K key2, V value2) {
1458 Map<K, V>
map =
new HashMap<>();
1459 map.put(key1, value1);
1460 map.put(key2, value2);
1464 private static <K, V> Map<K, V>
newMap(
K key1, V value1,
K key2, V value2,
K key3, V value3) {
1465 Map<K, V>
map =
new HashMap<>();
1466 map.put(key1, value1);
1467 map.put(key2, value2);
1468 map.put(key3, value3);
1473 TestMap.Builder builder = TestMap.newBuilder();
1476 builder.putStringToInt32Field(
null, 3);
1478 }
catch (NullPointerException expected) {
1482 builder.putAllStringToInt32Field(
newMap(
null, 3,
"hi", 4));
1484 }
catch (NullPointerException expected) {
1488 builder.putInt32ToMessageField(3,
null);
1490 }
catch (NullPointerException expected) {
1494 builder.putAllInt32ToMessageField(
MapTest.<Integer, MessageValue>
newMap(4,
null, 5,
null));
1496 }
catch (NullPointerException expected) {
1500 builder.putAllInt32ToMessageField(
null);
1502 }
catch (NullPointerException expected) {
1505 assertArrayEquals(
new byte[0], builder.build().toByteArray());