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

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

Issue 2495533002: third_party/protobuf: Update to HEAD (83d681ee2c) (Closed)
Patch Set: Make chrome settings proto generated file a component Created 4 years 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;
34 import map_test.MapForProto2TestProto.TestMap; 37 import map_test.MapForProto2TestProto.TestMap;
35 import map_test.MapForProto2TestProto.TestMap.MessageValue; 38 import map_test.MapForProto2TestProto.TestMap.MessageValue;
36 import map_test.MapForProto2TestProto.TestMap.MessageWithRequiredFields; 39 import map_test.MapForProto2TestProto.TestMap.MessageWithRequiredFields;
40 import map_test.MapForProto2TestProto.TestMapOrBuilder;
37 import map_test.MapForProto2TestProto.TestRecursiveMap; 41 import map_test.MapForProto2TestProto.TestRecursiveMap;
38 import map_test.MapForProto2TestProto.TestUnknownEnumValue; 42 import map_test.MapForProto2TestProto.TestUnknownEnumValue;
39 import junit.framework.TestCase; 43 import java.io.ByteArrayOutputStream;
40 44 import java.io.IOException;
41 import java.util.ArrayList; 45 import java.util.ArrayList;
42 import java.util.Arrays; 46 import java.util.Arrays;
43 import java.util.HashMap; 47 import java.util.HashMap;
44 import java.util.List; 48 import java.util.List;
45 import java.util.Map; 49 import java.util.Map;
50 import junit.framework.TestCase;
46 51
47 /** 52 /**
48 * Unit tests for map fields in proto2 protos. 53 * Unit tests for map fields in proto2 protos.
49 */ 54 */
50 public class MapForProto2Test extends TestCase { 55 public class MapForProto2Test extends TestCase {
51 private void setMapValues(TestMap.Builder builder) { 56
57 private void setMapValuesUsingMutableMap(TestMap.Builder builder) {
52 builder.getMutableInt32ToInt32Field().put(1, 11); 58 builder.getMutableInt32ToInt32Field().put(1, 11);
53 builder.getMutableInt32ToInt32Field().put(2, 22); 59 builder.getMutableInt32ToInt32Field().put(2, 22);
54 builder.getMutableInt32ToInt32Field().put(3, 33); 60 builder.getMutableInt32ToInt32Field().put(3, 33);
55 61 //
56 builder.getMutableInt32ToStringField().put(1, "11"); 62 builder.getMutableInt32ToStringField().put(1, "11");
57 builder.getMutableInt32ToStringField().put(2, "22"); 63 builder.getMutableInt32ToStringField().put(2, "22");
58 builder.getMutableInt32ToStringField().put(3, "33"); 64 builder.getMutableInt32ToStringField().put(3, "33");
59 65 //
60 builder.getMutableInt32ToBytesField().put(1, TestUtil.toBytes("11")); 66 builder.getMutableInt32ToBytesField().put(1, TestUtil.toBytes("11"));
61 builder.getMutableInt32ToBytesField().put(2, TestUtil.toBytes("22")); 67 builder.getMutableInt32ToBytesField().put(2, TestUtil.toBytes("22"));
62 builder.getMutableInt32ToBytesField().put(3, TestUtil.toBytes("33")); 68 builder.getMutableInt32ToBytesField().put(3, TestUtil.toBytes("33"));
63 69 //
64 builder.getMutableInt32ToEnumField().put(1, TestMap.EnumValue.FOO); 70 builder.getMutableInt32ToEnumField().put(1, TestMap.EnumValue.FOO);
65 builder.getMutableInt32ToEnumField().put(2, TestMap.EnumValue.BAR); 71 builder.getMutableInt32ToEnumField().put(2, TestMap.EnumValue.BAR);
66 builder.getMutableInt32ToEnumField().put(3, TestMap.EnumValue.BAZ); 72 builder.getMutableInt32ToEnumField().put(3, TestMap.EnumValue.BAZ);
67 73 //
68 builder.getMutableInt32ToMessageField().put( 74 builder.getMutableInt32ToMessageField().put(
69 1, MessageValue.newBuilder().setValue(11).build()); 75 1, MessageValue.newBuilder().setValue(11).build());
70 builder.getMutableInt32ToMessageField().put( 76 builder.getMutableInt32ToMessageField().put(
71 2, MessageValue.newBuilder().setValue(22).build()); 77 2, MessageValue.newBuilder().setValue(22).build());
72 builder.getMutableInt32ToMessageField().put( 78 builder.getMutableInt32ToMessageField().put(
73 3, MessageValue.newBuilder().setValue(33).build()); 79 3, MessageValue.newBuilder().setValue(33).build());
74 80 //
75 builder.getMutableStringToInt32Field().put("1", 11); 81 builder.getMutableStringToInt32Field().put("1", 11);
76 builder.getMutableStringToInt32Field().put("2", 22); 82 builder.getMutableStringToInt32Field().put("2", 22);
77 builder.getMutableStringToInt32Field().put("3", 33); 83 builder.getMutableStringToInt32Field().put("3", 33);
78 } 84 }
79 85
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
80 private void copyMapValues(TestMap source, TestMap.Builder destination) { 127 private void copyMapValues(TestMap source, TestMap.Builder destination) {
81 destination 128 destination
82 .putAllInt32ToInt32Field(source.getInt32ToInt32Field()) 129 .putAllInt32ToInt32Field(source.getInt32ToInt32Field())
83 .putAllInt32ToStringField(source.getInt32ToStringField()) 130 .putAllInt32ToStringField(source.getInt32ToStringField())
84 .putAllInt32ToBytesField(source.getInt32ToBytesField()) 131 .putAllInt32ToBytesField(source.getInt32ToBytesField())
85 .putAllInt32ToEnumField(source.getInt32ToEnumField()) 132 .putAllInt32ToEnumField(source.getInt32ToEnumField())
86 .putAllInt32ToMessageField(source.getInt32ToMessageField()) 133 .putAllInt32ToMessageField(source.getInt32ToMessageField())
87 .putAllStringToInt32Field(source.getStringToInt32Field()); 134 .putAllStringToInt32Field(source.getStringToInt32Field());
88 } 135 }
89 136
90 private void assertMapValuesSet(TestMap message) { 137 private void assertMapValuesSet(TestMapOrBuilder message) {
91 assertEquals(3, message.getInt32ToInt32Field().size()); 138 assertEquals(3, message.getInt32ToInt32Field().size());
92 assertEquals(11, message.getInt32ToInt32Field().get(1).intValue()); 139 assertEquals(11, message.getInt32ToInt32Field().get(1).intValue());
93 assertEquals(22, message.getInt32ToInt32Field().get(2).intValue()); 140 assertEquals(22, message.getInt32ToInt32Field().get(2).intValue());
94 assertEquals(33, message.getInt32ToInt32Field().get(3).intValue()); 141 assertEquals(33, message.getInt32ToInt32Field().get(3).intValue());
95 142
96 assertEquals(3, message.getInt32ToStringField().size()); 143 assertEquals(3, message.getInt32ToStringField().size());
97 assertEquals("11", message.getInt32ToStringField().get(1)); 144 assertEquals("11", message.getInt32ToStringField().get(1));
98 assertEquals("22", message.getInt32ToStringField().get(2)); 145 assertEquals("22", message.getInt32ToStringField().get(2));
99 assertEquals("33", message.getInt32ToStringField().get(3)); 146 assertEquals("33", message.getInt32ToStringField().get(3));
100 147
101 assertEquals(3, message.getInt32ToBytesField().size()); 148 assertEquals(3, message.getInt32ToBytesField().size());
102 assertEquals(TestUtil.toBytes("11"), message.getInt32ToBytesField().get(1)); 149 assertEquals(TestUtil.toBytes("11"), message.getInt32ToBytesField().get(1));
103 assertEquals(TestUtil.toBytes("22"), message.getInt32ToBytesField().get(2)); 150 assertEquals(TestUtil.toBytes("22"), message.getInt32ToBytesField().get(2));
104 assertEquals(TestUtil.toBytes("33"), message.getInt32ToBytesField().get(3)); 151 assertEquals(TestUtil.toBytes("33"), message.getInt32ToBytesField().get(3));
105 152
106 assertEquals(3, message.getInt32ToEnumField().size()); 153 assertEquals(3, message.getInt32ToEnumField().size());
107 assertEquals(TestMap.EnumValue.FOO, message.getInt32ToEnumField().get(1)); 154 assertEquals(TestMap.EnumValue.FOO, message.getInt32ToEnumField().get(1));
108 assertEquals(TestMap.EnumValue.BAR, message.getInt32ToEnumField().get(2)); 155 assertEquals(TestMap.EnumValue.BAR, message.getInt32ToEnumField().get(2));
109 assertEquals(TestMap.EnumValue.BAZ, message.getInt32ToEnumField().get(3)); 156 assertEquals(TestMap.EnumValue.BAZ, message.getInt32ToEnumField().get(3));
110 157
111 assertEquals(3, message.getInt32ToMessageField().size()); 158 assertEquals(3, message.getInt32ToMessageField().size());
112 assertEquals(11, message.getInt32ToMessageField().get(1).getValue()); 159 assertEquals(11, message.getInt32ToMessageField().get(1).getValue());
113 assertEquals(22, message.getInt32ToMessageField().get(2).getValue()); 160 assertEquals(22, message.getInt32ToMessageField().get(2).getValue());
114 assertEquals(33, message.getInt32ToMessageField().get(3).getValue()); 161 assertEquals(33, message.getInt32ToMessageField().get(3).getValue());
115 162
116 assertEquals(3, message.getStringToInt32Field().size()); 163 assertEquals(3, message.getStringToInt32Field().size());
117 assertEquals(11, message.getStringToInt32Field().get("1").intValue()); 164 assertEquals(11, message.getStringToInt32Field().get("1").intValue());
118 assertEquals(22, message.getStringToInt32Field().get("2").intValue()); 165 assertEquals(22, message.getStringToInt32Field().get("2").intValue());
119 assertEquals(33, message.getStringToInt32Field().get("3").intValue()); 166 assertEquals(33, message.getStringToInt32Field().get("3").intValue());
120 } 167 }
121 168
122 private void updateMapValues(TestMap.Builder builder) { 169 private void updateMapValuesUsingMutableMap(TestMap.Builder builder) {
123 builder.getMutableInt32ToInt32Field().put(1, 111); 170 builder.getMutableInt32ToInt32Field().put(1, 111);
124 builder.getMutableInt32ToInt32Field().remove(2); 171 builder.getMutableInt32ToInt32Field().remove(2);
125 builder.getMutableInt32ToInt32Field().put(4, 44); 172 builder.getMutableInt32ToInt32Field().put(4, 44);
126 173 //
127 builder.getMutableInt32ToStringField().put(1, "111"); 174 builder.getMutableInt32ToStringField().put(1, "111");
128 builder.getMutableInt32ToStringField().remove(2); 175 builder.getMutableInt32ToStringField().remove(2);
129 builder.getMutableInt32ToStringField().put(4, "44"); 176 builder.getMutableInt32ToStringField().put(4, "44");
130 177 //
131 builder.getMutableInt32ToBytesField().put(1, TestUtil.toBytes("111")); 178 builder.getMutableInt32ToBytesField().put(1, TestUtil.toBytes("111"));
132 builder.getMutableInt32ToBytesField().remove(2); 179 builder.getMutableInt32ToBytesField().remove(2);
133 builder.getMutableInt32ToBytesField().put(4, TestUtil.toBytes("44")); 180 builder.getMutableInt32ToBytesField().put(4, TestUtil.toBytes("44"));
134 181 //
135 builder.getMutableInt32ToEnumField().put(1, TestMap.EnumValue.BAR); 182 builder.getMutableInt32ToEnumField().put(1, TestMap.EnumValue.BAR);
136 builder.getMutableInt32ToEnumField().remove(2); 183 builder.getMutableInt32ToEnumField().remove(2);
137 builder.getMutableInt32ToEnumField().put(4, TestMap.EnumValue.QUX); 184 builder.getMutableInt32ToEnumField().put(4, TestMap.EnumValue.QUX);
138 185 //
139 builder.getMutableInt32ToMessageField().put( 186 builder.getMutableInt32ToMessageField().put(
140 1, MessageValue.newBuilder().setValue(111).build()); 187 1, MessageValue.newBuilder().setValue(111).build());
141 builder.getMutableInt32ToMessageField().remove(2); 188 builder.getMutableInt32ToMessageField().remove(2);
142 builder.getMutableInt32ToMessageField().put( 189 builder.getMutableInt32ToMessageField().put(
143 4, MessageValue.newBuilder().setValue(44).build()); 190 4, MessageValue.newBuilder().setValue(44).build());
144 191 //
145 builder.getMutableStringToInt32Field().put("1", 111); 192 builder.getMutableStringToInt32Field().put("1", 111);
146 builder.getMutableStringToInt32Field().remove("2"); 193 builder.getMutableStringToInt32Field().remove("2");
147 builder.getMutableStringToInt32Field().put("4", 44); 194 builder.getMutableStringToInt32Field().put("4", 44);
148 } 195 }
149 196
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
150 private void assertMapValuesUpdated(TestMap message) { 250 private void assertMapValuesUpdated(TestMap message) {
151 assertEquals(3, message.getInt32ToInt32Field().size()); 251 assertEquals(3, message.getInt32ToInt32Field().size());
152 assertEquals(111, message.getInt32ToInt32Field().get(1).intValue()); 252 assertEquals(111, message.getInt32ToInt32Field().get(1).intValue());
153 assertEquals(33, message.getInt32ToInt32Field().get(3).intValue()); 253 assertEquals(33, message.getInt32ToInt32Field().get(3).intValue());
154 assertEquals(44, message.getInt32ToInt32Field().get(4).intValue()); 254 assertEquals(44, message.getInt32ToInt32Field().get(4).intValue());
155 255
156 assertEquals(3, message.getInt32ToStringField().size()); 256 assertEquals(3, message.getInt32ToStringField().size());
157 assertEquals("111", message.getInt32ToStringField().get(1)); 257 assertEquals("111", message.getInt32ToStringField().get(1));
158 assertEquals("33", message.getInt32ToStringField().get(3)); 258 assertEquals("33", message.getInt32ToStringField().get(3));
159 assertEquals("44", message.getInt32ToStringField().get(4)); 259 assertEquals("44", message.getInt32ToStringField().get(4));
160 260
161 assertEquals(3, message.getInt32ToBytesField().size()); 261 assertEquals(3, message.getInt32ToBytesField().size());
162 assertEquals(TestUtil.toBytes("111"), message.getInt32ToBytesField().get(1)) ; 262 assertEquals(TestUtil.toBytes("111"), message.getInt32ToBytesField().get(1)) ;
163 assertEquals(TestUtil.toBytes("33"), message.getInt32ToBytesField().get(3)); 263 assertEquals(TestUtil.toBytes("33"), message.getInt32ToBytesField().get(3));
164 assertEquals(TestUtil.toBytes("44"), message.getInt32ToBytesField().get(4)); 264 assertEquals(TestUtil.toBytes("44"), message.getInt32ToBytesField().get(4));
165 265
166 assertEquals(3, message.getInt32ToEnumField().size()); 266 assertEquals(3, message.getInt32ToEnumField().size());
167 assertEquals(TestMap.EnumValue.BAR, message.getInt32ToEnumField().get(1)); 267 assertEquals(TestMap.EnumValue.BAR, message.getInt32ToEnumField().get(1));
168 assertEquals(TestMap.EnumValue.BAZ, message.getInt32ToEnumField().get(3)); 268 assertEquals(TestMap.EnumValue.BAZ, message.getInt32ToEnumField().get(3));
169 assertEquals(TestMap.EnumValue.QUX, message.getInt32ToEnumField().get(4)); 269 assertEquals(TestMap.EnumValue.QUX, message.getInt32ToEnumField().get(4));
170 270
171 assertEquals(3, message.getInt32ToMessageField().size()); 271 assertEquals(3, message.getInt32ToMessageField().size());
172 assertEquals(111, message.getInt32ToMessageField().get(1).getValue()); 272 assertEquals(111, message.getInt32ToMessageField().get(1).getValue());
173 assertEquals(33, message.getInt32ToMessageField().get(3).getValue()); 273 assertEquals(33, message.getInt32ToMessageField().get(3).getValue());
174 assertEquals(44, message.getInt32ToMessageField().get(4).getValue()); 274 assertEquals(44, message.getInt32ToMessageField().get(4).getValue());
175 275
176 assertEquals(3, message.getStringToInt32Field().size()); 276 assertEquals(3, message.getStringToInt32Field().size());
177 assertEquals(111, message.getStringToInt32Field().get("1").intValue()); 277 assertEquals(111, message.getStringToInt32Field().get("1").intValue());
178 assertEquals(33, message.getStringToInt32Field().get("3").intValue()); 278 assertEquals(33, message.getStringToInt32Field().get("3").intValue());
179 assertEquals(44, message.getStringToInt32Field().get("4").intValue()); 279 assertEquals(44, message.getStringToInt32Field().get("4").intValue());
180 } 280 }
181 281
182 private void assertMapValuesCleared(TestMap message) { 282 private void assertMapValuesCleared(TestMapOrBuilder testMapOrBuilder) {
183 assertEquals(0, message.getInt32ToInt32Field().size()); 283 assertEquals(0, testMapOrBuilder.getInt32ToInt32Field().size());
184 assertEquals(0, message.getInt32ToStringField().size()); 284 assertEquals(0, testMapOrBuilder.getInt32ToInt32FieldCount());
185 assertEquals(0, message.getInt32ToBytesField().size()); 285 assertEquals(0, testMapOrBuilder.getInt32ToStringField().size());
186 assertEquals(0, message.getInt32ToEnumField().size()); 286 assertEquals(0, testMapOrBuilder.getInt32ToStringFieldCount());
187 assertEquals(0, message.getInt32ToMessageField().size()); 287 assertEquals(0, testMapOrBuilder.getInt32ToBytesField().size());
188 assertEquals(0, message.getStringToInt32Field().size()); 288 assertEquals(0, testMapOrBuilder.getInt32ToBytesFieldCount());
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());
189 } 295 }
190 296
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
191 public void testMutableMapLifecycle() { 326 public void testMutableMapLifecycle() {
192 TestMap.Builder builder = TestMap.newBuilder(); 327 TestMap.Builder builder = TestMap.newBuilder();
193 Map<Integer, Integer> intMap = builder.getMutableInt32ToInt32Field(); 328 Map<Integer, Integer> intMap = builder.getMutableInt32ToInt32Field();
194 intMap.put(1, 2); 329 intMap.put(1, 2);
195 assertEquals(newMap(1, 2), builder.build().getInt32ToInt32Field()); 330 assertEquals(newMap(1, 2), builder.build().getInt32ToInt32Field());
196 try { 331 try {
197 intMap.put(2, 3); 332 intMap.put(2, 3);
198 fail(); 333 fail();
199 } catch (UnsupportedOperationException e) { 334 } catch (UnsupportedOperationException e) {
200 // expected 335 // expected
201 } 336 }
202 assertEquals(newMap(1, 2), builder.getInt32ToInt32Field()); 337 assertEquals(newMap(1, 2), builder.getInt32ToInt32Field());
203 builder.getMutableInt32ToInt32Field().put(2, 3); 338 builder.getMutableInt32ToInt32Field().put(2, 3);
204 assertEquals(newMap(1, 2, 2, 3), builder.getInt32ToInt32Field()); 339 assertEquals(newMap(1, 2, 2, 3), builder.getInt32ToInt32Field());
205 340 //
206 Map<Integer, TestMap.EnumValue> enumMap = builder.getMutableInt32ToEnumField (); 341 Map<Integer, TestMap.EnumValue> enumMap = builder.getMutableInt32ToEnumField ();
207 enumMap.put(1, TestMap.EnumValue.BAR); 342 enumMap.put(1, TestMap.EnumValue.BAR);
208 assertEquals(newMap(1, TestMap.EnumValue.BAR), builder.build().getInt32ToEnu mField()); 343 assertEquals(newMap(1, TestMap.EnumValue.BAR), builder.build().getInt32ToEnu mField());
209 try { 344 try {
210 enumMap.put(2, TestMap.EnumValue.FOO); 345 enumMap.put(2, TestMap.EnumValue.FOO);
211 fail(); 346 fail();
212 } catch (UnsupportedOperationException e) { 347 } catch (UnsupportedOperationException e) {
213 // expected 348 // expected
214 } 349 }
215 assertEquals(newMap(1, TestMap.EnumValue.BAR), builder.getInt32ToEnumField() ); 350 assertEquals(newMap(1, TestMap.EnumValue.BAR), builder.getInt32ToEnumField() );
216 builder.getMutableInt32ToEnumField().put(2, TestMap.EnumValue.FOO); 351 builder.getMutableInt32ToEnumField().put(2, TestMap.EnumValue.FOO);
217 assertEquals( 352 assertEquals(
218 newMap(1, TestMap.EnumValue.BAR, 2, TestMap.EnumValue.FOO), 353 newMap(1, TestMap.EnumValue.BAR, 2, TestMap.EnumValue.FOO),
219 builder.getInt32ToEnumField()); 354 builder.getInt32ToEnumField());
220 355 //
221 Map<Integer, String> stringMap = builder.getMutableInt32ToStringField(); 356 Map<Integer, String> stringMap = builder.getMutableInt32ToStringField();
222 stringMap.put(1, "1"); 357 stringMap.put(1, "1");
223 assertEquals(newMap(1, "1"), builder.build().getInt32ToStringField()); 358 assertEquals(newMap(1, "1"), builder.build().getInt32ToStringField());
224 try { 359 try {
225 stringMap.put(2, "2"); 360 stringMap.put(2, "2");
226 fail(); 361 fail();
227 } catch (UnsupportedOperationException e) { 362 } catch (UnsupportedOperationException e) {
228 // expected 363 // expected
229 } 364 }
230 assertEquals(newMap(1, "1"), builder.getInt32ToStringField()); 365 assertEquals(newMap(1, "1"), builder.getInt32ToStringField());
231 builder.getMutableInt32ToStringField().put(2, "2"); 366 builder.getMutableInt32ToStringField().put(2, "2");
232 assertEquals( 367 assertEquals(
233 newMap(1, "1", 2, "2"), 368 newMap(1, "1", 2, "2"),
234 builder.getInt32ToStringField()); 369 builder.getInt32ToStringField());
235 370 //
236 Map<Integer, TestMap.MessageValue> messageMap = builder.getMutableInt32ToMes sageField(); 371 Map<Integer, TestMap.MessageValue> messageMap = builder.getMutableInt32ToMes sageField();
237 messageMap.put(1, TestMap.MessageValue.getDefaultInstance()); 372 messageMap.put(1, TestMap.MessageValue.getDefaultInstance());
238 assertEquals(newMap(1, TestMap.MessageValue.getDefaultInstance()), 373 assertEquals(newMap(1, TestMap.MessageValue.getDefaultInstance()),
239 builder.build().getInt32ToMessageField()); 374 builder.build().getInt32ToMessageField());
240 try { 375 try {
241 messageMap.put(2, TestMap.MessageValue.getDefaultInstance()); 376 messageMap.put(2, TestMap.MessageValue.getDefaultInstance());
242 fail(); 377 fail();
243 } catch (UnsupportedOperationException e) { 378 } catch (UnsupportedOperationException e) {
244 // expected 379 // expected
245 } 380 }
246 assertEquals(newMap(1, TestMap.MessageValue.getDefaultInstance()), 381 assertEquals(newMap(1, TestMap.MessageValue.getDefaultInstance()),
247 builder.getInt32ToMessageField()); 382 builder.getInt32ToMessageField());
248 builder.getMutableInt32ToMessageField().put(2, TestMap.MessageValue.getDefau ltInstance()); 383 builder.getMutableInt32ToMessageField().put(2, TestMap.MessageValue.getDefau ltInstance());
249 assertEquals( 384 assertEquals(
250 newMap(1, TestMap.MessageValue.getDefaultInstance(), 385 newMap(1, TestMap.MessageValue.getDefaultInstance(),
251 2, TestMap.MessageValue.getDefaultInstance()), 386 2, TestMap.MessageValue.getDefaultInstance()),
252 builder.getInt32ToMessageField()); 387 builder.getInt32ToMessageField());
253 } 388 }
254 389 //
255 public void testMutableMapLifecycle_collections() { 390 public void testMutableMapLifecycle_collections() {
256 TestMap.Builder builder = TestMap.newBuilder(); 391 TestMap.Builder builder = TestMap.newBuilder();
257 Map<Integer, Integer> intMap = builder.getMutableInt32ToInt32Field(); 392 Map<Integer, Integer> intMap = builder.getMutableInt32ToInt32Field();
258 intMap.put(1, 2); 393 intMap.put(1, 2);
259 assertEquals(newMap(1, 2), builder.build().getInt32ToInt32Field()); 394 assertEquals(newMap(1, 2), builder.build().getInt32ToInt32Field());
260 try { 395 try {
261 intMap.remove(2); 396 intMap.remove(2);
262 fail(); 397 fail();
263 } catch (UnsupportedOperationException e) { 398 } catch (UnsupportedOperationException e) {
264 // expected 399 // expected
(...skipping 26 matching lines...) Expand all
291 intMap.values().iterator().remove(); 426 intMap.values().iterator().remove();
292 fail(); 427 fail();
293 } catch (UnsupportedOperationException e) { 428 } catch (UnsupportedOperationException e) {
294 // expected 429 // expected
295 } 430 }
296 assertEquals(newMap(1, 2), intMap); 431 assertEquals(newMap(1, 2), intMap);
297 assertEquals(newMap(1, 2), builder.getInt32ToInt32Field()); 432 assertEquals(newMap(1, 2), builder.getInt32ToInt32Field());
298 assertEquals(newMap(1, 2), builder.build().getInt32ToInt32Field()); 433 assertEquals(newMap(1, 2), builder.build().getInt32ToInt32Field());
299 } 434 }
300 435
436
301 public void testGettersAndSetters() throws Exception { 437 public void testGettersAndSetters() throws Exception {
302 TestMap.Builder builder = TestMap.newBuilder(); 438 TestMap.Builder builder = TestMap.newBuilder();
303 TestMap message = builder.build(); 439 TestMap message = builder.build();
304 assertMapValuesCleared(message); 440 assertMapValuesCleared(message);
305 441
306 builder = message.toBuilder(); 442 builder = message.toBuilder();
307 setMapValues(builder); 443 setMapValuesUsingAccessors(builder);
308 message = builder.build(); 444 message = builder.build();
309 assertMapValuesSet(message); 445 assertMapValuesSet(message);
310 446
311 builder = message.toBuilder(); 447 builder = message.toBuilder();
312 updateMapValues(builder); 448 updateMapValuesUsingAccessors(builder);
313 message = builder.build(); 449 message = builder.build();
314 assertMapValuesUpdated(message); 450 assertMapValuesUpdated(message);
315 451
316 builder = message.toBuilder(); 452 builder = message.toBuilder();
317 builder.clear(); 453 builder.clear();
454 assertMapValuesCleared(builder);
318 message = builder.build(); 455 message = builder.build();
319 assertMapValuesCleared(message); 456 assertMapValuesCleared(message);
320 } 457 }
321 458
322 public void testPutAll() throws Exception { 459 public void testPutAll() throws Exception {
323 TestMap.Builder sourceBuilder = TestMap.newBuilder(); 460 TestMap.Builder sourceBuilder = TestMap.newBuilder();
324 setMapValues(sourceBuilder); 461 setMapValuesUsingAccessors(sourceBuilder);
325 TestMap source = sourceBuilder.build(); 462 TestMap source = sourceBuilder.build();
463 assertMapValuesSet(source);
326 464
327 TestMap.Builder destination = TestMap.newBuilder(); 465 TestMap.Builder destination = TestMap.newBuilder();
328 copyMapValues(source, destination); 466 copyMapValues(source, destination);
329 assertMapValuesSet(destination.build()); 467 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 }
330 } 509 }
331 510
332 public void testSerializeAndParse() throws Exception { 511 public void testSerializeAndParse() throws Exception {
333 TestMap.Builder builder = TestMap.newBuilder(); 512 TestMap.Builder builder = TestMap.newBuilder();
334 setMapValues(builder); 513 setMapValuesUsingAccessors(builder);
335 TestMap message = builder.build(); 514 TestMap message = builder.build();
336 assertEquals(message.getSerializedSize(), message.toByteString().size()); 515 assertEquals(message.getSerializedSize(), message.toByteString().size());
337 message = TestMap.parser().parseFrom(message.toByteString()); 516 message = TestMap.parser().parseFrom(message.toByteString());
338 assertMapValuesSet(message); 517 assertMapValuesSet(message);
339 518
340 builder = message.toBuilder(); 519 builder = message.toBuilder();
341 updateMapValues(builder); 520 updateMapValuesUsingAccessors(builder);
342 message = builder.build(); 521 message = builder.build();
343 assertEquals(message.getSerializedSize(), message.toByteString().size()); 522 assertEquals(message.getSerializedSize(), message.toByteString().size());
344 message = TestMap.parser().parseFrom(message.toByteString()); 523 message = TestMap.parser().parseFrom(message.toByteString());
345 assertMapValuesUpdated(message); 524 assertMapValuesUpdated(message);
346 525
347 builder = message.toBuilder(); 526 builder = message.toBuilder();
348 builder.clear(); 527 builder.clear();
349 message = builder.build(); 528 message = builder.build();
350 assertEquals(message.getSerializedSize(), message.toByteString().size()); 529 assertEquals(message.getSerializedSize(), message.toByteString().size());
351 message = TestMap.parser().parseFrom(message.toByteString()); 530 message = TestMap.parser().parseFrom(message.toByteString());
352 assertMapValuesCleared(message); 531 assertMapValuesCleared(message);
353 } 532 }
354 533
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
355 public void testMergeFrom() throws Exception { 583 public void testMergeFrom() throws Exception {
356 TestMap.Builder builder = TestMap.newBuilder(); 584 TestMap.Builder builder = TestMap.newBuilder();
357 setMapValues(builder); 585 setMapValuesUsingAccessors(builder);
358 TestMap message = builder.build(); 586 TestMap message = builder.build();
359 587
360 TestMap.Builder other = TestMap.newBuilder(); 588 TestMap.Builder other = TestMap.newBuilder();
361 other.mergeFrom(message); 589 other.mergeFrom(message);
362 assertMapValuesSet(other.build()); 590 assertMapValuesSet(other.build());
363 } 591 }
364 592
365 public void testEqualsAndHashCode() throws Exception { 593 public void testEqualsAndHashCode() throws Exception {
366 // Test that generated equals() and hashCode() will disregard the order 594 // Test that generated equals() and hashCode() will disregard the order
367 // of map entries when comparing/hashing map fields. 595 // of map entries when comparing/hashing map fields.
368 596
369 // We can't control the order of elements in a HashMap. The best we can do 597 // We can't control the order of elements in a HashMap. The best we can do
370 // here is to add elements in different order. 598 // here is to add elements in different order.
371 TestMap.Builder b1 = TestMap.newBuilder(); 599 TestMap.Builder b1 = TestMap.newBuilder();
372 b1.getMutableInt32ToInt32Field().put(1, 2); 600 b1.putInt32ToInt32Field(1, 2);
373 b1.getMutableInt32ToInt32Field().put(3, 4); 601 b1.putInt32ToInt32Field(3, 4);
374 b1.getMutableInt32ToInt32Field().put(5, 6); 602 b1.putInt32ToInt32Field(5, 6);
375 TestMap m1 = b1.build(); 603 TestMap m1 = b1.build();
376 604
377 TestMap.Builder b2 = TestMap.newBuilder(); 605 TestMap.Builder b2 = TestMap.newBuilder();
378 b2.getMutableInt32ToInt32Field().put(5, 6); 606 b2.putInt32ToInt32Field(5, 6);
379 b2.getMutableInt32ToInt32Field().put(1, 2); 607 b2.putInt32ToInt32Field(1, 2);
380 b2.getMutableInt32ToInt32Field().put(3, 4); 608 b2.putInt32ToInt32Field(3, 4);
381 TestMap m2 = b2.build(); 609 TestMap m2 = b2.build();
382 610
383 assertEquals(m1, m2); 611 assertEquals(m1, m2);
384 assertEquals(m1.hashCode(), m2.hashCode()); 612 assertEquals(m1.hashCode(), m2.hashCode());
385 613
386 // Make sure we did compare map fields. 614 // Make sure we did compare map fields.
387 b2.getMutableInt32ToInt32Field().put(1, 0); 615 b2.putInt32ToInt32Field(1, 0);
388 m2 = b2.build(); 616 m2 = b2.build();
389 assertFalse(m1.equals(m2)); 617 assertFalse(m1.equals(m2));
390 // Don't check m1.hashCode() != m2.hashCode() because it's not guaranteed 618 // Don't check m1.hashCode() != m2.hashCode() because it's not guaranteed
391 // to be different. 619 // to be different.
392 } 620 }
393 621
394 622
395 // The following methods are used to test reflection API. 623 // The following methods are used to test reflection API.
396 624
397 private static FieldDescriptor f(String name) { 625 private static FieldDescriptor f(String name) {
398 return TestMap.getDescriptor().findFieldByName(name); 626 return TestMap.getDescriptor().findFieldByName(name);
399 } 627 }
400 628
401 private static Object getFieldValue(Message mapEntry, String name) { 629 private static Object getFieldValue(Message mapEntry, String name) {
402 FieldDescriptor field = mapEntry.getDescriptorForType().findFieldByName(name ); 630 FieldDescriptor field = mapEntry.getDescriptorForType().findFieldByName(name );
403 return mapEntry.getField(field); 631 return mapEntry.getField(field);
404 } 632 }
405 633
406 private static Message.Builder setFieldValue( 634 private static Message.Builder setFieldValue(
407 Message.Builder mapEntry, String name, Object value) { 635 Message.Builder mapEntry, String name, Object value) {
408 FieldDescriptor field = mapEntry.getDescriptorForType().findFieldByName(name ); 636 FieldDescriptor field = mapEntry.getDescriptorForType().findFieldByName(name );
409 mapEntry.setField(field, value); 637 mapEntry.setField(field, value);
410 return mapEntry; 638 return mapEntry;
411 } 639 }
412 640
413 private static void assertHasMapValues(Message message, String name, Map<?, ?> values) { 641 private static void assertHasMapValues(Message message, String name, Map<?, ?> values) {
414 FieldDescriptor field = f(name); 642 FieldDescriptor field = f(name);
415 for (Object entry : (List<?>) message.getField(field)) { 643 for (Object entry : (List<?>) message.getField(field)) {
416 Message mapEntry = (Message) entry; 644 Message mapEntry = (Message) entry;
417 Object key = getFieldValue(mapEntry, "key"); 645 Object key = getFieldValue(mapEntry, "key");
418 Object value = getFieldValue(mapEntry, "value"); 646 Object value = getFieldValue(mapEntry, "value");
419 assertTrue(values.containsKey(key)); 647 assertTrue(values.containsKey(key));
420 assertEquals(value, values.get(key)); 648 assertEquals(value, values.get(key));
421 } 649 }
422 assertEquals(values.size(), message.getRepeatedFieldCount(field)); 650 assertEquals(values.size(), message.getRepeatedFieldCount(field));
423 for (int i = 0; i < message.getRepeatedFieldCount(field); i++) { 651 for (int i = 0; i < message.getRepeatedFieldCount(field); i++) {
424 Message mapEntry = (Message) message.getRepeatedField(field, i); 652 Message mapEntry = (Message) message.getRepeatedField(field, i);
425 Object key = getFieldValue(mapEntry, "key"); 653 Object key = getFieldValue(mapEntry, "key");
426 Object value = getFieldValue(mapEntry, "value"); 654 Object value = getFieldValue(mapEntry, "value");
427 assertTrue(values.containsKey(key)); 655 assertTrue(values.containsKey(key));
428 assertEquals(value, values.get(key)); 656 assertEquals(value, values.get(key));
429 } 657 }
430 } 658 }
431 659
432 private static <KeyType, ValueType> 660 private static <KeyType, ValueType>
433 Message newMapEntry(Message.Builder builder, String name, KeyType key, ValueTy pe value) { 661 Message newMapEntry(Message.Builder builder, String name, KeyType key, ValueTy pe value) {
434 FieldDescriptor field = builder.getDescriptorForType().findFieldByName(name) ; 662 FieldDescriptor field = builder.getDescriptorForType().findFieldByName(name) ;
435 Message.Builder entryBuilder = builder.newBuilderForField(field); 663 Message.Builder entryBuilder = builder.newBuilderForField(field);
436 FieldDescriptor keyField = entryBuilder.getDescriptorForType().findFieldByNa me("key"); 664 FieldDescriptor keyField = entryBuilder.getDescriptorForType().findFieldByNa me("key");
437 FieldDescriptor valueField = entryBuilder.getDescriptorForType().findFieldBy Name("value"); 665 FieldDescriptor valueField = entryBuilder.getDescriptorForType().findFieldBy Name("value");
438 entryBuilder.setField(keyField, key); 666 entryBuilder.setField(keyField, key);
439 entryBuilder.setField(valueField, value); 667 entryBuilder.setField(valueField, value);
440 return entryBuilder.build(); 668 return entryBuilder.build();
441 } 669 }
442 670
443 private static void setMapValues(Message.Builder builder, String name, Map<?, ?> values) { 671 private static void setMapValues(Message.Builder builder, String name, Map<?, ?> values) {
444 List<Message> entryList = new ArrayList<Message>(); 672 List<Message> entryList = new ArrayList<Message>();
445 for (Map.Entry<?, ?> entry : values.entrySet()) { 673 for (Map.Entry<?, ?> entry : values.entrySet()) {
446 entryList.add(newMapEntry(builder, name, entry.getKey(), entry.getValue()) ); 674 entryList.add(newMapEntry(builder, name, entry.getKey(), entry.getValue()) );
447 } 675 }
448 FieldDescriptor field = builder.getDescriptorForType().findFieldByName(name) ; 676 FieldDescriptor field = builder.getDescriptorForType().findFieldByName(name) ;
449 builder.setField(field, entryList); 677 builder.setField(field, entryList);
450 } 678 }
451 679
452 private static <KeyType, ValueType> 680 private static <KeyType, ValueType> Map<KeyType, ValueType> mapForValues(
453 Map<KeyType, ValueType> mapForValues(
454 KeyType key1, ValueType value1, KeyType key2, ValueType value2) { 681 KeyType key1, ValueType value1, KeyType key2, ValueType value2) {
455 Map<KeyType, ValueType> map = new HashMap<KeyType, ValueType>(); 682 Map<KeyType, ValueType> map = new HashMap<KeyType, ValueType>();
456 map.put(key1, value1); 683 map.put(key1, value1);
457 map.put(key2, value2); 684 map.put(key2, value2);
458 return map; 685 return map;
459 } 686 }
460 687
461 public void testReflectionApi() throws Exception { 688 public void testReflectionApi() throws Exception {
462 // In reflection API, map fields are just repeated message fields. 689 // In reflection API, map fields are just repeated message fields.
463 TestMap.Builder builder = TestMap.newBuilder(); 690 TestMap.Builder builder = TestMap.newBuilder()
464 builder.getMutableInt32ToInt32Field().put(1, 2); 691 .putInt32ToInt32Field(1, 2)
465 builder.getMutableInt32ToInt32Field().put(3, 4); 692 .putInt32ToInt32Field(3, 4)
466 builder.getMutableInt32ToMessageField().put( 693 .putInt32ToMessageField(11, MessageValue.newBuilder().setValue(22).build ())
467 11, MessageValue.newBuilder().setValue(22).build()); 694 .putInt32ToMessageField(33, MessageValue.newBuilder().setValue(44).build ());
468 builder.getMutableInt32ToMessageField().put(
469 33, MessageValue.newBuilder().setValue(44).build());
470 TestMap message = builder.build(); 695 TestMap message = builder.build();
471 696
472 // Test getField(), getRepeatedFieldCount(), getRepeatedField(). 697 // Test getField(), getRepeatedFieldCount(), getRepeatedField().
473 assertHasMapValues(message, "int32_to_int32_field", 698 assertHasMapValues(message, "int32_to_int32_field",
474 mapForValues(1, 2, 3, 4)); 699 mapForValues(1, 2, 3, 4));
475 assertHasMapValues(message, "int32_to_message_field", 700 assertHasMapValues(message, "int32_to_message_field",
476 mapForValues( 701 mapForValues(
477 11, MessageValue.newBuilder().setValue(22).build(), 702 11, MessageValue.newBuilder().setValue(22).build(),
478 33, MessageValue.newBuilder().setValue(44).build())); 703 33, MessageValue.newBuilder().setValue(44).build()));
479 704
480 // Test clearField() 705 // Test clearField()
481 builder.clearField(f("int32_to_int32_field")); 706 builder.clearField(f("int32_to_int32_field"));
482 builder.clearField(f("int32_to_message_field")); 707 builder.clearField(f("int32_to_message_field"));
483 message = builder.build(); 708 message = builder.build();
484 assertEquals(0, message.getInt32ToInt32Field().size()); 709 assertEquals(0, message.getInt32ToInt32Field().size());
485 assertEquals(0, message.getInt32ToMessageField().size()); 710 assertEquals(0, message.getInt32ToMessageField().size());
486 711
487 // Test setField() 712 // Test setField()
488 setMapValues(builder, "int32_to_int32_field", 713 setMapValues(builder, "int32_to_int32_field",
489 mapForValues(11, 22, 33, 44)); 714 mapForValues(11, 22, 33, 44));
490 setMapValues(builder, "int32_to_message_field", 715 setMapValues(builder, "int32_to_message_field",
491 mapForValues( 716 mapForValues(
492 111, MessageValue.newBuilder().setValue(222).build(), 717 111, MessageValue.newBuilder().setValue(222).build(),
493 333, MessageValue.newBuilder().setValue(444).build())); 718 333, MessageValue.newBuilder().setValue(444).build()));
494 message = builder.build(); 719 message = builder.build();
495 assertEquals(22, message.getInt32ToInt32Field().get(11).intValue()); 720 assertEquals(22, message.getInt32ToInt32Field().get(11).intValue());
496 assertEquals(44, message.getInt32ToInt32Field().get(33).intValue()); 721 assertEquals(44, message.getInt32ToInt32Field().get(33).intValue());
497 assertEquals(222, message.getInt32ToMessageField().get(111).getValue()); 722 assertEquals(222, message.getInt32ToMessageField().get(111).getValue());
498 assertEquals(444, message.getInt32ToMessageField().get(333).getValue()); 723 assertEquals(444, message.getInt32ToMessageField().get(333).getValue());
499 724
500 // Test addRepeatedField 725 // Test addRepeatedField
501 builder.addRepeatedField(f("int32_to_int32_field"), 726 builder.addRepeatedField(f("int32_to_int32_field"),
502 newMapEntry(builder, "int32_to_int32_field", 55, 66)); 727 newMapEntry(builder, "int32_to_int32_field", 55, 66));
503 builder.addRepeatedField(f("int32_to_message_field"), 728 builder.addRepeatedField(f("int32_to_message_field"),
504 newMapEntry(builder, "int32_to_message_field", 555, 729 newMapEntry(builder, "int32_to_message_field", 555,
505 MessageValue.newBuilder().setValue(666).build())); 730 MessageValue.newBuilder().setValue(666).build()));
506 message = builder.build(); 731 message = builder.build();
507 assertEquals(66, message.getInt32ToInt32Field().get(55).intValue()); 732 assertEquals(66, message.getInt32ToInt32Field().get(55).intValue());
508 assertEquals(666, message.getInt32ToMessageField().get(555).getValue()); 733 assertEquals(666, message.getInt32ToMessageField().get(555).getValue());
509 734
510 // Test addRepeatedField (overriding existing values) 735 // Test addRepeatedField (overriding existing values)
511 builder.addRepeatedField(f("int32_to_int32_field"), 736 builder.addRepeatedField(f("int32_to_int32_field"),
512 newMapEntry(builder, "int32_to_int32_field", 55, 55)); 737 newMapEntry(builder, "int32_to_int32_field", 55, 55));
513 builder.addRepeatedField(f("int32_to_message_field"), 738 builder.addRepeatedField(f("int32_to_message_field"),
514 newMapEntry(builder, "int32_to_message_field", 555, 739 newMapEntry(builder, "int32_to_message_field", 555,
515 MessageValue.newBuilder().setValue(555).build())); 740 MessageValue.newBuilder().setValue(555).build()));
516 message = builder.build(); 741 message = builder.build();
517 assertEquals(55, message.getInt32ToInt32Field().get(55).intValue()); 742 assertEquals(55, message.getInt32ToInt32Field().get(55).intValue());
518 assertEquals(555, message.getInt32ToMessageField().get(555).getValue()); 743 assertEquals(555, message.getInt32ToMessageField().get(555).getValue());
519 744
520 // Test setRepeatedField 745 // Test setRepeatedField
521 for (int i = 0; i < builder.getRepeatedFieldCount(f("int32_to_int32_field")) ; i++) { 746 for (int i = 0; i < builder.getRepeatedFieldCount(f("int32_to_int32_field")) ; i++) {
522 Message mapEntry = (Message) builder.getRepeatedField(f("int32_to_int32_fi eld"), i); 747 Message mapEntry = (Message) builder.getRepeatedField(f("int32_to_int32_fi eld"), i);
523 int oldKey = ((Integer) getFieldValue(mapEntry, "key")).intValue(); 748 int oldKey = ((Integer) getFieldValue(mapEntry, "key")).intValue();
524 int oldValue = ((Integer) getFieldValue(mapEntry, "value")).intValue(); 749 int oldValue = ((Integer) getFieldValue(mapEntry, "value")).intValue();
525 // Swap key with value for each entry. 750 // Swap key with value for each entry.
526 Message.Builder mapEntryBuilder = mapEntry.toBuilder(); 751 Message.Builder mapEntryBuilder = mapEntry.toBuilder();
527 setFieldValue(mapEntryBuilder, "key", oldValue); 752 setFieldValue(mapEntryBuilder, "key", oldValue);
528 setFieldValue(mapEntryBuilder, "value", oldKey); 753 setFieldValue(mapEntryBuilder, "value", oldKey);
529 builder.setRepeatedField(f("int32_to_int32_field"), i, mapEntryBuilder.bui ld()); 754 builder.setRepeatedField(f("int32_to_int32_field"), i, mapEntryBuilder.bui ld());
530 } 755 }
531 message = builder.build(); 756 message = builder.build();
532 assertEquals(11, message.getInt32ToInt32Field().get(22).intValue()); 757 assertEquals(11, message.getInt32ToInt32Field().get(22).intValue());
533 assertEquals(33, message.getInt32ToInt32Field().get(44).intValue()); 758 assertEquals(33, message.getInt32ToInt32Field().get(44).intValue());
534 assertEquals(55, message.getInt32ToInt32Field().get(55).intValue()); 759 assertEquals(55, message.getInt32ToInt32Field().get(55).intValue());
535 } 760 }
536 761
537 public void testTextFormat() throws Exception { 762 public void testTextFormat() throws Exception {
538 TestMap.Builder builder = TestMap.newBuilder(); 763 TestMap.Builder builder = TestMap.newBuilder();
539 setMapValues(builder); 764 setMapValuesUsingAccessors(builder);
540 TestMap message = builder.build(); 765 TestMap message = builder.build();
541 766
542 String textData = TextFormat.printToString(message); 767 String textData = TextFormat.printToString(message);
543 768
544 builder = TestMap.newBuilder(); 769 builder = TestMap.newBuilder();
545 TextFormat.merge(textData, builder); 770 TextFormat.merge(textData, builder);
546 message = builder.build(); 771 message = builder.build();
547 772
548 assertMapValuesSet(message); 773 assertMapValuesSet(message);
549 } 774 }
550 775
551 public void testDynamicMessage() throws Exception { 776 public void testDynamicMessage() throws Exception {
552 TestMap.Builder builder = TestMap.newBuilder(); 777 TestMap.Builder builder = TestMap.newBuilder();
553 setMapValues(builder); 778 setMapValuesUsingAccessors(builder);
554 TestMap message = builder.build(); 779 TestMap message = builder.build();
555 780
556 Message dynamicDefaultInstance = 781 Message dynamicDefaultInstance =
557 DynamicMessage.getDefaultInstance(TestMap.getDescriptor()); 782 DynamicMessage.getDefaultInstance(TestMap.getDescriptor());
558 Message dynamicMessage = dynamicDefaultInstance 783 Message dynamicMessage = dynamicDefaultInstance
559 .newBuilderForType().mergeFrom(message.toByteString()).build(); 784 .newBuilderForType().mergeFrom(message.toByteString()).build();
560 785
561 assertEquals(message, dynamicMessage); 786 assertEquals(message, dynamicMessage);
562 assertEquals(message.hashCode(), dynamicMessage.hashCode()); 787 assertEquals(message.hashCode(), dynamicMessage.hashCode());
563 } 788 }
564 789
565 public void testReflectionEqualsAndHashCode() throws Exception { 790 public void testReflectionEqualsAndHashCode() throws Exception {
566 // Test that generated equals() and hashCode() will disregard the order 791 // Test that generated equals() and hashCode() will disregard the order
567 // of map entries when comparing/hashing map fields. 792 // of map entries when comparing/hashing map fields.
568 793
569 // We use DynamicMessage to test reflection based equals()/hashCode(). 794 // We use DynamicMessage to test reflection based equals()/hashCode().
570 Message dynamicDefaultInstance = 795 Message dynamicDefaultInstance =
571 DynamicMessage.getDefaultInstance(TestMap.getDescriptor()); 796 DynamicMessage.getDefaultInstance(TestMap.getDescriptor());
572 FieldDescriptor field = f("int32_to_int32_field"); 797 FieldDescriptor field = f("int32_to_int32_field");
573 798
574 Message.Builder b1 = dynamicDefaultInstance.newBuilderForType(); 799 Message.Builder b1 = dynamicDefaultInstance.newBuilderForType();
575 b1.addRepeatedField(field, newMapEntry(b1, "int32_to_int32_field", 1, 2)); 800 b1.addRepeatedField(field, newMapEntry(b1, "int32_to_int32_field", 1, 2));
576 b1.addRepeatedField(field, newMapEntry(b1, "int32_to_int32_field", 3, 4)); 801 b1.addRepeatedField(field, newMapEntry(b1, "int32_to_int32_field", 3, 4));
577 b1.addRepeatedField(field, newMapEntry(b1, "int32_to_int32_field", 5, 6)); 802 b1.addRepeatedField(field, newMapEntry(b1, "int32_to_int32_field", 5, 6));
578 Message m1 = b1.build(); 803 Message m1 = b1.build();
579 804
580 Message.Builder b2 = dynamicDefaultInstance.newBuilderForType(); 805 Message.Builder b2 = dynamicDefaultInstance.newBuilderForType();
581 b2.addRepeatedField(field, newMapEntry(b2, "int32_to_int32_field", 5, 6)); 806 b2.addRepeatedField(field, newMapEntry(b2, "int32_to_int32_field", 5, 6));
582 b2.addRepeatedField(field, newMapEntry(b2, "int32_to_int32_field", 1, 2)); 807 b2.addRepeatedField(field, newMapEntry(b2, "int32_to_int32_field", 1, 2));
583 b2.addRepeatedField(field, newMapEntry(b2, "int32_to_int32_field", 3, 4)); 808 b2.addRepeatedField(field, newMapEntry(b2, "int32_to_int32_field", 3, 4));
584 Message m2 = b2.build(); 809 Message m2 = b2.build();
585 810
586 assertEquals(m1, m2); 811 assertEquals(m1, m2);
587 assertEquals(m1.hashCode(), m2.hashCode()); 812 assertEquals(m1.hashCode(), m2.hashCode());
588 813
589 // Make sure we did compare map fields. 814 // Make sure we did compare map fields.
590 b2.setRepeatedField(field, 0, newMapEntry(b1, "int32_to_int32_field", 0, 0)) ; 815 b2.setRepeatedField(field, 0, newMapEntry(b1, "int32_to_int32_field", 0, 0)) ;
591 m2 = b2.build(); 816 m2 = b2.build();
592 assertFalse(m1.equals(m2)); 817 assertFalse(m1.equals(m2));
593 // Don't check m1.hashCode() != m2.hashCode() because it's not guaranteed 818 // Don't check m1.hashCode() != m2.hashCode() because it's not guaranteed
594 // to be different. 819 // to be different.
595 } 820 }
596 821
597 public void testUnknownEnumValues() throws Exception { 822 public void testUnknownEnumValues() throws Exception {
598 TestUnknownEnumValue.Builder builder = 823 TestUnknownEnumValue.Builder builder = TestUnknownEnumValue.newBuilder()
599 TestUnknownEnumValue.newBuilder(); 824 .putInt32ToInt32Field(1, 1)
600 builder.getMutableInt32ToInt32Field().put(1, 1); 825 .putInt32ToInt32Field(2, 54321);
601 builder.getMutableInt32ToInt32Field().put(2, 54321);
602 ByteString data = builder.build().toByteString(); 826 ByteString data = builder.build().toByteString();
603 827
604 TestMap message = TestMap.parseFrom(data); 828 TestMap message = TestMap.parseFrom(data);
605 // Entries with unknown enum values will be stored into UnknownFieldSet so 829 // Entries with unknown enum values will be stored into UnknownFieldSet so
606 // there is only one entry in the map. 830 // there is only one entry in the map.
607 assertEquals(1, message.getInt32ToEnumField().size()); 831 assertEquals(1, message.getInt32ToEnumField().size());
608 assertEquals(TestMap.EnumValue.BAR, message.getInt32ToEnumField().get(1)); 832 assertEquals(TestMap.EnumValue.BAR, message.getInt32ToEnumField().get(1));
609 // UnknownFieldSet should not be empty. 833 // UnknownFieldSet should not be empty.
610 assertFalse(message.getUnknownFields().asMap().isEmpty()); 834 assertFalse(message.getUnknownFields().asMap().isEmpty());
611 // Serializing and parsing should preserve the unknown entry. 835 // Serializing and parsing should preserve the unknown entry.
612 data = message.toByteString(); 836 data = message.toByteString();
613 TestUnknownEnumValue messageWithUnknownEnums = 837 TestUnknownEnumValue messageWithUnknownEnums =
614 TestUnknownEnumValue.parseFrom(data); 838 TestUnknownEnumValue.parseFrom(data);
615 assertEquals(2, messageWithUnknownEnums.getInt32ToInt32Field().size()); 839 assertEquals(2, messageWithUnknownEnums.getInt32ToInt32Field().size());
616 assertEquals(1, messageWithUnknownEnums.getInt32ToInt32Field().get(1).intVal ue()); 840 assertEquals(1, messageWithUnknownEnums.getInt32ToInt32Field().get(1).intVal ue());
617 assertEquals(54321, messageWithUnknownEnums.getInt32ToInt32Field().get(2).in tValue()); 841 assertEquals(54321, messageWithUnknownEnums.getInt32ToInt32Field().get(2).in tValue());
618 } 842 }
619 843
620
621 public void testRequiredMessage() throws Exception { 844 public void testRequiredMessage() throws Exception {
622 TestMap.Builder builder = TestMap.newBuilder(); 845 TestMap.Builder builder = TestMap.newBuilder();
623 builder.getMutableRequiredMessageMap().put(0, 846 builder.putRequiredMessageMap(0, MessageWithRequiredFields.newBuilder().buil dPartial());
624 MessageWithRequiredFields.newBuilder().buildPartial());
625 TestMap message = builder.buildPartial(); 847 TestMap message = builder.buildPartial();
626 assertFalse(message.isInitialized()); 848 assertFalse(message.isInitialized());
627 849
628 builder.getMutableRequiredMessageMap().put(0, 850 builder.putRequiredMessageMap(0, MessageWithRequiredFields.newBuilder().setV alue(1).build());
629 MessageWithRequiredFields.newBuilder().setValue(1).build());
630 message = builder.build(); 851 message = builder.build();
631 assertTrue(message.isInitialized()); 852 assertTrue(message.isInitialized());
632 } 853 }
633 854
634 public void testRecursiveMap() throws Exception { 855 public void testRecursiveMap() throws Exception {
635 TestRecursiveMap.Builder builder = TestRecursiveMap.newBuilder(); 856 TestRecursiveMap.Builder builder = TestRecursiveMap.newBuilder();
636 builder.getMutableRecursiveMapField().put( 857 builder.putRecursiveMapField(1, TestRecursiveMap.newBuilder().setValue(2).bu ild());
637 1, TestRecursiveMap.newBuilder().setValue(2).build()); 858 builder.putRecursiveMapField(3, TestRecursiveMap.newBuilder().setValue(4).bu ild());
638 builder.getMutableRecursiveMapField().put(
639 3, TestRecursiveMap.newBuilder().setValue(4).build());
640 ByteString data = builder.build().toByteString(); 859 ByteString data = builder.build().toByteString();
641 860
642 TestRecursiveMap message = TestRecursiveMap.parseFrom(data); 861 TestRecursiveMap message = TestRecursiveMap.parseFrom(data);
643 assertEquals(2, message.getRecursiveMapField().get(1).getValue()); 862 assertEquals(2, message.getRecursiveMapField().get(1).getValue());
644 assertEquals(4, message.getRecursiveMapField().get(3).getValue()); 863 assertEquals(4, message.getRecursiveMapField().get(3).getValue());
645 } 864 }
646 865
647 public void testIterationOrder() throws Exception { 866 public void testIterationOrder() throws Exception {
648 TestMap.Builder builder = TestMap.newBuilder(); 867 TestMap.Builder builder = TestMap.newBuilder();
649 setMapValues(builder); 868 setMapValuesUsingAccessors(builder);
650 TestMap message = builder.build(); 869 TestMap message = builder.build();
651 870
652 assertEquals(Arrays.asList("1", "2", "3"), 871 assertEquals(Arrays.asList("1", "2", "3"),
653 new ArrayList<String>(message.getStringToInt32Field().keySet())); 872 new ArrayList<String>(message.getStringToInt32Field().keySet()));
654 } 873 }
655 874
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
656 // Regression test for b/20494788 1128 // Regression test for b/20494788
657 public void testMapInitializationOrder() throws Exception { 1129 public void testMapInitializationOrder() throws Exception {
658 assertEquals("RedactAllTypes", map_test.RedactAllTypes 1130 assertEquals("RedactAllTypes", map_test.RedactAllTypes
659 .getDefaultInstance().getDescriptorForType().getName()); 1131 .getDefaultInstance().getDescriptorForType().getName());
660 1132
661 map_test.Message1.Builder builder = 1133 map_test.Message1.Builder builder =
662 map_test.Message1.newBuilder(); 1134 map_test.Message1.newBuilder();
663 builder.getMutableMapField().put("key", true); 1135 builder.putMapField("key", true);
664 map_test.Message1 message = builder.build(); 1136 map_test.Message1 message = builder.build();
665 Message mapEntry = (Message) message.getRepeatedField( 1137 Message mapEntry = (Message) message.getRepeatedField(
666 message.getDescriptorForType().findFieldByName("map_field"), 0); 1138 message.getDescriptorForType().findFieldByName("map_field"), 0);
667 assertEquals(2, mapEntry.getAllFields().size()); 1139 assertEquals(2, mapEntry.getAllFields().size());
668 } 1140 }
669 1141
1142 public void testReservedWordsFieldNames() {
1143 ReservedAsMapField.newBuilder().build();
1144 ReservedAsMapFieldWithEnumValue.newBuilder().build();
1145 }
1146
670 private static <K, V> Map<K, V> newMap(K key1, V value1) { 1147 private static <K, V> Map<K, V> newMap(K key1, V value1) {
671 Map<K, V> map = new HashMap<K, V>(); 1148 Map<K, V> map = new HashMap<K, V>();
672 map.put(key1, value1); 1149 map.put(key1, value1);
673 return map; 1150 return map;
674 } 1151 }
675 1152
676 private static <K, V> Map<K, V> newMap(K key1, V value1, K key2, V value2) { 1153 private static <K, V> Map<K, V> newMap(K key1, V value1, K key2, V value2) {
677 Map<K, V> map = new HashMap<K, V>(); 1154 Map<K, V> map = new HashMap<K, V>();
678 map.put(key1, value1); 1155 map.put(key1, value1);
679 map.put(key2, value2); 1156 map.put(key2, value2);
680 return map; 1157 return map;
681 } 1158 }
1159
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 }
682 } 1178 }
683
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698