Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(69)

Side by Side Diff: third_party/protobuf/java/core/src/test/java/com/google/protobuf/MapForProto2Test.java

Issue 2590803003: Revert "third_party/protobuf: Update to HEAD (83d681ee2c)" (Closed)
Patch Set: Created 3 years, 12 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Protocol Buffers - Google's data interchange format 1 // Protocol Buffers - Google's data interchange format
2 // Copyright 2008 Google Inc. All rights reserved. 2 // Copyright 2008 Google Inc. All rights reserved.
3 // https://developers.google.com/protocol-buffers/ 3 // https://developers.google.com/protocol-buffers/
4 // 4 //
5 // Redistribution and use in source and binary forms, with or without 5 // Redistribution and use in source and binary forms, with or without
6 // modification, are permitted provided that the following conditions are 6 // modification, are permitted provided that the following conditions are
7 // met: 7 // met:
8 // 8 //
9 // * Redistributions of source code must retain the above copyright 9 // * Redistributions of source code must retain the above copyright
10 // notice, this list of conditions and the following disclaimer. 10 // notice, this list of conditions and the following disclaimer.
(...skipping 13 matching lines...) Expand all
24 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 30
31 package com.google.protobuf; 31 package com.google.protobuf;
32 32
33 import com.google.protobuf.Descriptors.FieldDescriptor; 33 import com.google.protobuf.Descriptors.FieldDescriptor;
34 import map_test.MapForProto2TestProto.BizarroTestMap;
35 import map_test.MapForProto2TestProto.ReservedAsMapField;
36 import map_test.MapForProto2TestProto.ReservedAsMapFieldWithEnumValue;
37 import map_test.MapForProto2TestProto.TestMap; 34 import map_test.MapForProto2TestProto.TestMap;
38 import map_test.MapForProto2TestProto.TestMap.MessageValue; 35 import map_test.MapForProto2TestProto.TestMap.MessageValue;
39 import map_test.MapForProto2TestProto.TestMap.MessageWithRequiredFields; 36 import map_test.MapForProto2TestProto.TestMap.MessageWithRequiredFields;
40 import map_test.MapForProto2TestProto.TestMapOrBuilder;
41 import map_test.MapForProto2TestProto.TestRecursiveMap; 37 import map_test.MapForProto2TestProto.TestRecursiveMap;
42 import map_test.MapForProto2TestProto.TestUnknownEnumValue; 38 import map_test.MapForProto2TestProto.TestUnknownEnumValue;
43 import java.io.ByteArrayOutputStream; 39 import junit.framework.TestCase;
44 import java.io.IOException; 40
45 import java.util.ArrayList; 41 import java.util.ArrayList;
46 import java.util.Arrays; 42 import java.util.Arrays;
47 import java.util.HashMap; 43 import java.util.HashMap;
48 import java.util.List; 44 import java.util.List;
49 import java.util.Map; 45 import java.util.Map;
50 import junit.framework.TestCase;
51 46
52 /** 47 /**
53 * Unit tests for map fields in proto2 protos. 48 * Unit tests for map fields in proto2 protos.
54 */ 49 */
55 public class MapForProto2Test extends TestCase { 50 public class MapForProto2Test extends TestCase {
56 51 private void setMapValues(TestMap.Builder builder) {
57 private void setMapValuesUsingMutableMap(TestMap.Builder builder) {
58 builder.getMutableInt32ToInt32Field().put(1, 11); 52 builder.getMutableInt32ToInt32Field().put(1, 11);
59 builder.getMutableInt32ToInt32Field().put(2, 22); 53 builder.getMutableInt32ToInt32Field().put(2, 22);
60 builder.getMutableInt32ToInt32Field().put(3, 33); 54 builder.getMutableInt32ToInt32Field().put(3, 33);
61 // 55
62 builder.getMutableInt32ToStringField().put(1, "11"); 56 builder.getMutableInt32ToStringField().put(1, "11");
63 builder.getMutableInt32ToStringField().put(2, "22"); 57 builder.getMutableInt32ToStringField().put(2, "22");
64 builder.getMutableInt32ToStringField().put(3, "33"); 58 builder.getMutableInt32ToStringField().put(3, "33");
65 // 59
66 builder.getMutableInt32ToBytesField().put(1, TestUtil.toBytes("11")); 60 builder.getMutableInt32ToBytesField().put(1, TestUtil.toBytes("11"));
67 builder.getMutableInt32ToBytesField().put(2, TestUtil.toBytes("22")); 61 builder.getMutableInt32ToBytesField().put(2, TestUtil.toBytes("22"));
68 builder.getMutableInt32ToBytesField().put(3, TestUtil.toBytes("33")); 62 builder.getMutableInt32ToBytesField().put(3, TestUtil.toBytes("33"));
69 // 63
70 builder.getMutableInt32ToEnumField().put(1, TestMap.EnumValue.FOO); 64 builder.getMutableInt32ToEnumField().put(1, TestMap.EnumValue.FOO);
71 builder.getMutableInt32ToEnumField().put(2, TestMap.EnumValue.BAR); 65 builder.getMutableInt32ToEnumField().put(2, TestMap.EnumValue.BAR);
72 builder.getMutableInt32ToEnumField().put(3, TestMap.EnumValue.BAZ); 66 builder.getMutableInt32ToEnumField().put(3, TestMap.EnumValue.BAZ);
73 // 67
74 builder.getMutableInt32ToMessageField().put( 68 builder.getMutableInt32ToMessageField().put(
75 1, MessageValue.newBuilder().setValue(11).build()); 69 1, MessageValue.newBuilder().setValue(11).build());
76 builder.getMutableInt32ToMessageField().put( 70 builder.getMutableInt32ToMessageField().put(
77 2, MessageValue.newBuilder().setValue(22).build()); 71 2, MessageValue.newBuilder().setValue(22).build());
78 builder.getMutableInt32ToMessageField().put( 72 builder.getMutableInt32ToMessageField().put(
79 3, MessageValue.newBuilder().setValue(33).build()); 73 3, MessageValue.newBuilder().setValue(33).build());
80 // 74
81 builder.getMutableStringToInt32Field().put("1", 11); 75 builder.getMutableStringToInt32Field().put("1", 11);
82 builder.getMutableStringToInt32Field().put("2", 22); 76 builder.getMutableStringToInt32Field().put("2", 22);
83 builder.getMutableStringToInt32Field().put("3", 33); 77 builder.getMutableStringToInt32Field().put("3", 33);
84 } 78 }
85 79
86 private void setMapValuesUsingAccessors(TestMap.Builder builder) {
87 builder
88 .putInt32ToInt32Field(1, 11)
89 .putInt32ToInt32Field(2, 22)
90 .putInt32ToInt32Field(3, 33)
91
92 .putInt32ToStringField(1, "11")
93 .putInt32ToStringField(2, "22")
94 .putInt32ToStringField(3, "33")
95
96 .putInt32ToBytesField(1, TestUtil.toBytes("11"))
97 .putInt32ToBytesField(2, TestUtil.toBytes("22"))
98 .putInt32ToBytesField(3, TestUtil.toBytes("33"))
99
100 .putInt32ToEnumField(1, TestMap.EnumValue.FOO)
101 .putInt32ToEnumField(2, TestMap.EnumValue.BAR)
102 .putInt32ToEnumField(3, TestMap.EnumValue.BAZ)
103
104 .putInt32ToMessageField(1, MessageValue.newBuilder().setValue(11).build( ))
105 .putInt32ToMessageField(2, MessageValue.newBuilder().setValue(22).build( ))
106 .putInt32ToMessageField(3, MessageValue.newBuilder().setValue(33).build( ))
107
108 .putStringToInt32Field("1", 11)
109 .putStringToInt32Field("2", 22)
110 .putStringToInt32Field("3", 33);
111 }
112
113 public void testSetMapValues() {
114 TestMap.Builder usingMutableMapBuilder = TestMap.newBuilder();
115 setMapValuesUsingMutableMap(usingMutableMapBuilder);
116 TestMap usingMutableMap = usingMutableMapBuilder.build();
117 assertMapValuesSet(usingMutableMap);
118
119 TestMap.Builder usingAccessorsBuilder = TestMap.newBuilder();
120 setMapValuesUsingAccessors(usingAccessorsBuilder);
121 TestMap usingAccessors = usingAccessorsBuilder.build();
122 assertMapValuesSet(usingAccessors);
123
124 assertEquals(usingAccessors, usingMutableMap);
125 }
126
127 private void copyMapValues(TestMap source, TestMap.Builder destination) { 80 private void copyMapValues(TestMap source, TestMap.Builder destination) {
128 destination 81 destination
129 .putAllInt32ToInt32Field(source.getInt32ToInt32Field()) 82 .putAllInt32ToInt32Field(source.getInt32ToInt32Field())
130 .putAllInt32ToStringField(source.getInt32ToStringField()) 83 .putAllInt32ToStringField(source.getInt32ToStringField())
131 .putAllInt32ToBytesField(source.getInt32ToBytesField()) 84 .putAllInt32ToBytesField(source.getInt32ToBytesField())
132 .putAllInt32ToEnumField(source.getInt32ToEnumField()) 85 .putAllInt32ToEnumField(source.getInt32ToEnumField())
133 .putAllInt32ToMessageField(source.getInt32ToMessageField()) 86 .putAllInt32ToMessageField(source.getInt32ToMessageField())
134 .putAllStringToInt32Field(source.getStringToInt32Field()); 87 .putAllStringToInt32Field(source.getStringToInt32Field());
135 } 88 }
136 89
137 private void assertMapValuesSet(TestMapOrBuilder message) { 90 private void assertMapValuesSet(TestMap message) {
138 assertEquals(3, message.getInt32ToInt32Field().size()); 91 assertEquals(3, message.getInt32ToInt32Field().size());
139 assertEquals(11, message.getInt32ToInt32Field().get(1).intValue()); 92 assertEquals(11, message.getInt32ToInt32Field().get(1).intValue());
140 assertEquals(22, message.getInt32ToInt32Field().get(2).intValue()); 93 assertEquals(22, message.getInt32ToInt32Field().get(2).intValue());
141 assertEquals(33, message.getInt32ToInt32Field().get(3).intValue()); 94 assertEquals(33, message.getInt32ToInt32Field().get(3).intValue());
142 95
143 assertEquals(3, message.getInt32ToStringField().size()); 96 assertEquals(3, message.getInt32ToStringField().size());
144 assertEquals("11", message.getInt32ToStringField().get(1)); 97 assertEquals("11", message.getInt32ToStringField().get(1));
145 assertEquals("22", message.getInt32ToStringField().get(2)); 98 assertEquals("22", message.getInt32ToStringField().get(2));
146 assertEquals("33", message.getInt32ToStringField().get(3)); 99 assertEquals("33", message.getInt32ToStringField().get(3));
147 100
148 assertEquals(3, message.getInt32ToBytesField().size()); 101 assertEquals(3, message.getInt32ToBytesField().size());
149 assertEquals(TestUtil.toBytes("11"), message.getInt32ToBytesField().get(1)); 102 assertEquals(TestUtil.toBytes("11"), message.getInt32ToBytesField().get(1));
150 assertEquals(TestUtil.toBytes("22"), message.getInt32ToBytesField().get(2)); 103 assertEquals(TestUtil.toBytes("22"), message.getInt32ToBytesField().get(2));
151 assertEquals(TestUtil.toBytes("33"), message.getInt32ToBytesField().get(3)); 104 assertEquals(TestUtil.toBytes("33"), message.getInt32ToBytesField().get(3));
152 105
153 assertEquals(3, message.getInt32ToEnumField().size()); 106 assertEquals(3, message.getInt32ToEnumField().size());
154 assertEquals(TestMap.EnumValue.FOO, message.getInt32ToEnumField().get(1)); 107 assertEquals(TestMap.EnumValue.FOO, message.getInt32ToEnumField().get(1));
155 assertEquals(TestMap.EnumValue.BAR, message.getInt32ToEnumField().get(2)); 108 assertEquals(TestMap.EnumValue.BAR, message.getInt32ToEnumField().get(2));
156 assertEquals(TestMap.EnumValue.BAZ, message.getInt32ToEnumField().get(3)); 109 assertEquals(TestMap.EnumValue.BAZ, message.getInt32ToEnumField().get(3));
157 110
158 assertEquals(3, message.getInt32ToMessageField().size()); 111 assertEquals(3, message.getInt32ToMessageField().size());
159 assertEquals(11, message.getInt32ToMessageField().get(1).getValue()); 112 assertEquals(11, message.getInt32ToMessageField().get(1).getValue());
160 assertEquals(22, message.getInt32ToMessageField().get(2).getValue()); 113 assertEquals(22, message.getInt32ToMessageField().get(2).getValue());
161 assertEquals(33, message.getInt32ToMessageField().get(3).getValue()); 114 assertEquals(33, message.getInt32ToMessageField().get(3).getValue());
162 115
163 assertEquals(3, message.getStringToInt32Field().size()); 116 assertEquals(3, message.getStringToInt32Field().size());
164 assertEquals(11, message.getStringToInt32Field().get("1").intValue()); 117 assertEquals(11, message.getStringToInt32Field().get("1").intValue());
165 assertEquals(22, message.getStringToInt32Field().get("2").intValue()); 118 assertEquals(22, message.getStringToInt32Field().get("2").intValue());
166 assertEquals(33, message.getStringToInt32Field().get("3").intValue()); 119 assertEquals(33, message.getStringToInt32Field().get("3").intValue());
167 } 120 }
168 121
169 private void updateMapValuesUsingMutableMap(TestMap.Builder builder) { 122 private void updateMapValues(TestMap.Builder builder) {
170 builder.getMutableInt32ToInt32Field().put(1, 111); 123 builder.getMutableInt32ToInt32Field().put(1, 111);
171 builder.getMutableInt32ToInt32Field().remove(2); 124 builder.getMutableInt32ToInt32Field().remove(2);
172 builder.getMutableInt32ToInt32Field().put(4, 44); 125 builder.getMutableInt32ToInt32Field().put(4, 44);
173 // 126
174 builder.getMutableInt32ToStringField().put(1, "111"); 127 builder.getMutableInt32ToStringField().put(1, "111");
175 builder.getMutableInt32ToStringField().remove(2); 128 builder.getMutableInt32ToStringField().remove(2);
176 builder.getMutableInt32ToStringField().put(4, "44"); 129 builder.getMutableInt32ToStringField().put(4, "44");
177 // 130
178 builder.getMutableInt32ToBytesField().put(1, TestUtil.toBytes("111")); 131 builder.getMutableInt32ToBytesField().put(1, TestUtil.toBytes("111"));
179 builder.getMutableInt32ToBytesField().remove(2); 132 builder.getMutableInt32ToBytesField().remove(2);
180 builder.getMutableInt32ToBytesField().put(4, TestUtil.toBytes("44")); 133 builder.getMutableInt32ToBytesField().put(4, TestUtil.toBytes("44"));
181 // 134
182 builder.getMutableInt32ToEnumField().put(1, TestMap.EnumValue.BAR); 135 builder.getMutableInt32ToEnumField().put(1, TestMap.EnumValue.BAR);
183 builder.getMutableInt32ToEnumField().remove(2); 136 builder.getMutableInt32ToEnumField().remove(2);
184 builder.getMutableInt32ToEnumField().put(4, TestMap.EnumValue.QUX); 137 builder.getMutableInt32ToEnumField().put(4, TestMap.EnumValue.QUX);
185 // 138
186 builder.getMutableInt32ToMessageField().put( 139 builder.getMutableInt32ToMessageField().put(
187 1, MessageValue.newBuilder().setValue(111).build()); 140 1, MessageValue.newBuilder().setValue(111).build());
188 builder.getMutableInt32ToMessageField().remove(2); 141 builder.getMutableInt32ToMessageField().remove(2);
189 builder.getMutableInt32ToMessageField().put( 142 builder.getMutableInt32ToMessageField().put(
190 4, MessageValue.newBuilder().setValue(44).build()); 143 4, MessageValue.newBuilder().setValue(44).build());
191 // 144
192 builder.getMutableStringToInt32Field().put("1", 111); 145 builder.getMutableStringToInt32Field().put("1", 111);
193 builder.getMutableStringToInt32Field().remove("2"); 146 builder.getMutableStringToInt32Field().remove("2");
194 builder.getMutableStringToInt32Field().put("4", 44); 147 builder.getMutableStringToInt32Field().put("4", 44);
195 } 148 }
196 149
197 private void updateMapValuesUsingAccessors(TestMap.Builder builder) {
198 builder
199 .putInt32ToInt32Field(1, 111)
200 .removeInt32ToInt32Field(2)
201 .putInt32ToInt32Field(4, 44)
202
203 .putInt32ToStringField(1, "111")
204 .removeInt32ToStringField(2)
205 .putInt32ToStringField(4, "44")
206
207 .putInt32ToBytesField(1, TestUtil.toBytes("111"))
208 .removeInt32ToBytesField(2)
209 .putInt32ToBytesField(4, TestUtil.toBytes("44"))
210
211 .putInt32ToEnumField(1, TestMap.EnumValue.BAR)
212 .removeInt32ToEnumField(2)
213 .putInt32ToEnumField(4, TestMap.EnumValue.QUX)
214
215 .putInt32ToMessageField(1, MessageValue.newBuilder().setValue(111).build ())
216 .removeInt32ToMessageField(2)
217 .putInt32ToMessageField(4, MessageValue.newBuilder().setValue(44).build( ))
218
219 .putStringToInt32Field("1", 111)
220 .removeStringToInt32Field("2")
221 .putStringToInt32Field("4", 44);
222 }
223
224 public void testUpdateMapValues() {
225 TestMap.Builder usingMutableMapBuilder = TestMap.newBuilder();
226 setMapValuesUsingMutableMap(usingMutableMapBuilder);
227 TestMap usingMutableMap = usingMutableMapBuilder.build();
228 assertMapValuesSet(usingMutableMap);
229
230 TestMap.Builder usingAccessorsBuilder = TestMap.newBuilder();
231 setMapValuesUsingAccessors(usingAccessorsBuilder);
232 TestMap usingAccessors = usingAccessorsBuilder.build();
233 assertMapValuesSet(usingAccessors);
234
235 assertEquals(usingAccessors, usingMutableMap);
236 //
237 usingMutableMapBuilder = usingMutableMap.toBuilder();
238 updateMapValuesUsingMutableMap(usingMutableMapBuilder);
239 usingMutableMap = usingMutableMapBuilder.build();
240 assertMapValuesUpdated(usingMutableMap);
241
242 usingAccessorsBuilder = usingAccessors.toBuilder();
243 updateMapValuesUsingAccessors(usingAccessorsBuilder);
244 usingAccessors = usingAccessorsBuilder.build();
245 assertMapValuesUpdated(usingAccessors);
246
247 assertEquals(usingAccessors, usingMutableMap);
248 }
249
250 private void assertMapValuesUpdated(TestMap message) { 150 private void assertMapValuesUpdated(TestMap message) {
251 assertEquals(3, message.getInt32ToInt32Field().size()); 151 assertEquals(3, message.getInt32ToInt32Field().size());
252 assertEquals(111, message.getInt32ToInt32Field().get(1).intValue()); 152 assertEquals(111, message.getInt32ToInt32Field().get(1).intValue());
253 assertEquals(33, message.getInt32ToInt32Field().get(3).intValue()); 153 assertEquals(33, message.getInt32ToInt32Field().get(3).intValue());
254 assertEquals(44, message.getInt32ToInt32Field().get(4).intValue()); 154 assertEquals(44, message.getInt32ToInt32Field().get(4).intValue());
255 155
256 assertEquals(3, message.getInt32ToStringField().size()); 156 assertEquals(3, message.getInt32ToStringField().size());
257 assertEquals("111", message.getInt32ToStringField().get(1)); 157 assertEquals("111", message.getInt32ToStringField().get(1));
258 assertEquals("33", message.getInt32ToStringField().get(3)); 158 assertEquals("33", message.getInt32ToStringField().get(3));
259 assertEquals("44", message.getInt32ToStringField().get(4)); 159 assertEquals("44", message.getInt32ToStringField().get(4));
260 160
261 assertEquals(3, message.getInt32ToBytesField().size()); 161 assertEquals(3, message.getInt32ToBytesField().size());
262 assertEquals(TestUtil.toBytes("111"), message.getInt32ToBytesField().get(1)) ; 162 assertEquals(TestUtil.toBytes("111"), message.getInt32ToBytesField().get(1)) ;
263 assertEquals(TestUtil.toBytes("33"), message.getInt32ToBytesField().get(3)); 163 assertEquals(TestUtil.toBytes("33"), message.getInt32ToBytesField().get(3));
264 assertEquals(TestUtil.toBytes("44"), message.getInt32ToBytesField().get(4)); 164 assertEquals(TestUtil.toBytes("44"), message.getInt32ToBytesField().get(4));
265 165
266 assertEquals(3, message.getInt32ToEnumField().size()); 166 assertEquals(3, message.getInt32ToEnumField().size());
267 assertEquals(TestMap.EnumValue.BAR, message.getInt32ToEnumField().get(1)); 167 assertEquals(TestMap.EnumValue.BAR, message.getInt32ToEnumField().get(1));
268 assertEquals(TestMap.EnumValue.BAZ, message.getInt32ToEnumField().get(3)); 168 assertEquals(TestMap.EnumValue.BAZ, message.getInt32ToEnumField().get(3));
269 assertEquals(TestMap.EnumValue.QUX, message.getInt32ToEnumField().get(4)); 169 assertEquals(TestMap.EnumValue.QUX, message.getInt32ToEnumField().get(4));
270 170
271 assertEquals(3, message.getInt32ToMessageField().size()); 171 assertEquals(3, message.getInt32ToMessageField().size());
272 assertEquals(111, message.getInt32ToMessageField().get(1).getValue()); 172 assertEquals(111, message.getInt32ToMessageField().get(1).getValue());
273 assertEquals(33, message.getInt32ToMessageField().get(3).getValue()); 173 assertEquals(33, message.getInt32ToMessageField().get(3).getValue());
274 assertEquals(44, message.getInt32ToMessageField().get(4).getValue()); 174 assertEquals(44, message.getInt32ToMessageField().get(4).getValue());
275 175
276 assertEquals(3, message.getStringToInt32Field().size()); 176 assertEquals(3, message.getStringToInt32Field().size());
277 assertEquals(111, message.getStringToInt32Field().get("1").intValue()); 177 assertEquals(111, message.getStringToInt32Field().get("1").intValue());
278 assertEquals(33, message.getStringToInt32Field().get("3").intValue()); 178 assertEquals(33, message.getStringToInt32Field().get("3").intValue());
279 assertEquals(44, message.getStringToInt32Field().get("4").intValue()); 179 assertEquals(44, message.getStringToInt32Field().get("4").intValue());
280 } 180 }
281 181
282 private void assertMapValuesCleared(TestMapOrBuilder testMapOrBuilder) { 182 private void assertMapValuesCleared(TestMap message) {
283 assertEquals(0, testMapOrBuilder.getInt32ToInt32Field().size()); 183 assertEquals(0, message.getInt32ToInt32Field().size());
284 assertEquals(0, testMapOrBuilder.getInt32ToInt32FieldCount()); 184 assertEquals(0, message.getInt32ToStringField().size());
285 assertEquals(0, testMapOrBuilder.getInt32ToStringField().size()); 185 assertEquals(0, message.getInt32ToBytesField().size());
286 assertEquals(0, testMapOrBuilder.getInt32ToStringFieldCount()); 186 assertEquals(0, message.getInt32ToEnumField().size());
287 assertEquals(0, testMapOrBuilder.getInt32ToBytesField().size()); 187 assertEquals(0, message.getInt32ToMessageField().size());
288 assertEquals(0, testMapOrBuilder.getInt32ToBytesFieldCount()); 188 assertEquals(0, message.getStringToInt32Field().size());
289 assertEquals(0, testMapOrBuilder.getInt32ToEnumField().size());
290 assertEquals(0, testMapOrBuilder.getInt32ToEnumFieldCount());
291 assertEquals(0, testMapOrBuilder.getInt32ToMessageField().size());
292 assertEquals(0, testMapOrBuilder.getInt32ToMessageFieldCount());
293 assertEquals(0, testMapOrBuilder.getStringToInt32Field().size());
294 assertEquals(0, testMapOrBuilder.getStringToInt32FieldCount());
295 } 189 }
296 190
297 public void testGetMapIsImmutable() {
298 TestMap.Builder builder = TestMap.newBuilder();
299 assertMapsAreImmutable(builder);
300 assertMapsAreImmutable(builder.build());
301
302 setMapValuesUsingAccessors(builder);
303 assertMapsAreImmutable(builder);
304 assertMapsAreImmutable(builder.build());
305 }
306
307 private void assertMapsAreImmutable(TestMapOrBuilder testMapOrBuilder) {
308 assertImmutable(testMapOrBuilder.getInt32ToInt32Field(), 1, 2);
309 assertImmutable(testMapOrBuilder.getInt32ToStringField(), 1, "2");
310 assertImmutable(testMapOrBuilder.getInt32ToBytesField(), 1, TestUtil.toBytes ("2"));
311 assertImmutable(testMapOrBuilder.getInt32ToEnumField(), 1, TestMap.EnumValue .FOO);
312 assertImmutable(
313 testMapOrBuilder.getInt32ToMessageField(), 1, MessageValue.getDefaultIns tance());
314 assertImmutable(testMapOrBuilder.getStringToInt32Field(), "1", 2);
315 }
316
317 private <K, V> void assertImmutable(Map<K, V> map, K key, V value) {
318 try {
319 map.put(key, value);
320 fail();
321 } catch (UnsupportedOperationException e) {
322 // expected
323 }
324 }
325
326 public void testMutableMapLifecycle() { 191 public void testMutableMapLifecycle() {
327 TestMap.Builder builder = TestMap.newBuilder(); 192 TestMap.Builder builder = TestMap.newBuilder();
328 Map<Integer, Integer> intMap = builder.getMutableInt32ToInt32Field(); 193 Map<Integer, Integer> intMap = builder.getMutableInt32ToInt32Field();
329 intMap.put(1, 2); 194 intMap.put(1, 2);
330 assertEquals(newMap(1, 2), builder.build().getInt32ToInt32Field()); 195 assertEquals(newMap(1, 2), builder.build().getInt32ToInt32Field());
331 try { 196 try {
332 intMap.put(2, 3); 197 intMap.put(2, 3);
333 fail(); 198 fail();
334 } catch (UnsupportedOperationException e) { 199 } catch (UnsupportedOperationException e) {
335 // expected 200 // expected
336 } 201 }
337 assertEquals(newMap(1, 2), builder.getInt32ToInt32Field()); 202 assertEquals(newMap(1, 2), builder.getInt32ToInt32Field());
338 builder.getMutableInt32ToInt32Field().put(2, 3); 203 builder.getMutableInt32ToInt32Field().put(2, 3);
339 assertEquals(newMap(1, 2, 2, 3), builder.getInt32ToInt32Field()); 204 assertEquals(newMap(1, 2, 2, 3), builder.getInt32ToInt32Field());
340 // 205
341 Map<Integer, TestMap.EnumValue> enumMap = builder.getMutableInt32ToEnumField (); 206 Map<Integer, TestMap.EnumValue> enumMap = builder.getMutableInt32ToEnumField ();
342 enumMap.put(1, TestMap.EnumValue.BAR); 207 enumMap.put(1, TestMap.EnumValue.BAR);
343 assertEquals(newMap(1, TestMap.EnumValue.BAR), builder.build().getInt32ToEnu mField()); 208 assertEquals(newMap(1, TestMap.EnumValue.BAR), builder.build().getInt32ToEnu mField());
344 try { 209 try {
345 enumMap.put(2, TestMap.EnumValue.FOO); 210 enumMap.put(2, TestMap.EnumValue.FOO);
346 fail(); 211 fail();
347 } catch (UnsupportedOperationException e) { 212 } catch (UnsupportedOperationException e) {
348 // expected 213 // expected
349 } 214 }
350 assertEquals(newMap(1, TestMap.EnumValue.BAR), builder.getInt32ToEnumField() ); 215 assertEquals(newMap(1, TestMap.EnumValue.BAR), builder.getInt32ToEnumField() );
351 builder.getMutableInt32ToEnumField().put(2, TestMap.EnumValue.FOO); 216 builder.getMutableInt32ToEnumField().put(2, TestMap.EnumValue.FOO);
352 assertEquals( 217 assertEquals(
353 newMap(1, TestMap.EnumValue.BAR, 2, TestMap.EnumValue.FOO), 218 newMap(1, TestMap.EnumValue.BAR, 2, TestMap.EnumValue.FOO),
354 builder.getInt32ToEnumField()); 219 builder.getInt32ToEnumField());
355 // 220
356 Map<Integer, String> stringMap = builder.getMutableInt32ToStringField(); 221 Map<Integer, String> stringMap = builder.getMutableInt32ToStringField();
357 stringMap.put(1, "1"); 222 stringMap.put(1, "1");
358 assertEquals(newMap(1, "1"), builder.build().getInt32ToStringField()); 223 assertEquals(newMap(1, "1"), builder.build().getInt32ToStringField());
359 try { 224 try {
360 stringMap.put(2, "2"); 225 stringMap.put(2, "2");
361 fail(); 226 fail();
362 } catch (UnsupportedOperationException e) { 227 } catch (UnsupportedOperationException e) {
363 // expected 228 // expected
364 } 229 }
365 assertEquals(newMap(1, "1"), builder.getInt32ToStringField()); 230 assertEquals(newMap(1, "1"), builder.getInt32ToStringField());
366 builder.getMutableInt32ToStringField().put(2, "2"); 231 builder.getMutableInt32ToStringField().put(2, "2");
367 assertEquals( 232 assertEquals(
368 newMap(1, "1", 2, "2"), 233 newMap(1, "1", 2, "2"),
369 builder.getInt32ToStringField()); 234 builder.getInt32ToStringField());
370 // 235
371 Map<Integer, TestMap.MessageValue> messageMap = builder.getMutableInt32ToMes sageField(); 236 Map<Integer, TestMap.MessageValue> messageMap = builder.getMutableInt32ToMes sageField();
372 messageMap.put(1, TestMap.MessageValue.getDefaultInstance()); 237 messageMap.put(1, TestMap.MessageValue.getDefaultInstance());
373 assertEquals(newMap(1, TestMap.MessageValue.getDefaultInstance()), 238 assertEquals(newMap(1, TestMap.MessageValue.getDefaultInstance()),
374 builder.build().getInt32ToMessageField()); 239 builder.build().getInt32ToMessageField());
375 try { 240 try {
376 messageMap.put(2, TestMap.MessageValue.getDefaultInstance()); 241 messageMap.put(2, TestMap.MessageValue.getDefaultInstance());
377 fail(); 242 fail();
378 } catch (UnsupportedOperationException e) { 243 } catch (UnsupportedOperationException e) {
379 // expected 244 // expected
380 } 245 }
381 assertEquals(newMap(1, TestMap.MessageValue.getDefaultInstance()), 246 assertEquals(newMap(1, TestMap.MessageValue.getDefaultInstance()),
382 builder.getInt32ToMessageField()); 247 builder.getInt32ToMessageField());
383 builder.getMutableInt32ToMessageField().put(2, TestMap.MessageValue.getDefau ltInstance()); 248 builder.getMutableInt32ToMessageField().put(2, TestMap.MessageValue.getDefau ltInstance());
384 assertEquals( 249 assertEquals(
385 newMap(1, TestMap.MessageValue.getDefaultInstance(), 250 newMap(1, TestMap.MessageValue.getDefaultInstance(),
386 2, TestMap.MessageValue.getDefaultInstance()), 251 2, TestMap.MessageValue.getDefaultInstance()),
387 builder.getInt32ToMessageField()); 252 builder.getInt32ToMessageField());
388 } 253 }
389 // 254
390 public void testMutableMapLifecycle_collections() { 255 public void testMutableMapLifecycle_collections() {
391 TestMap.Builder builder = TestMap.newBuilder(); 256 TestMap.Builder builder = TestMap.newBuilder();
392 Map<Integer, Integer> intMap = builder.getMutableInt32ToInt32Field(); 257 Map<Integer, Integer> intMap = builder.getMutableInt32ToInt32Field();
393 intMap.put(1, 2); 258 intMap.put(1, 2);
394 assertEquals(newMap(1, 2), builder.build().getInt32ToInt32Field()); 259 assertEquals(newMap(1, 2), builder.build().getInt32ToInt32Field());
395 try { 260 try {
396 intMap.remove(2); 261 intMap.remove(2);
397 fail(); 262 fail();
398 } catch (UnsupportedOperationException e) { 263 } catch (UnsupportedOperationException e) {
399 // expected 264 // expected
(...skipping 26 matching lines...) Expand all
426 intMap.values().iterator().remove(); 291 intMap.values().iterator().remove();
427 fail(); 292 fail();
428 } catch (UnsupportedOperationException e) { 293 } catch (UnsupportedOperationException e) {
429 // expected 294 // expected
430 } 295 }
431 assertEquals(newMap(1, 2), intMap); 296 assertEquals(newMap(1, 2), intMap);
432 assertEquals(newMap(1, 2), builder.getInt32ToInt32Field()); 297 assertEquals(newMap(1, 2), builder.getInt32ToInt32Field());
433 assertEquals(newMap(1, 2), builder.build().getInt32ToInt32Field()); 298 assertEquals(newMap(1, 2), builder.build().getInt32ToInt32Field());
434 } 299 }
435 300
436
437 public void testGettersAndSetters() throws Exception { 301 public void testGettersAndSetters() throws Exception {
438 TestMap.Builder builder = TestMap.newBuilder(); 302 TestMap.Builder builder = TestMap.newBuilder();
439 TestMap message = builder.build(); 303 TestMap message = builder.build();
440 assertMapValuesCleared(message); 304 assertMapValuesCleared(message);
441 305
442 builder = message.toBuilder(); 306 builder = message.toBuilder();
443 setMapValuesUsingAccessors(builder); 307 setMapValues(builder);
444 message = builder.build(); 308 message = builder.build();
445 assertMapValuesSet(message); 309 assertMapValuesSet(message);
446 310
447 builder = message.toBuilder(); 311 builder = message.toBuilder();
448 updateMapValuesUsingAccessors(builder); 312 updateMapValues(builder);
449 message = builder.build(); 313 message = builder.build();
450 assertMapValuesUpdated(message); 314 assertMapValuesUpdated(message);
451 315
452 builder = message.toBuilder(); 316 builder = message.toBuilder();
453 builder.clear(); 317 builder.clear();
454 assertMapValuesCleared(builder);
455 message = builder.build(); 318 message = builder.build();
456 assertMapValuesCleared(message); 319 assertMapValuesCleared(message);
457 } 320 }
458 321
459 public void testPutAll() throws Exception { 322 public void testPutAll() throws Exception {
460 TestMap.Builder sourceBuilder = TestMap.newBuilder(); 323 TestMap.Builder sourceBuilder = TestMap.newBuilder();
461 setMapValuesUsingAccessors(sourceBuilder); 324 setMapValues(sourceBuilder);
462 TestMap source = sourceBuilder.build(); 325 TestMap source = sourceBuilder.build();
463 assertMapValuesSet(source);
464 326
465 TestMap.Builder destination = TestMap.newBuilder(); 327 TestMap.Builder destination = TestMap.newBuilder();
466 copyMapValues(source, destination); 328 copyMapValues(source, destination);
467 assertMapValuesSet(destination.build()); 329 assertMapValuesSet(destination.build());
468
469 assertEquals(3, destination.getInt32ToEnumFieldCount());
470 }
471
472 public void testPutChecksNullKeysAndValues() throws Exception {
473 TestMap.Builder builder = TestMap.newBuilder();
474
475 try {
476 builder.putInt32ToStringField(1, null);
477 fail();
478 } catch (NullPointerException e) {
479 // expected.
480 }
481
482 try {
483 builder.putInt32ToBytesField(1, null);
484 fail();
485 } catch (NullPointerException e) {
486 // expected.
487 }
488
489 try {
490 builder.putInt32ToEnumField(1, null);
491 fail();
492 } catch (NullPointerException e) {
493 // expected.
494 }
495
496 try {
497 builder.putInt32ToMessageField(1, null);
498 fail();
499 } catch (NullPointerException e) {
500 // expected.
501 }
502
503 try {
504 builder.putStringToInt32Field(null, 1);
505 fail();
506 } catch (NullPointerException e) {
507 // expected.
508 }
509 } 330 }
510 331
511 public void testSerializeAndParse() throws Exception { 332 public void testSerializeAndParse() throws Exception {
512 TestMap.Builder builder = TestMap.newBuilder(); 333 TestMap.Builder builder = TestMap.newBuilder();
513 setMapValuesUsingAccessors(builder); 334 setMapValues(builder);
514 TestMap message = builder.build(); 335 TestMap message = builder.build();
515 assertEquals(message.getSerializedSize(), message.toByteString().size()); 336 assertEquals(message.getSerializedSize(), message.toByteString().size());
516 message = TestMap.parser().parseFrom(message.toByteString()); 337 message = TestMap.parser().parseFrom(message.toByteString());
517 assertMapValuesSet(message); 338 assertMapValuesSet(message);
518 339
519 builder = message.toBuilder(); 340 builder = message.toBuilder();
520 updateMapValuesUsingAccessors(builder); 341 updateMapValues(builder);
521 message = builder.build(); 342 message = builder.build();
522 assertEquals(message.getSerializedSize(), message.toByteString().size()); 343 assertEquals(message.getSerializedSize(), message.toByteString().size());
523 message = TestMap.parser().parseFrom(message.toByteString()); 344 message = TestMap.parser().parseFrom(message.toByteString());
524 assertMapValuesUpdated(message); 345 assertMapValuesUpdated(message);
525 346
526 builder = message.toBuilder(); 347 builder = message.toBuilder();
527 builder.clear(); 348 builder.clear();
528 message = builder.build(); 349 message = builder.build();
529 assertEquals(message.getSerializedSize(), message.toByteString().size()); 350 assertEquals(message.getSerializedSize(), message.toByteString().size());
530 message = TestMap.parser().parseFrom(message.toByteString()); 351 message = TestMap.parser().parseFrom(message.toByteString());
531 assertMapValuesCleared(message); 352 assertMapValuesCleared(message);
532 } 353 }
533 354
534 private TestMap tryParseTestMap(BizarroTestMap bizarroMap) throws IOException {
535 ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
536 CodedOutputStream output = CodedOutputStream.newInstance(byteArrayOutputStre am);
537 bizarroMap.writeTo(output);
538 output.flush();
539 return TestMap.parser().parseFrom(ByteString.copyFrom(byteArrayOutputStream. toByteArray()));
540 }
541
542 public void testParseError() throws Exception {
543 ByteString bytes = TestUtil.toBytes("SOME BYTES");
544 String stringKey = "a string key";
545
546 TestMap map = tryParseTestMap(BizarroTestMap.newBuilder()
547 .putInt32ToInt32Field(5, bytes)
548 .build());
549 assertEquals(map.getInt32ToInt32FieldOrDefault(5, -1), 0);
550
551 map = tryParseTestMap(BizarroTestMap.newBuilder()
552 .putInt32ToStringField(stringKey, 5)
553 .build());
554 assertEquals(map.getInt32ToStringFieldOrDefault(0, null), "");
555
556 map = tryParseTestMap(BizarroTestMap.newBuilder()
557 .putInt32ToBytesField(stringKey, 5)
558 .build());
559 assertEquals(map.getInt32ToBytesFieldOrDefault(0, null), ByteString.EMPTY);
560
561 map = tryParseTestMap(BizarroTestMap.newBuilder()
562 .putInt32ToEnumField(stringKey, bytes)
563 .build());
564 assertEquals(map.getInt32ToEnumFieldOrDefault(0, null), TestMap.EnumValue.FO O);
565
566 try {
567 tryParseTestMap(BizarroTestMap.newBuilder()
568 .putInt32ToMessageField(stringKey, bytes)
569 .build());
570 fail();
571 } catch (InvalidProtocolBufferException expected) {
572 assertTrue(expected.getUnfinishedMessage() instanceof TestMap);
573 map = (TestMap) expected.getUnfinishedMessage();
574 assertTrue(map.getInt32ToMessageField().isEmpty());
575 }
576
577 map = tryParseTestMap(BizarroTestMap.newBuilder()
578 .putStringToInt32Field(stringKey, bytes)
579 .build());
580 assertEquals(map.getStringToInt32FieldOrDefault(stringKey, -1), 0);
581 }
582
583 public void testMergeFrom() throws Exception { 355 public void testMergeFrom() throws Exception {
584 TestMap.Builder builder = TestMap.newBuilder(); 356 TestMap.Builder builder = TestMap.newBuilder();
585 setMapValuesUsingAccessors(builder); 357 setMapValues(builder);
586 TestMap message = builder.build(); 358 TestMap message = builder.build();
587 359
588 TestMap.Builder other = TestMap.newBuilder(); 360 TestMap.Builder other = TestMap.newBuilder();
589 other.mergeFrom(message); 361 other.mergeFrom(message);
590 assertMapValuesSet(other.build()); 362 assertMapValuesSet(other.build());
591 } 363 }
592 364
593 public void testEqualsAndHashCode() throws Exception { 365 public void testEqualsAndHashCode() throws Exception {
594 // Test that generated equals() and hashCode() will disregard the order 366 // Test that generated equals() and hashCode() will disregard the order
595 // of map entries when comparing/hashing map fields. 367 // of map entries when comparing/hashing map fields.
596 368
597 // We can't control the order of elements in a HashMap. The best we can do 369 // We can't control the order of elements in a HashMap. The best we can do
598 // here is to add elements in different order. 370 // here is to add elements in different order.
599 TestMap.Builder b1 = TestMap.newBuilder(); 371 TestMap.Builder b1 = TestMap.newBuilder();
600 b1.putInt32ToInt32Field(1, 2); 372 b1.getMutableInt32ToInt32Field().put(1, 2);
601 b1.putInt32ToInt32Field(3, 4); 373 b1.getMutableInt32ToInt32Field().put(3, 4);
602 b1.putInt32ToInt32Field(5, 6); 374 b1.getMutableInt32ToInt32Field().put(5, 6);
603 TestMap m1 = b1.build(); 375 TestMap m1 = b1.build();
604 376
605 TestMap.Builder b2 = TestMap.newBuilder(); 377 TestMap.Builder b2 = TestMap.newBuilder();
606 b2.putInt32ToInt32Field(5, 6); 378 b2.getMutableInt32ToInt32Field().put(5, 6);
607 b2.putInt32ToInt32Field(1, 2); 379 b2.getMutableInt32ToInt32Field().put(1, 2);
608 b2.putInt32ToInt32Field(3, 4); 380 b2.getMutableInt32ToInt32Field().put(3, 4);
609 TestMap m2 = b2.build(); 381 TestMap m2 = b2.build();
610 382
611 assertEquals(m1, m2); 383 assertEquals(m1, m2);
612 assertEquals(m1.hashCode(), m2.hashCode()); 384 assertEquals(m1.hashCode(), m2.hashCode());
613 385
614 // Make sure we did compare map fields. 386 // Make sure we did compare map fields.
615 b2.putInt32ToInt32Field(1, 0); 387 b2.getMutableInt32ToInt32Field().put(1, 0);
616 m2 = b2.build(); 388 m2 = b2.build();
617 assertFalse(m1.equals(m2)); 389 assertFalse(m1.equals(m2));
618 // Don't check m1.hashCode() != m2.hashCode() because it's not guaranteed 390 // Don't check m1.hashCode() != m2.hashCode() because it's not guaranteed
619 // to be different. 391 // to be different.
620 } 392 }
621 393
622 394
623 // The following methods are used to test reflection API. 395 // The following methods are used to test reflection API.
624 396
625 private static FieldDescriptor f(String name) { 397 private static FieldDescriptor f(String name) {
626 return TestMap.getDescriptor().findFieldByName(name); 398 return TestMap.getDescriptor().findFieldByName(name);
627 } 399 }
628 400
629 private static Object getFieldValue(Message mapEntry, String name) { 401 private static Object getFieldValue(Message mapEntry, String name) {
630 FieldDescriptor field = mapEntry.getDescriptorForType().findFieldByName(name ); 402 FieldDescriptor field = mapEntry.getDescriptorForType().findFieldByName(name );
631 return mapEntry.getField(field); 403 return mapEntry.getField(field);
632 } 404 }
633 405
634 private static Message.Builder setFieldValue( 406 private static Message.Builder setFieldValue(
635 Message.Builder mapEntry, String name, Object value) { 407 Message.Builder mapEntry, String name, Object value) {
636 FieldDescriptor field = mapEntry.getDescriptorForType().findFieldByName(name ); 408 FieldDescriptor field = mapEntry.getDescriptorForType().findFieldByName(name );
637 mapEntry.setField(field, value); 409 mapEntry.setField(field, value);
638 return mapEntry; 410 return mapEntry;
639 } 411 }
640 412
641 private static void assertHasMapValues(Message message, String name, Map<?, ?> values) { 413 private static void assertHasMapValues(Message message, String name, Map<?, ?> values) {
642 FieldDescriptor field = f(name); 414 FieldDescriptor field = f(name);
643 for (Object entry : (List<?>) message.getField(field)) { 415 for (Object entry : (List<?>) message.getField(field)) {
644 Message mapEntry = (Message) entry; 416 Message mapEntry = (Message) entry;
645 Object key = getFieldValue(mapEntry, "key"); 417 Object key = getFieldValue(mapEntry, "key");
646 Object value = getFieldValue(mapEntry, "value"); 418 Object value = getFieldValue(mapEntry, "value");
647 assertTrue(values.containsKey(key)); 419 assertTrue(values.containsKey(key));
648 assertEquals(value, values.get(key)); 420 assertEquals(value, values.get(key));
649 } 421 }
650 assertEquals(values.size(), message.getRepeatedFieldCount(field)); 422 assertEquals(values.size(), message.getRepeatedFieldCount(field));
651 for (int i = 0; i < message.getRepeatedFieldCount(field); i++) { 423 for (int i = 0; i < message.getRepeatedFieldCount(field); i++) {
652 Message mapEntry = (Message) message.getRepeatedField(field, i); 424 Message mapEntry = (Message) message.getRepeatedField(field, i);
653 Object key = getFieldValue(mapEntry, "key"); 425 Object key = getFieldValue(mapEntry, "key");
654 Object value = getFieldValue(mapEntry, "value"); 426 Object value = getFieldValue(mapEntry, "value");
655 assertTrue(values.containsKey(key)); 427 assertTrue(values.containsKey(key));
656 assertEquals(value, values.get(key)); 428 assertEquals(value, values.get(key));
657 } 429 }
658 } 430 }
659 431
660 private static <KeyType, ValueType> 432 private static <KeyType, ValueType>
661 Message newMapEntry(Message.Builder builder, String name, KeyType key, ValueTy pe value) { 433 Message newMapEntry(Message.Builder builder, String name, KeyType key, ValueTy pe value) {
662 FieldDescriptor field = builder.getDescriptorForType().findFieldByName(name) ; 434 FieldDescriptor field = builder.getDescriptorForType().findFieldByName(name) ;
663 Message.Builder entryBuilder = builder.newBuilderForField(field); 435 Message.Builder entryBuilder = builder.newBuilderForField(field);
664 FieldDescriptor keyField = entryBuilder.getDescriptorForType().findFieldByNa me("key"); 436 FieldDescriptor keyField = entryBuilder.getDescriptorForType().findFieldByNa me("key");
665 FieldDescriptor valueField = entryBuilder.getDescriptorForType().findFieldBy Name("value"); 437 FieldDescriptor valueField = entryBuilder.getDescriptorForType().findFieldBy Name("value");
666 entryBuilder.setField(keyField, key); 438 entryBuilder.setField(keyField, key);
667 entryBuilder.setField(valueField, value); 439 entryBuilder.setField(valueField, value);
668 return entryBuilder.build(); 440 return entryBuilder.build();
669 } 441 }
670 442
671 private static void setMapValues(Message.Builder builder, String name, Map<?, ?> values) { 443 private static void setMapValues(Message.Builder builder, String name, Map<?, ?> values) {
672 List<Message> entryList = new ArrayList<Message>(); 444 List<Message> entryList = new ArrayList<Message>();
673 for (Map.Entry<?, ?> entry : values.entrySet()) { 445 for (Map.Entry<?, ?> entry : values.entrySet()) {
674 entryList.add(newMapEntry(builder, name, entry.getKey(), entry.getValue()) ); 446 entryList.add(newMapEntry(builder, name, entry.getKey(), entry.getValue()) );
675 } 447 }
676 FieldDescriptor field = builder.getDescriptorForType().findFieldByName(name) ; 448 FieldDescriptor field = builder.getDescriptorForType().findFieldByName(name) ;
677 builder.setField(field, entryList); 449 builder.setField(field, entryList);
678 } 450 }
679 451
680 private static <KeyType, ValueType> Map<KeyType, ValueType> mapForValues( 452 private static <KeyType, ValueType>
453 Map<KeyType, ValueType> mapForValues(
681 KeyType key1, ValueType value1, KeyType key2, ValueType value2) { 454 KeyType key1, ValueType value1, KeyType key2, ValueType value2) {
682 Map<KeyType, ValueType> map = new HashMap<KeyType, ValueType>(); 455 Map<KeyType, ValueType> map = new HashMap<KeyType, ValueType>();
683 map.put(key1, value1); 456 map.put(key1, value1);
684 map.put(key2, value2); 457 map.put(key2, value2);
685 return map; 458 return map;
686 } 459 }
687 460
688 public void testReflectionApi() throws Exception { 461 public void testReflectionApi() throws Exception {
689 // In reflection API, map fields are just repeated message fields. 462 // In reflection API, map fields are just repeated message fields.
690 TestMap.Builder builder = TestMap.newBuilder() 463 TestMap.Builder builder = TestMap.newBuilder();
691 .putInt32ToInt32Field(1, 2) 464 builder.getMutableInt32ToInt32Field().put(1, 2);
692 .putInt32ToInt32Field(3, 4) 465 builder.getMutableInt32ToInt32Field().put(3, 4);
693 .putInt32ToMessageField(11, MessageValue.newBuilder().setValue(22).build ()) 466 builder.getMutableInt32ToMessageField().put(
694 .putInt32ToMessageField(33, MessageValue.newBuilder().setValue(44).build ()); 467 11, MessageValue.newBuilder().setValue(22).build());
468 builder.getMutableInt32ToMessageField().put(
469 33, MessageValue.newBuilder().setValue(44).build());
695 TestMap message = builder.build(); 470 TestMap message = builder.build();
696 471
697 // Test getField(), getRepeatedFieldCount(), getRepeatedField(). 472 // Test getField(), getRepeatedFieldCount(), getRepeatedField().
698 assertHasMapValues(message, "int32_to_int32_field", 473 assertHasMapValues(message, "int32_to_int32_field",
699 mapForValues(1, 2, 3, 4)); 474 mapForValues(1, 2, 3, 4));
700 assertHasMapValues(message, "int32_to_message_field", 475 assertHasMapValues(message, "int32_to_message_field",
701 mapForValues( 476 mapForValues(
702 11, MessageValue.newBuilder().setValue(22).build(), 477 11, MessageValue.newBuilder().setValue(22).build(),
703 33, MessageValue.newBuilder().setValue(44).build())); 478 33, MessageValue.newBuilder().setValue(44).build()));
704 479
705 // Test clearField() 480 // Test clearField()
706 builder.clearField(f("int32_to_int32_field")); 481 builder.clearField(f("int32_to_int32_field"));
707 builder.clearField(f("int32_to_message_field")); 482 builder.clearField(f("int32_to_message_field"));
708 message = builder.build(); 483 message = builder.build();
709 assertEquals(0, message.getInt32ToInt32Field().size()); 484 assertEquals(0, message.getInt32ToInt32Field().size());
710 assertEquals(0, message.getInt32ToMessageField().size()); 485 assertEquals(0, message.getInt32ToMessageField().size());
711 486
712 // Test setField() 487 // Test setField()
713 setMapValues(builder, "int32_to_int32_field", 488 setMapValues(builder, "int32_to_int32_field",
714 mapForValues(11, 22, 33, 44)); 489 mapForValues(11, 22, 33, 44));
715 setMapValues(builder, "int32_to_message_field", 490 setMapValues(builder, "int32_to_message_field",
716 mapForValues( 491 mapForValues(
717 111, MessageValue.newBuilder().setValue(222).build(), 492 111, MessageValue.newBuilder().setValue(222).build(),
718 333, MessageValue.newBuilder().setValue(444).build())); 493 333, MessageValue.newBuilder().setValue(444).build()));
719 message = builder.build(); 494 message = builder.build();
720 assertEquals(22, message.getInt32ToInt32Field().get(11).intValue()); 495 assertEquals(22, message.getInt32ToInt32Field().get(11).intValue());
721 assertEquals(44, message.getInt32ToInt32Field().get(33).intValue()); 496 assertEquals(44, message.getInt32ToInt32Field().get(33).intValue());
722 assertEquals(222, message.getInt32ToMessageField().get(111).getValue()); 497 assertEquals(222, message.getInt32ToMessageField().get(111).getValue());
723 assertEquals(444, message.getInt32ToMessageField().get(333).getValue()); 498 assertEquals(444, message.getInt32ToMessageField().get(333).getValue());
724 499
725 // Test addRepeatedField 500 // Test addRepeatedField
726 builder.addRepeatedField(f("int32_to_int32_field"), 501 builder.addRepeatedField(f("int32_to_int32_field"),
727 newMapEntry(builder, "int32_to_int32_field", 55, 66)); 502 newMapEntry(builder, "int32_to_int32_field", 55, 66));
728 builder.addRepeatedField(f("int32_to_message_field"), 503 builder.addRepeatedField(f("int32_to_message_field"),
729 newMapEntry(builder, "int32_to_message_field", 555, 504 newMapEntry(builder, "int32_to_message_field", 555,
730 MessageValue.newBuilder().setValue(666).build())); 505 MessageValue.newBuilder().setValue(666).build()));
731 message = builder.build(); 506 message = builder.build();
732 assertEquals(66, message.getInt32ToInt32Field().get(55).intValue()); 507 assertEquals(66, message.getInt32ToInt32Field().get(55).intValue());
733 assertEquals(666, message.getInt32ToMessageField().get(555).getValue()); 508 assertEquals(666, message.getInt32ToMessageField().get(555).getValue());
734 509
735 // Test addRepeatedField (overriding existing values) 510 // Test addRepeatedField (overriding existing values)
736 builder.addRepeatedField(f("int32_to_int32_field"), 511 builder.addRepeatedField(f("int32_to_int32_field"),
737 newMapEntry(builder, "int32_to_int32_field", 55, 55)); 512 newMapEntry(builder, "int32_to_int32_field", 55, 55));
738 builder.addRepeatedField(f("int32_to_message_field"), 513 builder.addRepeatedField(f("int32_to_message_field"),
739 newMapEntry(builder, "int32_to_message_field", 555, 514 newMapEntry(builder, "int32_to_message_field", 555,
740 MessageValue.newBuilder().setValue(555).build())); 515 MessageValue.newBuilder().setValue(555).build()));
741 message = builder.build(); 516 message = builder.build();
742 assertEquals(55, message.getInt32ToInt32Field().get(55).intValue()); 517 assertEquals(55, message.getInt32ToInt32Field().get(55).intValue());
743 assertEquals(555, message.getInt32ToMessageField().get(555).getValue()); 518 assertEquals(555, message.getInt32ToMessageField().get(555).getValue());
744 519
745 // Test setRepeatedField 520 // Test setRepeatedField
746 for (int i = 0; i < builder.getRepeatedFieldCount(f("int32_to_int32_field")) ; i++) { 521 for (int i = 0; i < builder.getRepeatedFieldCount(f("int32_to_int32_field")) ; i++) {
747 Message mapEntry = (Message) builder.getRepeatedField(f("int32_to_int32_fi eld"), i); 522 Message mapEntry = (Message) builder.getRepeatedField(f("int32_to_int32_fi eld"), i);
748 int oldKey = ((Integer) getFieldValue(mapEntry, "key")).intValue(); 523 int oldKey = ((Integer) getFieldValue(mapEntry, "key")).intValue();
749 int oldValue = ((Integer) getFieldValue(mapEntry, "value")).intValue(); 524 int oldValue = ((Integer) getFieldValue(mapEntry, "value")).intValue();
750 // Swap key with value for each entry. 525 // Swap key with value for each entry.
751 Message.Builder mapEntryBuilder = mapEntry.toBuilder(); 526 Message.Builder mapEntryBuilder = mapEntry.toBuilder();
752 setFieldValue(mapEntryBuilder, "key", oldValue); 527 setFieldValue(mapEntryBuilder, "key", oldValue);
753 setFieldValue(mapEntryBuilder, "value", oldKey); 528 setFieldValue(mapEntryBuilder, "value", oldKey);
754 builder.setRepeatedField(f("int32_to_int32_field"), i, mapEntryBuilder.bui ld()); 529 builder.setRepeatedField(f("int32_to_int32_field"), i, mapEntryBuilder.bui ld());
755 } 530 }
756 message = builder.build(); 531 message = builder.build();
757 assertEquals(11, message.getInt32ToInt32Field().get(22).intValue()); 532 assertEquals(11, message.getInt32ToInt32Field().get(22).intValue());
758 assertEquals(33, message.getInt32ToInt32Field().get(44).intValue()); 533 assertEquals(33, message.getInt32ToInt32Field().get(44).intValue());
759 assertEquals(55, message.getInt32ToInt32Field().get(55).intValue()); 534 assertEquals(55, message.getInt32ToInt32Field().get(55).intValue());
760 } 535 }
761 536
762 public void testTextFormat() throws Exception { 537 public void testTextFormat() throws Exception {
763 TestMap.Builder builder = TestMap.newBuilder(); 538 TestMap.Builder builder = TestMap.newBuilder();
764 setMapValuesUsingAccessors(builder); 539 setMapValues(builder);
765 TestMap message = builder.build(); 540 TestMap message = builder.build();
766 541
767 String textData = TextFormat.printToString(message); 542 String textData = TextFormat.printToString(message);
768 543
769 builder = TestMap.newBuilder(); 544 builder = TestMap.newBuilder();
770 TextFormat.merge(textData, builder); 545 TextFormat.merge(textData, builder);
771 message = builder.build(); 546 message = builder.build();
772 547
773 assertMapValuesSet(message); 548 assertMapValuesSet(message);
774 } 549 }
775 550
776 public void testDynamicMessage() throws Exception { 551 public void testDynamicMessage() throws Exception {
777 TestMap.Builder builder = TestMap.newBuilder(); 552 TestMap.Builder builder = TestMap.newBuilder();
778 setMapValuesUsingAccessors(builder); 553 setMapValues(builder);
779 TestMap message = builder.build(); 554 TestMap message = builder.build();
780 555
781 Message dynamicDefaultInstance = 556 Message dynamicDefaultInstance =
782 DynamicMessage.getDefaultInstance(TestMap.getDescriptor()); 557 DynamicMessage.getDefaultInstance(TestMap.getDescriptor());
783 Message dynamicMessage = dynamicDefaultInstance 558 Message dynamicMessage = dynamicDefaultInstance
784 .newBuilderForType().mergeFrom(message.toByteString()).build(); 559 .newBuilderForType().mergeFrom(message.toByteString()).build();
785 560
786 assertEquals(message, dynamicMessage); 561 assertEquals(message, dynamicMessage);
787 assertEquals(message.hashCode(), dynamicMessage.hashCode()); 562 assertEquals(message.hashCode(), dynamicMessage.hashCode());
788 } 563 }
789 564
790 public void testReflectionEqualsAndHashCode() throws Exception { 565 public void testReflectionEqualsAndHashCode() throws Exception {
791 // Test that generated equals() and hashCode() will disregard the order 566 // Test that generated equals() and hashCode() will disregard the order
792 // of map entries when comparing/hashing map fields. 567 // of map entries when comparing/hashing map fields.
793 568
794 // We use DynamicMessage to test reflection based equals()/hashCode(). 569 // We use DynamicMessage to test reflection based equals()/hashCode().
795 Message dynamicDefaultInstance = 570 Message dynamicDefaultInstance =
796 DynamicMessage.getDefaultInstance(TestMap.getDescriptor()); 571 DynamicMessage.getDefaultInstance(TestMap.getDescriptor());
797 FieldDescriptor field = f("int32_to_int32_field"); 572 FieldDescriptor field = f("int32_to_int32_field");
798 573
799 Message.Builder b1 = dynamicDefaultInstance.newBuilderForType(); 574 Message.Builder b1 = dynamicDefaultInstance.newBuilderForType();
800 b1.addRepeatedField(field, newMapEntry(b1, "int32_to_int32_field", 1, 2)); 575 b1.addRepeatedField(field, newMapEntry(b1, "int32_to_int32_field", 1, 2));
801 b1.addRepeatedField(field, newMapEntry(b1, "int32_to_int32_field", 3, 4)); 576 b1.addRepeatedField(field, newMapEntry(b1, "int32_to_int32_field", 3, 4));
802 b1.addRepeatedField(field, newMapEntry(b1, "int32_to_int32_field", 5, 6)); 577 b1.addRepeatedField(field, newMapEntry(b1, "int32_to_int32_field", 5, 6));
803 Message m1 = b1.build(); 578 Message m1 = b1.build();
804 579
805 Message.Builder b2 = dynamicDefaultInstance.newBuilderForType(); 580 Message.Builder b2 = dynamicDefaultInstance.newBuilderForType();
806 b2.addRepeatedField(field, newMapEntry(b2, "int32_to_int32_field", 5, 6)); 581 b2.addRepeatedField(field, newMapEntry(b2, "int32_to_int32_field", 5, 6));
807 b2.addRepeatedField(field, newMapEntry(b2, "int32_to_int32_field", 1, 2)); 582 b2.addRepeatedField(field, newMapEntry(b2, "int32_to_int32_field", 1, 2));
808 b2.addRepeatedField(field, newMapEntry(b2, "int32_to_int32_field", 3, 4)); 583 b2.addRepeatedField(field, newMapEntry(b2, "int32_to_int32_field", 3, 4));
809 Message m2 = b2.build(); 584 Message m2 = b2.build();
810 585
811 assertEquals(m1, m2); 586 assertEquals(m1, m2);
812 assertEquals(m1.hashCode(), m2.hashCode()); 587 assertEquals(m1.hashCode(), m2.hashCode());
813 588
814 // Make sure we did compare map fields. 589 // Make sure we did compare map fields.
815 b2.setRepeatedField(field, 0, newMapEntry(b1, "int32_to_int32_field", 0, 0)) ; 590 b2.setRepeatedField(field, 0, newMapEntry(b1, "int32_to_int32_field", 0, 0)) ;
816 m2 = b2.build(); 591 m2 = b2.build();
817 assertFalse(m1.equals(m2)); 592 assertFalse(m1.equals(m2));
818 // Don't check m1.hashCode() != m2.hashCode() because it's not guaranteed 593 // Don't check m1.hashCode() != m2.hashCode() because it's not guaranteed
819 // to be different. 594 // to be different.
820 } 595 }
821 596
822 public void testUnknownEnumValues() throws Exception { 597 public void testUnknownEnumValues() throws Exception {
823 TestUnknownEnumValue.Builder builder = TestUnknownEnumValue.newBuilder() 598 TestUnknownEnumValue.Builder builder =
824 .putInt32ToInt32Field(1, 1) 599 TestUnknownEnumValue.newBuilder();
825 .putInt32ToInt32Field(2, 54321); 600 builder.getMutableInt32ToInt32Field().put(1, 1);
601 builder.getMutableInt32ToInt32Field().put(2, 54321);
826 ByteString data = builder.build().toByteString(); 602 ByteString data = builder.build().toByteString();
827 603
828 TestMap message = TestMap.parseFrom(data); 604 TestMap message = TestMap.parseFrom(data);
829 // Entries with unknown enum values will be stored into UnknownFieldSet so 605 // Entries with unknown enum values will be stored into UnknownFieldSet so
830 // there is only one entry in the map. 606 // there is only one entry in the map.
831 assertEquals(1, message.getInt32ToEnumField().size()); 607 assertEquals(1, message.getInt32ToEnumField().size());
832 assertEquals(TestMap.EnumValue.BAR, message.getInt32ToEnumField().get(1)); 608 assertEquals(TestMap.EnumValue.BAR, message.getInt32ToEnumField().get(1));
833 // UnknownFieldSet should not be empty. 609 // UnknownFieldSet should not be empty.
834 assertFalse(message.getUnknownFields().asMap().isEmpty()); 610 assertFalse(message.getUnknownFields().asMap().isEmpty());
835 // Serializing and parsing should preserve the unknown entry. 611 // Serializing and parsing should preserve the unknown entry.
836 data = message.toByteString(); 612 data = message.toByteString();
837 TestUnknownEnumValue messageWithUnknownEnums = 613 TestUnknownEnumValue messageWithUnknownEnums =
838 TestUnknownEnumValue.parseFrom(data); 614 TestUnknownEnumValue.parseFrom(data);
839 assertEquals(2, messageWithUnknownEnums.getInt32ToInt32Field().size()); 615 assertEquals(2, messageWithUnknownEnums.getInt32ToInt32Field().size());
840 assertEquals(1, messageWithUnknownEnums.getInt32ToInt32Field().get(1).intVal ue()); 616 assertEquals(1, messageWithUnknownEnums.getInt32ToInt32Field().get(1).intVal ue());
841 assertEquals(54321, messageWithUnknownEnums.getInt32ToInt32Field().get(2).in tValue()); 617 assertEquals(54321, messageWithUnknownEnums.getInt32ToInt32Field().get(2).in tValue());
842 } 618 }
843 619
620
844 public void testRequiredMessage() throws Exception { 621 public void testRequiredMessage() throws Exception {
845 TestMap.Builder builder = TestMap.newBuilder(); 622 TestMap.Builder builder = TestMap.newBuilder();
846 builder.putRequiredMessageMap(0, MessageWithRequiredFields.newBuilder().buil dPartial()); 623 builder.getMutableRequiredMessageMap().put(0,
624 MessageWithRequiredFields.newBuilder().buildPartial());
847 TestMap message = builder.buildPartial(); 625 TestMap message = builder.buildPartial();
848 assertFalse(message.isInitialized()); 626 assertFalse(message.isInitialized());
849 627
850 builder.putRequiredMessageMap(0, MessageWithRequiredFields.newBuilder().setV alue(1).build()); 628 builder.getMutableRequiredMessageMap().put(0,
629 MessageWithRequiredFields.newBuilder().setValue(1).build());
851 message = builder.build(); 630 message = builder.build();
852 assertTrue(message.isInitialized()); 631 assertTrue(message.isInitialized());
853 } 632 }
854 633
855 public void testRecursiveMap() throws Exception { 634 public void testRecursiveMap() throws Exception {
856 TestRecursiveMap.Builder builder = TestRecursiveMap.newBuilder(); 635 TestRecursiveMap.Builder builder = TestRecursiveMap.newBuilder();
857 builder.putRecursiveMapField(1, TestRecursiveMap.newBuilder().setValue(2).bu ild()); 636 builder.getMutableRecursiveMapField().put(
858 builder.putRecursiveMapField(3, TestRecursiveMap.newBuilder().setValue(4).bu ild()); 637 1, TestRecursiveMap.newBuilder().setValue(2).build());
638 builder.getMutableRecursiveMapField().put(
639 3, TestRecursiveMap.newBuilder().setValue(4).build());
859 ByteString data = builder.build().toByteString(); 640 ByteString data = builder.build().toByteString();
860 641
861 TestRecursiveMap message = TestRecursiveMap.parseFrom(data); 642 TestRecursiveMap message = TestRecursiveMap.parseFrom(data);
862 assertEquals(2, message.getRecursiveMapField().get(1).getValue()); 643 assertEquals(2, message.getRecursiveMapField().get(1).getValue());
863 assertEquals(4, message.getRecursiveMapField().get(3).getValue()); 644 assertEquals(4, message.getRecursiveMapField().get(3).getValue());
864 } 645 }
865 646
866 public void testIterationOrder() throws Exception { 647 public void testIterationOrder() throws Exception {
867 TestMap.Builder builder = TestMap.newBuilder(); 648 TestMap.Builder builder = TestMap.newBuilder();
868 setMapValuesUsingAccessors(builder); 649 setMapValues(builder);
869 TestMap message = builder.build(); 650 TestMap message = builder.build();
870 651
871 assertEquals(Arrays.asList("1", "2", "3"), 652 assertEquals(Arrays.asList("1", "2", "3"),
872 new ArrayList<String>(message.getStringToInt32Field().keySet())); 653 new ArrayList<String>(message.getStringToInt32Field().keySet()));
873 } 654 }
874 655
875 public void testContains() {
876 TestMap.Builder builder = TestMap.newBuilder();
877 setMapValuesUsingAccessors(builder);
878 assertMapContainsSetValues(builder);
879 assertMapContainsSetValues(builder.build());
880 }
881
882 private void assertMapContainsSetValues(TestMapOrBuilder testMapOrBuilder) {
883 assertTrue(testMapOrBuilder.containsInt32ToInt32Field(1));
884 assertTrue(testMapOrBuilder.containsInt32ToInt32Field(2));
885 assertTrue(testMapOrBuilder.containsInt32ToInt32Field(3));
886 assertFalse(testMapOrBuilder.containsInt32ToInt32Field(-1));
887
888 assertTrue(testMapOrBuilder.containsInt32ToStringField(1));
889 assertTrue(testMapOrBuilder.containsInt32ToStringField(2));
890 assertTrue(testMapOrBuilder.containsInt32ToStringField(3));
891 assertFalse(testMapOrBuilder.containsInt32ToStringField(-1));
892
893 assertTrue(testMapOrBuilder.containsInt32ToBytesField(1));
894 assertTrue(testMapOrBuilder.containsInt32ToBytesField(2));
895 assertTrue(testMapOrBuilder.containsInt32ToBytesField(3));
896 assertFalse(testMapOrBuilder.containsInt32ToBytesField(-1));
897
898 assertTrue(testMapOrBuilder.containsInt32ToEnumField(1));
899 assertTrue(testMapOrBuilder.containsInt32ToEnumField(2));
900 assertTrue(testMapOrBuilder.containsInt32ToEnumField(3));
901 assertFalse(testMapOrBuilder.containsInt32ToEnumField(-1));
902
903 assertTrue(testMapOrBuilder.containsInt32ToMessageField(1));
904 assertTrue(testMapOrBuilder.containsInt32ToMessageField(2));
905 assertTrue(testMapOrBuilder.containsInt32ToMessageField(3));
906 assertFalse(testMapOrBuilder.containsInt32ToMessageField(-1));
907
908 assertTrue(testMapOrBuilder.containsStringToInt32Field("1"));
909 assertTrue(testMapOrBuilder.containsStringToInt32Field("2"));
910 assertTrue(testMapOrBuilder.containsStringToInt32Field("3"));
911 assertFalse(testMapOrBuilder.containsStringToInt32Field("-1"));
912 }
913
914 public void testCount() {
915 TestMap.Builder builder = TestMap.newBuilder();
916 assertMapCounts(0, builder);
917
918 setMapValuesUsingAccessors(builder);
919 assertMapCounts(3, builder);
920
921 TestMap message = builder.build();
922 assertMapCounts(3, message);
923
924 builder = message.toBuilder().putInt32ToInt32Field(4, 44);
925 assertEquals(4, builder.getInt32ToInt32FieldCount());
926 assertEquals(4, builder.build().getInt32ToInt32FieldCount());
927
928 // already present - should be unchanged
929 builder.putInt32ToInt32Field(4, 44);
930 assertEquals(4, builder.getInt32ToInt32FieldCount());
931 }
932
933 private void assertMapCounts(int expectedCount, TestMapOrBuilder testMapOrBuil der) {
934 assertEquals(expectedCount, testMapOrBuilder.getInt32ToInt32FieldCount());
935 assertEquals(expectedCount, testMapOrBuilder.getInt32ToStringFieldCount());
936 assertEquals(expectedCount, testMapOrBuilder.getInt32ToBytesFieldCount());
937 assertEquals(expectedCount, testMapOrBuilder.getInt32ToEnumFieldCount());
938 assertEquals(expectedCount, testMapOrBuilder.getInt32ToMessageFieldCount());
939 assertEquals(expectedCount, testMapOrBuilder.getStringToInt32FieldCount());
940 }
941
942 public void testGetOrDefault() {
943 TestMap.Builder builder = TestMap.newBuilder();
944 assertMapCounts(0, builder);
945 setMapValuesUsingAccessors(builder);
946 doTestGetOrDefault(builder);
947 doTestGetOrDefault(builder.build());
948 }
949
950 public void doTestGetOrDefault(TestMapOrBuilder testMapOrBuilder) {
951 assertEquals(11, testMapOrBuilder.getInt32ToInt32FieldOrDefault(1, -11));
952 assertEquals(-11, testMapOrBuilder.getInt32ToInt32FieldOrDefault(-1, -11));
953
954 assertEquals("11", testMapOrBuilder.getInt32ToStringFieldOrDefault(1, "-11") );
955 assertNull("-11", testMapOrBuilder.getInt32ToStringFieldOrDefault(-1, null)) ;
956
957 assertEquals(TestUtil.toBytes("11"), testMapOrBuilder.getInt32ToBytesFieldOr Default(1, null));
958 assertNull(testMapOrBuilder.getInt32ToBytesFieldOrDefault(-1, null));
959
960 assertEquals(TestMap.EnumValue.FOO, testMapOrBuilder.getInt32ToEnumFieldOrDe fault(1, null));
961 assertNull(testMapOrBuilder.getInt32ToEnumFieldOrDefault(-1, null));
962
963 assertEquals(MessageValue.newBuilder().setValue(11).build(),
964 testMapOrBuilder.getInt32ToMessageFieldOrDefault(1, null));
965 assertNull(testMapOrBuilder.getInt32ToMessageFieldOrDefault(-1, null));
966
967 assertEquals(11, testMapOrBuilder.getStringToInt32FieldOrDefault("1", -11));
968 assertEquals(-11, testMapOrBuilder.getStringToInt32FieldOrDefault("-1", -11) );
969
970 try {
971 testMapOrBuilder.getStringToInt32FieldOrDefault(null, -11);
972 fail();
973 } catch (NullPointerException e) {
974 // expected
975 }
976 }
977
978 public void testGetOrThrow() {
979 TestMap.Builder builder = TestMap.newBuilder();
980 assertMapCounts(0, builder);
981 setMapValuesUsingAccessors(builder);
982 doTestGetOrDefault(builder);
983 doTestGetOrDefault(builder.build());
984 }
985
986 public void doTestGetOrThrow(TestMapOrBuilder testMapOrBuilder) {
987 assertEquals(11, testMapOrBuilder.getInt32ToInt32FieldOrThrow(1));
988 try {
989 testMapOrBuilder.getInt32ToInt32FieldOrThrow(-1);
990 fail();
991 } catch (IllegalArgumentException e) {
992 // expected
993 }
994
995 assertEquals("11", testMapOrBuilder.getInt32ToStringFieldOrThrow(1));
996
997 try {
998 testMapOrBuilder.getInt32ToStringFieldOrThrow(-1);
999 fail();
1000 } catch (IllegalArgumentException e) {
1001 // expected
1002 }
1003
1004 assertEquals(TestUtil.toBytes("11"), testMapOrBuilder.getInt32ToBytesFieldOr Throw(1));
1005
1006 try {
1007 testMapOrBuilder.getInt32ToBytesFieldOrThrow(-1);
1008 fail();
1009 } catch (IllegalArgumentException e) {
1010 // expected
1011 }
1012
1013 assertEquals(TestMap.EnumValue.FOO, testMapOrBuilder.getInt32ToEnumFieldOrTh row(1));
1014 try {
1015 testMapOrBuilder.getInt32ToEnumFieldOrThrow(-1);
1016 fail();
1017 } catch (IllegalArgumentException e) {
1018 // expected
1019 }
1020
1021 assertEquals(MessageValue.newBuilder().setValue(11).build(),
1022 testMapOrBuilder.getInt32ToMessageFieldOrThrow(1));
1023 try {
1024 testMapOrBuilder.getInt32ToMessageFieldOrThrow(-1);
1025 fail();
1026 } catch (IllegalArgumentException e) {
1027 // expected
1028 }
1029
1030 assertEquals(11, testMapOrBuilder.getStringToInt32FieldOrThrow("1"));
1031 try {
1032 testMapOrBuilder.getStringToInt32FieldOrThrow("-1");
1033 fail();
1034 } catch (IllegalArgumentException e) {
1035 // expected
1036 }
1037
1038 try {
1039 testMapOrBuilder.getStringToInt32FieldOrThrow(null);
1040 fail();
1041 } catch (NullPointerException e) {
1042 // expected
1043 }
1044 }
1045
1046 public void testPut() {
1047 TestMap.Builder builder = TestMap.newBuilder();
1048 builder.putInt32ToInt32Field(1, 11);
1049 assertEquals(11, builder.getInt32ToInt32FieldOrThrow(1));
1050
1051 builder.putInt32ToStringField(1, "a");
1052 assertEquals("a", builder.getInt32ToStringFieldOrThrow(1));
1053 try {
1054 builder.putInt32ToStringField(1, null);
1055 fail();
1056 } catch (NullPointerException e) {
1057 // expected
1058 }
1059
1060 builder.putInt32ToBytesField(1, TestUtil.toBytes("11"));
1061 assertEquals(TestUtil.toBytes("11"), builder.getInt32ToBytesFieldOrThrow(1)) ;
1062 try {
1063 builder.putInt32ToBytesField(1, null);
1064 fail();
1065 } catch (NullPointerException e) {
1066 // expected
1067 }
1068
1069 builder.putInt32ToEnumField(1, TestMap.EnumValue.FOO);
1070 assertEquals(TestMap.EnumValue.FOO, builder.getInt32ToEnumFieldOrThrow(1));
1071 try {
1072 builder.putInt32ToEnumField(1, null);
1073 fail();
1074 } catch (NullPointerException e) {
1075 // expected
1076 }
1077
1078 builder.putStringToInt32Field("a", 1);
1079 assertEquals(1, builder.getStringToInt32FieldOrThrow("a"));
1080 try {
1081 builder.putStringToInt32Field(null, -1);
1082 } catch (NullPointerException e) {
1083 // expected
1084 }
1085 }
1086
1087 public void testRemove() {
1088 TestMap.Builder builder = TestMap.newBuilder();
1089 setMapValuesUsingAccessors(builder);
1090 assertEquals(11, builder.getInt32ToInt32FieldOrThrow(1));
1091 for (int times = 0; times < 2; times++) {
1092 builder.removeInt32ToInt32Field(1);
1093 assertEquals(-1, builder.getInt32ToInt32FieldOrDefault(1, -1));
1094 }
1095
1096 assertEquals("11", builder.getInt32ToStringFieldOrThrow(1));
1097 for (int times = 0; times < 2; times++) {
1098 builder.removeInt32ToStringField(1);
1099 assertNull(builder.getInt32ToStringFieldOrDefault(1, null));
1100 }
1101
1102 assertEquals(TestUtil.toBytes("11"), builder.getInt32ToBytesFieldOrThrow(1)) ;
1103 for (int times = 0; times < 2; times++) {
1104 builder.removeInt32ToBytesField(1);
1105 assertNull(builder.getInt32ToBytesFieldOrDefault(1, null));
1106 }
1107
1108 assertEquals(TestMap.EnumValue.FOO, builder.getInt32ToEnumFieldOrThrow(1));
1109 for (int times = 0; times < 2; times++) {
1110 builder.removeInt32ToEnumField(1);
1111 assertNull(builder.getInt32ToEnumFieldOrDefault(1, null));
1112 }
1113
1114 assertEquals(11, builder.getStringToInt32FieldOrThrow("1"));
1115 for (int times = 0; times < 2; times++) {
1116 builder.removeStringToInt32Field("1");
1117 assertEquals(-1, builder.getStringToInt32FieldOrDefault("1", -1));
1118 }
1119
1120 try {
1121 builder.removeStringToInt32Field(null);
1122 fail();
1123 } catch (NullPointerException e) {
1124 // expected
1125 }
1126 }
1127
1128 // Regression test for b/20494788 656 // Regression test for b/20494788
1129 public void testMapInitializationOrder() throws Exception { 657 public void testMapInitializationOrder() throws Exception {
1130 assertEquals("RedactAllTypes", map_test.RedactAllTypes 658 assertEquals("RedactAllTypes", map_test.RedactAllTypes
1131 .getDefaultInstance().getDescriptorForType().getName()); 659 .getDefaultInstance().getDescriptorForType().getName());
1132 660
1133 map_test.Message1.Builder builder = 661 map_test.Message1.Builder builder =
1134 map_test.Message1.newBuilder(); 662 map_test.Message1.newBuilder();
1135 builder.putMapField("key", true); 663 builder.getMutableMapField().put("key", true);
1136 map_test.Message1 message = builder.build(); 664 map_test.Message1 message = builder.build();
1137 Message mapEntry = (Message) message.getRepeatedField( 665 Message mapEntry = (Message) message.getRepeatedField(
1138 message.getDescriptorForType().findFieldByName("map_field"), 0); 666 message.getDescriptorForType().findFieldByName("map_field"), 0);
1139 assertEquals(2, mapEntry.getAllFields().size()); 667 assertEquals(2, mapEntry.getAllFields().size());
1140 } 668 }
1141 669
1142 public void testReservedWordsFieldNames() {
1143 ReservedAsMapField.newBuilder().build();
1144 ReservedAsMapFieldWithEnumValue.newBuilder().build();
1145 }
1146
1147 private static <K, V> Map<K, V> newMap(K key1, V value1) { 670 private static <K, V> Map<K, V> newMap(K key1, V value1) {
1148 Map<K, V> map = new HashMap<K, V>(); 671 Map<K, V> map = new HashMap<K, V>();
1149 map.put(key1, value1); 672 map.put(key1, value1);
1150 return map; 673 return map;
1151 } 674 }
1152 675
1153 private static <K, V> Map<K, V> newMap(K key1, V value1, K key2, V value2) { 676 private static <K, V> Map<K, V> newMap(K key1, V value1, K key2, V value2) {
1154 Map<K, V> map = new HashMap<K, V>(); 677 Map<K, V> map = new HashMap<K, V>();
1155 map.put(key1, value1); 678 map.put(key1, value1);
1156 map.put(key2, value2); 679 map.put(key2, value2);
1157 return map; 680 return map;
1158 } 681 }
682 }
1159 683
1160 public void testGetMap() {
1161 TestMap.Builder builder = TestMap.newBuilder();
1162 setMapValuesUsingAccessors(builder);
1163 assertMapValuesSet(builder);
1164 TestMap message = builder.build();
1165 assertEquals(
1166 message.getStringToInt32Field(),
1167 message.getStringToInt32FieldMap());
1168 assertEquals(
1169 message.getInt32ToBytesField(),
1170 message.getInt32ToBytesFieldMap());
1171 assertEquals(
1172 message.getInt32ToEnumField(),
1173 message.getInt32ToEnumFieldMap());
1174 assertEquals(
1175 message.getInt32ToMessageField(),
1176 message.getInt32ToMessageFieldMap());
1177 }
1178 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698