OLD | NEW |
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 12 matching lines...) Expand all Loading... |
23 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | 23 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
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 map_lite_test.MapForProto2TestProto.BizarroTestMap; | |
34 import map_lite_test.MapForProto2TestProto.TestMap; | 33 import map_lite_test.MapForProto2TestProto.TestMap; |
35 import map_lite_test.MapForProto2TestProto.TestMap.MessageValue; | 34 import map_lite_test.MapForProto2TestProto.TestMap.MessageValue; |
36 import map_lite_test.MapForProto2TestProto.TestMapOrBuilder; | |
37 import map_lite_test.MapForProto2TestProto.TestUnknownEnumValue; | 35 import map_lite_test.MapForProto2TestProto.TestUnknownEnumValue; |
38 import java.io.ByteArrayOutputStream; | 36 |
39 import java.io.IOException; | 37 import junit.framework.TestCase; |
| 38 |
40 import java.util.ArrayList; | 39 import java.util.ArrayList; |
41 import java.util.Arrays; | 40 import java.util.Arrays; |
42 import java.util.HashMap; | 41 import java.util.HashMap; |
43 import java.util.Map; | 42 import java.util.Map; |
44 import junit.framework.TestCase; | |
45 | 43 |
46 /** | 44 /** |
47 * Unit tests for map fields. | 45 * Unit tests for map fields. |
48 */ | 46 */ |
49 public final class MapForProto2LiteTest extends TestCase { | 47 public class MapForProto2LiteTest extends TestCase { |
| 48 private void setMapValues(TestMap.Builder builder) { |
| 49 builder.getMutableInt32ToInt32Field().put(1, 11); |
| 50 builder.getMutableInt32ToInt32Field().put(2, 22); |
| 51 builder.getMutableInt32ToInt32Field().put(3, 33); |
50 | 52 |
51 private void setMapValues(TestMap.Builder builder) { | 53 builder.getMutableInt32ToStringField().put(1, "11"); |
52 builder | 54 builder.getMutableInt32ToStringField().put(2, "22"); |
53 .putInt32ToInt32Field(1, 11) | 55 builder.getMutableInt32ToStringField().put(3, "33"); |
54 .putInt32ToInt32Field(2, 22) | 56 |
55 .putInt32ToInt32Field(3, 33) | 57 builder.getMutableInt32ToBytesField().put(1, TestUtil.toBytes("11")); |
56 | 58 builder.getMutableInt32ToBytesField().put(2, TestUtil.toBytes("22")); |
57 .putInt32ToStringField(1, "11") | 59 builder.getMutableInt32ToBytesField().put(3, TestUtil.toBytes("33")); |
58 .putInt32ToStringField(2, "22") | 60 |
59 .putInt32ToStringField(3, "33") | 61 builder.getMutableInt32ToEnumField().put(1, TestMap.EnumValue.FOO); |
60 | 62 builder.getMutableInt32ToEnumField().put(2, TestMap.EnumValue.BAR); |
61 .putInt32ToBytesField(1, TestUtil.toBytes("11")) | 63 builder.getMutableInt32ToEnumField().put(3, TestMap.EnumValue.BAZ); |
62 .putInt32ToBytesField(2, TestUtil.toBytes("22")) | 64 |
63 .putInt32ToBytesField(3, TestUtil.toBytes("33")) | 65 builder.getMutableInt32ToMessageField().put( |
64 | 66 1, MessageValue.newBuilder().setValue(11).build()); |
65 .putInt32ToEnumField(1, TestMap.EnumValue.FOO) | 67 builder.getMutableInt32ToMessageField().put( |
66 .putInt32ToEnumField(2, TestMap.EnumValue.BAR) | 68 2, MessageValue.newBuilder().setValue(22).build()); |
67 .putInt32ToEnumField(3, TestMap.EnumValue.BAZ) | 69 builder.getMutableInt32ToMessageField().put( |
68 | 70 3, MessageValue.newBuilder().setValue(33).build()); |
69 .putInt32ToMessageField(1, MessageValue.newBuilder().setValue(11).build(
)) | 71 |
70 .putInt32ToMessageField(2, MessageValue.newBuilder().setValue(22).build(
)) | 72 builder.getMutableStringToInt32Field().put("1", 11); |
71 .putInt32ToMessageField(3, MessageValue.newBuilder().setValue(33).build(
)) | 73 builder.getMutableStringToInt32Field().put("2", 22); |
72 | 74 builder.getMutableStringToInt32Field().put("3", 33); |
73 .putStringToInt32Field("1", 11) | |
74 .putStringToInt32Field("2", 22) | |
75 .putStringToInt32Field("3", 33); | |
76 } | |
77 | |
78 public void testSetMapValues() { | |
79 TestMap.Builder mapBuilder = TestMap.newBuilder(); | |
80 setMapValues(mapBuilder); | |
81 TestMap map = mapBuilder.build(); | |
82 assertMapValuesSet(map); | |
83 } | 75 } |
84 | 76 |
85 private void copyMapValues(TestMap source, TestMap.Builder destination) { | 77 private void copyMapValues(TestMap source, TestMap.Builder destination) { |
86 destination | 78 destination |
87 .putAllInt32ToInt32Field(source.getInt32ToInt32Field()) | 79 .putAllInt32ToInt32Field(source.getInt32ToInt32Field()) |
88 .putAllInt32ToStringField(source.getInt32ToStringField()) | 80 .putAllInt32ToStringField(source.getInt32ToStringField()) |
89 .putAllInt32ToBytesField(source.getInt32ToBytesField()) | 81 .putAllInt32ToBytesField(source.getInt32ToBytesField()) |
90 .putAllInt32ToEnumField(source.getInt32ToEnumField()) | 82 .putAllInt32ToEnumField(source.getInt32ToEnumField()) |
91 .putAllInt32ToMessageField(source.getInt32ToMessageField()) | 83 .putAllInt32ToMessageField(source.getInt32ToMessageField()) |
92 .putAllStringToInt32Field(source.getStringToInt32Field()); | 84 .putAllStringToInt32Field(source.getStringToInt32Field()); |
93 } | 85 } |
94 | 86 |
95 private void assertMapValuesSet(TestMap message) { | 87 private void assertMapValuesSet(TestMap message) { |
96 assertEquals(3, message.getInt32ToInt32Field().size()); | 88 assertEquals(3, message.getInt32ToInt32Field().size()); |
97 assertEquals(11, message.getInt32ToInt32Field().get(1).intValue()); | 89 assertEquals(11, message.getInt32ToInt32Field().get(1).intValue()); |
98 assertEquals(22, message.getInt32ToInt32Field().get(2).intValue()); | 90 assertEquals(22, message.getInt32ToInt32Field().get(2).intValue()); |
99 assertEquals(33, message.getInt32ToInt32Field().get(3).intValue()); | 91 assertEquals(33, message.getInt32ToInt32Field().get(3).intValue()); |
100 | 92 |
101 assertEquals(3, message.getInt32ToStringField().size()); | 93 assertEquals(3, message.getInt32ToStringField().size()); |
102 assertEquals("11", message.getInt32ToStringField().get(1)); | 94 assertEquals("11", message.getInt32ToStringField().get(1)); |
103 assertEquals("22", message.getInt32ToStringField().get(2)); | 95 assertEquals("22", message.getInt32ToStringField().get(2)); |
104 assertEquals("33", message.getInt32ToStringField().get(3)); | 96 assertEquals("33", message.getInt32ToStringField().get(3)); |
105 | 97 |
106 assertEquals(3, message.getInt32ToBytesField().size()); | 98 assertEquals(3, message.getInt32ToBytesField().size()); |
107 assertEquals(TestUtil.toBytes("11"), message.getInt32ToBytesField().get(1)); | 99 assertEquals(TestUtil.toBytes("11"), message.getInt32ToBytesField().get(1)); |
108 assertEquals(TestUtil.toBytes("22"), message.getInt32ToBytesField().get(2)); | 100 assertEquals(TestUtil.toBytes("22"), message.getInt32ToBytesField().get(2)); |
109 assertEquals(TestUtil.toBytes("33"), message.getInt32ToBytesField().get(3)); | 101 assertEquals(TestUtil.toBytes("33"), message.getInt32ToBytesField().get(3)); |
110 | 102 |
111 assertEquals(3, message.getInt32ToEnumField().size()); | 103 assertEquals(3, message.getInt32ToEnumField().size()); |
112 assertEquals(TestMap.EnumValue.FOO, message.getInt32ToEnumField().get(1)); | 104 assertEquals(TestMap.EnumValue.FOO, message.getInt32ToEnumField().get(1)); |
113 assertEquals(TestMap.EnumValue.BAR, message.getInt32ToEnumField().get(2)); | 105 assertEquals(TestMap.EnumValue.BAR, message.getInt32ToEnumField().get(2)); |
114 assertEquals(TestMap.EnumValue.BAZ, message.getInt32ToEnumField().get(3)); | 106 assertEquals(TestMap.EnumValue.BAZ, message.getInt32ToEnumField().get(3)); |
115 | 107 |
116 assertEquals(3, message.getInt32ToMessageField().size()); | 108 assertEquals(3, message.getInt32ToMessageField().size()); |
117 assertEquals(11, message.getInt32ToMessageField().get(1).getValue()); | 109 assertEquals(11, message.getInt32ToMessageField().get(1).getValue()); |
118 assertEquals(22, message.getInt32ToMessageField().get(2).getValue()); | 110 assertEquals(22, message.getInt32ToMessageField().get(2).getValue()); |
119 assertEquals(33, message.getInt32ToMessageField().get(3).getValue()); | 111 assertEquals(33, message.getInt32ToMessageField().get(3).getValue()); |
120 | 112 |
121 assertEquals(3, message.getStringToInt32Field().size()); | 113 assertEquals(3, message.getStringToInt32Field().size()); |
122 assertEquals(11, message.getStringToInt32Field().get("1").intValue()); | 114 assertEquals(11, message.getStringToInt32Field().get("1").intValue()); |
123 assertEquals(22, message.getStringToInt32Field().get("2").intValue()); | 115 assertEquals(22, message.getStringToInt32Field().get("2").intValue()); |
124 assertEquals(33, message.getStringToInt32Field().get("3").intValue()); | 116 assertEquals(33, message.getStringToInt32Field().get("3").intValue()); |
125 } | 117 } |
126 | 118 |
127 private void updateMapValues(TestMap.Builder builder) { | 119 private void updateMapValues(TestMap.Builder builder) { |
128 builder | 120 builder.getMutableInt32ToInt32Field().put(1, 111); |
129 .putInt32ToInt32Field(1, 111) | 121 builder.getMutableInt32ToInt32Field().remove(2); |
130 .removeInt32ToInt32Field(2) | 122 builder.getMutableInt32ToInt32Field().put(4, 44); |
131 .putInt32ToInt32Field(4, 44) | |
132 | 123 |
133 .putInt32ToStringField(1, "111") | 124 builder.getMutableInt32ToStringField().put(1, "111"); |
134 .removeInt32ToStringField(2) | 125 builder.getMutableInt32ToStringField().remove(2); |
135 .putInt32ToStringField(4, "44") | 126 builder.getMutableInt32ToStringField().put(4, "44"); |
136 | 127 |
137 .putInt32ToBytesField(1, TestUtil.toBytes("111")) | 128 builder.getMutableInt32ToBytesField().put(1, TestUtil.toBytes("111")); |
138 .removeInt32ToBytesField(2) | 129 builder.getMutableInt32ToBytesField().remove(2); |
139 .putInt32ToBytesField(4, TestUtil.toBytes("44")) | 130 builder.getMutableInt32ToBytesField().put(4, TestUtil.toBytes("44")); |
140 | 131 |
141 .putInt32ToEnumField(1, TestMap.EnumValue.BAR) | 132 builder.getMutableInt32ToEnumField().put(1, TestMap.EnumValue.BAR); |
142 .removeInt32ToEnumField(2) | 133 builder.getMutableInt32ToEnumField().remove(2); |
143 .putInt32ToEnumField(4, TestMap.EnumValue.QUX) | 134 builder.getMutableInt32ToEnumField().put(4, TestMap.EnumValue.QUX); |
144 | 135 |
145 .putInt32ToMessageField(1, MessageValue.newBuilder().setValue(111).build
()) | 136 builder.getMutableInt32ToMessageField().put( |
146 .removeInt32ToMessageField(2) | 137 1, MessageValue.newBuilder().setValue(111).build()); |
147 .putInt32ToMessageField(4, MessageValue.newBuilder().setValue(44).build(
)) | 138 builder.getMutableInt32ToMessageField().remove(2); |
148 | 139 builder.getMutableInt32ToMessageField().put( |
149 .putStringToInt32Field("1", 111) | 140 4, MessageValue.newBuilder().setValue(44).build()); |
150 .removeStringToInt32Field("2") | 141 |
151 .putStringToInt32Field("4", 44); | 142 builder.getMutableStringToInt32Field().put("1", 111); |
152 } | 143 builder.getMutableStringToInt32Field().remove("2"); |
153 | 144 builder.getMutableStringToInt32Field().put("4", 44); |
154 public void testUpdateMapValues() { | |
155 TestMap.Builder mapBuilder = TestMap.newBuilder(); | |
156 setMapValues(mapBuilder); | |
157 TestMap map = mapBuilder.build(); | |
158 assertMapValuesSet(map); | |
159 | |
160 mapBuilder = map.toBuilder(); | |
161 updateMapValues(mapBuilder); | |
162 map = mapBuilder.build(); | |
163 assertMapValuesUpdated(map); | |
164 } | 145 } |
165 | 146 |
166 private void assertMapValuesUpdated(TestMap message) { | 147 private void assertMapValuesUpdated(TestMap message) { |
167 assertEquals(3, message.getInt32ToInt32Field().size()); | 148 assertEquals(3, message.getInt32ToInt32Field().size()); |
168 assertEquals(111, message.getInt32ToInt32Field().get(1).intValue()); | 149 assertEquals(111, message.getInt32ToInt32Field().get(1).intValue()); |
169 assertEquals(33, message.getInt32ToInt32Field().get(3).intValue()); | 150 assertEquals(33, message.getInt32ToInt32Field().get(3).intValue()); |
170 assertEquals(44, message.getInt32ToInt32Field().get(4).intValue()); | 151 assertEquals(44, message.getInt32ToInt32Field().get(4).intValue()); |
171 | 152 |
172 assertEquals(3, message.getInt32ToStringField().size()); | 153 assertEquals(3, message.getInt32ToStringField().size()); |
173 assertEquals("111", message.getInt32ToStringField().get(1)); | 154 assertEquals("111", message.getInt32ToStringField().get(1)); |
174 assertEquals("33", message.getInt32ToStringField().get(3)); | 155 assertEquals("33", message.getInt32ToStringField().get(3)); |
175 assertEquals("44", message.getInt32ToStringField().get(4)); | 156 assertEquals("44", message.getInt32ToStringField().get(4)); |
176 | 157 |
177 assertEquals(3, message.getInt32ToBytesField().size()); | 158 assertEquals(3, message.getInt32ToBytesField().size()); |
178 assertEquals(TestUtil.toBytes("111"), message.getInt32ToBytesField().get(1))
; | 159 assertEquals(TestUtil.toBytes("111"), message.getInt32ToBytesField().get(1))
; |
179 assertEquals(TestUtil.toBytes("33"), message.getInt32ToBytesField().get(3)); | 160 assertEquals(TestUtil.toBytes("33"), message.getInt32ToBytesField().get(3)); |
180 assertEquals(TestUtil.toBytes("44"), message.getInt32ToBytesField().get(4)); | 161 assertEquals(TestUtil.toBytes("44"), message.getInt32ToBytesField().get(4)); |
181 | 162 |
182 assertEquals(3, message.getInt32ToEnumField().size()); | 163 assertEquals(3, message.getInt32ToEnumField().size()); |
183 assertEquals(TestMap.EnumValue.BAR, message.getInt32ToEnumField().get(1)); | 164 assertEquals(TestMap.EnumValue.BAR, message.getInt32ToEnumField().get(1)); |
184 assertEquals(TestMap.EnumValue.BAZ, message.getInt32ToEnumField().get(3)); | 165 assertEquals(TestMap.EnumValue.BAZ, message.getInt32ToEnumField().get(3)); |
185 assertEquals(TestMap.EnumValue.QUX, message.getInt32ToEnumField().get(4)); | 166 assertEquals(TestMap.EnumValue.QUX, message.getInt32ToEnumField().get(4)); |
186 | 167 |
187 assertEquals(3, message.getInt32ToMessageField().size()); | 168 assertEquals(3, message.getInt32ToMessageField().size()); |
188 assertEquals(111, message.getInt32ToMessageField().get(1).getValue()); | 169 assertEquals(111, message.getInt32ToMessageField().get(1).getValue()); |
189 assertEquals(33, message.getInt32ToMessageField().get(3).getValue()); | 170 assertEquals(33, message.getInt32ToMessageField().get(3).getValue()); |
190 assertEquals(44, message.getInt32ToMessageField().get(4).getValue()); | 171 assertEquals(44, message.getInt32ToMessageField().get(4).getValue()); |
191 | 172 |
192 assertEquals(3, message.getStringToInt32Field().size()); | 173 assertEquals(3, message.getStringToInt32Field().size()); |
193 assertEquals(111, message.getStringToInt32Field().get("1").intValue()); | 174 assertEquals(111, message.getStringToInt32Field().get("1").intValue()); |
194 assertEquals(33, message.getStringToInt32Field().get("3").intValue()); | 175 assertEquals(33, message.getStringToInt32Field().get("3").intValue()); |
195 assertEquals(44, message.getStringToInt32Field().get("4").intValue()); | 176 assertEquals(44, message.getStringToInt32Field().get("4").intValue()); |
196 } | 177 } |
197 | 178 |
198 private void assertMapValuesCleared(TestMapOrBuilder testMapOrBuilder) { | 179 private void assertMapValuesCleared(TestMap message) { |
199 assertEquals(0, testMapOrBuilder.getInt32ToInt32Field().size()); | 180 assertEquals(0, message.getInt32ToInt32Field().size()); |
200 assertEquals(0, testMapOrBuilder.getInt32ToInt32FieldCount()); | 181 assertEquals(0, message.getInt32ToStringField().size()); |
201 assertEquals(0, testMapOrBuilder.getInt32ToStringField().size()); | 182 assertEquals(0, message.getInt32ToBytesField().size()); |
202 assertEquals(0, testMapOrBuilder.getInt32ToStringFieldCount()); | 183 assertEquals(0, message.getInt32ToEnumField().size()); |
203 assertEquals(0, testMapOrBuilder.getInt32ToBytesField().size()); | 184 assertEquals(0, message.getInt32ToMessageField().size()); |
204 assertEquals(0, testMapOrBuilder.getInt32ToBytesFieldCount()); | 185 assertEquals(0, message.getStringToInt32Field().size()); |
205 assertEquals(0, testMapOrBuilder.getInt32ToEnumField().size()); | |
206 assertEquals(0, testMapOrBuilder.getInt32ToEnumFieldCount()); | |
207 assertEquals(0, testMapOrBuilder.getInt32ToMessageField().size()); | |
208 assertEquals(0, testMapOrBuilder.getInt32ToMessageFieldCount()); | |
209 assertEquals(0, testMapOrBuilder.getStringToInt32Field().size()); | |
210 assertEquals(0, testMapOrBuilder.getStringToInt32FieldCount()); | |
211 } | 186 } |
212 | 187 |
213 public void testSanityCopyOnWrite() throws InvalidProtocolBufferException { | 188 public void testSanityCopyOnWrite() throws InvalidProtocolBufferException { |
214 // Since builders are implemented as a thin wrapper around a message | 189 // Since builders are implemented as a thin wrapper around a message |
215 // instance, we attempt to verify that we can't cause the builder to modify | 190 // instance, we attempt to verify that we can't cause the builder to modify |
216 // a produced message. | 191 // a produced message. |
217 | 192 |
218 TestMap.Builder builder = TestMap.newBuilder(); | 193 TestMap.Builder builder = TestMap.newBuilder(); |
219 TestMap message = builder.build(); | 194 TestMap message = builder.build(); |
220 builder.putInt32ToInt32Field(1, 2); | 195 Map<Integer, Integer> intMap = builder.getMutableInt32ToInt32Field(); |
| 196 intMap.put(1, 2); |
221 assertTrue(message.getInt32ToInt32Field().isEmpty()); | 197 assertTrue(message.getInt32ToInt32Field().isEmpty()); |
222 message = builder.build(); | 198 message = builder.build(); |
223 assertEquals(newMap(1, 2), message.getInt32ToInt32Field()); | |
224 assertEquals(newMap(1, 2), builder.getInt32ToInt32Field()); | |
225 builder.putInt32ToInt32Field(2, 3); | |
226 assertEquals(newMap(1, 2), message.getInt32ToInt32Field()); | |
227 assertEquals(newMap(1, 2, 2, 3), builder.getInt32ToInt32Field()); | |
228 } | |
229 | |
230 public void testGetMapIsImmutable() { | |
231 TestMap.Builder builder = TestMap.newBuilder(); | |
232 assertMapsAreImmutable(builder); | |
233 assertMapsAreImmutable(builder.build()); | |
234 | |
235 setMapValues(builder); | |
236 assertMapsAreImmutable(builder); | |
237 assertMapsAreImmutable(builder.build()); | |
238 } | |
239 | |
240 private void assertMapsAreImmutable(TestMapOrBuilder testMapOrBuilder) { | |
241 assertImmutable(testMapOrBuilder.getInt32ToInt32Field(), 1, 2); | |
242 assertImmutable(testMapOrBuilder.getInt32ToStringField(), 1, "2"); | |
243 assertImmutable(testMapOrBuilder.getInt32ToBytesField(), 1, TestUtil.toBytes
("2")); | |
244 assertImmutable(testMapOrBuilder.getInt32ToEnumField(), 1, TestMap.EnumValue
.FOO); | |
245 assertImmutable( | |
246 testMapOrBuilder.getInt32ToMessageField(), 1, MessageValue.getDefaultIns
tance()); | |
247 assertImmutable(testMapOrBuilder.getStringToInt32Field(), "1", 2); | |
248 } | |
249 | |
250 private <K, V> void assertImmutable(Map<K, V> map, K key, V value) { | |
251 try { | 199 try { |
252 map.put(key, value); | 200 intMap.put(2, 3); |
253 fail(); | 201 fail(); |
254 } catch (UnsupportedOperationException e) { | 202 } catch (UnsupportedOperationException e) { |
255 // expected | 203 // expected |
256 } | 204 } |
257 if (!map.isEmpty()) { | 205 assertEquals(newMap(1, 2), message.getInt32ToInt32Field()); |
258 try { | 206 assertEquals(newMap(1, 2), builder.getInt32ToInt32Field()); |
259 map.entrySet().remove(map.entrySet().iterator().next()); | 207 builder.getMutableInt32ToInt32Field().put(2, 3); |
260 fail(); | 208 assertEquals(newMap(1, 2), message.getInt32ToInt32Field()); |
261 } catch (UnsupportedOperationException e) { | 209 assertEquals(newMap(1, 2, 2, 3), builder.getInt32ToInt32Field()); |
262 // expected | 210 } |
263 } | 211 |
| 212 public void testMutableMapLifecycle() { |
| 213 TestMap.Builder builder = TestMap.newBuilder(); |
| 214 Map<Integer, Integer> intMap = builder.getMutableInt32ToInt32Field(); |
| 215 intMap.put(1, 2); |
| 216 assertEquals(newMap(1, 2), builder.build().getInt32ToInt32Field()); |
| 217 try { |
| 218 intMap.put(2, 3); |
| 219 fail(); |
| 220 } catch (UnsupportedOperationException e) { |
| 221 // expected |
264 } | 222 } |
265 } | |
266 | |
267 public void testMutableMapLifecycle() { | |
268 TestMap.Builder builder = TestMap.newBuilder() | |
269 .putInt32ToInt32Field(1, 2); | |
270 assertEquals(newMap(1, 2), builder.build().getInt32ToInt32Field()); | |
271 assertEquals(newMap(1, 2), builder.getInt32ToInt32Field()); | 223 assertEquals(newMap(1, 2), builder.getInt32ToInt32Field()); |
272 builder.putInt32ToInt32Field(2, 3); | 224 builder.getMutableInt32ToInt32Field().put(2, 3); |
273 assertEquals(newMap(1, 2, 2, 3), builder.getInt32ToInt32Field()); | 225 assertEquals(newMap(1, 2, 2, 3), builder.getInt32ToInt32Field()); |
274 | 226 |
275 builder.putInt32ToEnumField(1, TestMap.EnumValue.BAR); | 227 Map<Integer, TestMap.EnumValue> enumMap = builder.getMutableInt32ToEnumField
(); |
| 228 enumMap.put(1, TestMap.EnumValue.BAR); |
276 assertEquals(newMap(1, TestMap.EnumValue.BAR), builder.build().getInt32ToEnu
mField()); | 229 assertEquals(newMap(1, TestMap.EnumValue.BAR), builder.build().getInt32ToEnu
mField()); |
| 230 try { |
| 231 enumMap.put(2, TestMap.EnumValue.FOO); |
| 232 fail(); |
| 233 } catch (UnsupportedOperationException e) { |
| 234 // expected |
| 235 } |
277 assertEquals(newMap(1, TestMap.EnumValue.BAR), builder.getInt32ToEnumField()
); | 236 assertEquals(newMap(1, TestMap.EnumValue.BAR), builder.getInt32ToEnumField()
); |
278 builder.putInt32ToEnumField(2, TestMap.EnumValue.FOO); | 237 builder.getMutableInt32ToEnumField().put(2, TestMap.EnumValue.FOO); |
279 assertEquals( | 238 assertEquals( |
280 newMap(1, TestMap.EnumValue.BAR, 2, TestMap.EnumValue.FOO), | 239 newMap(1, TestMap.EnumValue.BAR, 2, TestMap.EnumValue.FOO), |
281 builder.getInt32ToEnumField()); | 240 builder.getInt32ToEnumField()); |
282 | 241 |
283 builder.putInt32ToStringField(1, "1"); | 242 Map<Integer, String> stringMap = builder.getMutableInt32ToStringField(); |
| 243 stringMap.put(1, "1"); |
284 assertEquals(newMap(1, "1"), builder.build().getInt32ToStringField()); | 244 assertEquals(newMap(1, "1"), builder.build().getInt32ToStringField()); |
| 245 try { |
| 246 stringMap.put(2, "2"); |
| 247 fail(); |
| 248 } catch (UnsupportedOperationException e) { |
| 249 // expected |
| 250 } |
285 assertEquals(newMap(1, "1"), builder.getInt32ToStringField()); | 251 assertEquals(newMap(1, "1"), builder.getInt32ToStringField()); |
286 builder.putInt32ToStringField(2, "2"); | 252 builder.getMutableInt32ToStringField().put(2, "2"); |
287 assertEquals(newMap(1, "1", 2, "2"), builder.getInt32ToStringField()); | 253 assertEquals( |
288 | 254 newMap(1, "1", 2, "2"), |
289 builder.putInt32ToMessageField(1, TestMap.MessageValue.getDefaultInstance())
; | 255 builder.getInt32ToStringField()); |
| 256 |
| 257 Map<Integer, TestMap.MessageValue> messageMap = builder.getMutableInt32ToMes
sageField(); |
| 258 messageMap.put(1, TestMap.MessageValue.getDefaultInstance()); |
290 assertEquals(newMap(1, TestMap.MessageValue.getDefaultInstance()), | 259 assertEquals(newMap(1, TestMap.MessageValue.getDefaultInstance()), |
291 builder.build().getInt32ToMessageField()); | 260 builder.build().getInt32ToMessageField()); |
| 261 try { |
| 262 messageMap.put(2, TestMap.MessageValue.getDefaultInstance()); |
| 263 fail(); |
| 264 } catch (UnsupportedOperationException e) { |
| 265 // expected |
| 266 } |
292 assertEquals(newMap(1, TestMap.MessageValue.getDefaultInstance()), | 267 assertEquals(newMap(1, TestMap.MessageValue.getDefaultInstance()), |
293 builder.getInt32ToMessageField()); | 268 builder.getInt32ToMessageField()); |
294 builder.putInt32ToMessageField(2, TestMap.MessageValue.getDefaultInstance())
; | 269 builder.getMutableInt32ToMessageField().put(2, TestMap.MessageValue.getDefau
ltInstance()); |
295 assertEquals( | 270 assertEquals( |
296 newMap(1, TestMap.MessageValue.getDefaultInstance(), | 271 newMap(1, TestMap.MessageValue.getDefaultInstance(), |
297 2, TestMap.MessageValue.getDefaultInstance()), | 272 2, TestMap.MessageValue.getDefaultInstance()), |
298 builder.getInt32ToMessageField()); | 273 builder.getInt32ToMessageField()); |
299 } | 274 } |
300 | 275 |
| 276 public void testMutableMapLifecycle_collections() { |
| 277 TestMap.Builder builder = TestMap.newBuilder(); |
| 278 Map<Integer, Integer> intMap = builder.getMutableInt32ToInt32Field(); |
| 279 intMap.put(1, 2); |
| 280 assertEquals(newMap(1, 2), builder.build().getInt32ToInt32Field()); |
| 281 try { |
| 282 intMap.remove(2); |
| 283 fail(); |
| 284 } catch (UnsupportedOperationException e) { |
| 285 // expected |
| 286 } |
| 287 try { |
| 288 intMap.entrySet().remove(new Object()); |
| 289 fail(); |
| 290 } catch (UnsupportedOperationException e) { |
| 291 // expected |
| 292 } |
| 293 try { |
| 294 intMap.entrySet().iterator().remove(); |
| 295 fail(); |
| 296 } catch (UnsupportedOperationException e) { |
| 297 // expected |
| 298 } |
| 299 try { |
| 300 intMap.keySet().remove(new Object()); |
| 301 fail(); |
| 302 } catch (UnsupportedOperationException e) { |
| 303 // expected |
| 304 } |
| 305 try { |
| 306 intMap.values().remove(new Object()); |
| 307 fail(); |
| 308 } catch (UnsupportedOperationException e) { |
| 309 // expected |
| 310 } |
| 311 try { |
| 312 intMap.values().iterator().remove(); |
| 313 fail(); |
| 314 } catch (UnsupportedOperationException e) { |
| 315 // expected |
| 316 } |
| 317 assertEquals(newMap(1, 2), intMap); |
| 318 assertEquals(newMap(1, 2), builder.getInt32ToInt32Field()); |
| 319 assertEquals(newMap(1, 2), builder.build().getInt32ToInt32Field()); |
| 320 } |
| 321 |
301 public void testGettersAndSetters() throws Exception { | 322 public void testGettersAndSetters() throws Exception { |
302 TestMap.Builder builder = TestMap.newBuilder(); | 323 TestMap.Builder builder = TestMap.newBuilder(); |
303 TestMap message = builder.build(); | 324 TestMap message = builder.build(); |
304 assertMapValuesCleared(message); | 325 assertMapValuesCleared(message); |
305 | 326 |
306 builder = message.toBuilder(); | 327 builder = message.toBuilder(); |
307 setMapValues(builder); | 328 setMapValues(builder); |
308 message = builder.build(); | 329 message = builder.build(); |
309 assertMapValuesSet(message); | 330 assertMapValuesSet(message); |
310 | 331 |
311 builder = message.toBuilder(); | 332 builder = message.toBuilder(); |
312 updateMapValues(builder); | 333 updateMapValues(builder); |
313 message = builder.build(); | 334 message = builder.build(); |
314 assertMapValuesUpdated(message); | 335 assertMapValuesUpdated(message); |
315 | 336 |
316 builder = message.toBuilder(); | 337 builder = message.toBuilder(); |
317 builder.clear(); | 338 builder.clear(); |
318 assertMapValuesCleared(builder); | |
319 message = builder.build(); | 339 message = builder.build(); |
320 assertMapValuesCleared(message); | 340 assertMapValuesCleared(message); |
321 } | 341 } |
322 | 342 |
323 public void testPutAll() throws Exception { | 343 public void testPutAll() throws Exception { |
324 TestMap.Builder sourceBuilder = TestMap.newBuilder(); | 344 TestMap.Builder sourceBuilder = TestMap.newBuilder(); |
325 setMapValues(sourceBuilder); | 345 setMapValues(sourceBuilder); |
326 TestMap source = sourceBuilder.build(); | 346 TestMap source = sourceBuilder.build(); |
327 assertMapValuesSet(source); | |
328 | 347 |
329 TestMap.Builder destination = TestMap.newBuilder(); | 348 TestMap.Builder destination = TestMap.newBuilder(); |
330 copyMapValues(source, destination); | 349 copyMapValues(source, destination); |
331 assertMapValuesSet(destination.build()); | 350 assertMapValuesSet(destination.build()); |
332 } | 351 } |
333 | 352 |
334 public void testPutChecksNullKeysAndValues() throws Exception { | |
335 TestMap.Builder builder = TestMap.newBuilder(); | |
336 | |
337 try { | |
338 builder.putInt32ToStringField(1, null); | |
339 fail(); | |
340 } catch (NullPointerException e) { | |
341 // expected. | |
342 } | |
343 | |
344 try { | |
345 builder.putInt32ToBytesField(1, null); | |
346 fail(); | |
347 } catch (NullPointerException e) { | |
348 // expected. | |
349 } | |
350 | |
351 try { | |
352 builder.putInt32ToEnumField(1, null); | |
353 fail(); | |
354 } catch (NullPointerException e) { | |
355 // expected. | |
356 } | |
357 | |
358 try { | |
359 builder.putInt32ToMessageField(1, null); | |
360 fail(); | |
361 } catch (NullPointerException e) { | |
362 // expected. | |
363 } | |
364 | |
365 try { | |
366 builder.putStringToInt32Field(null, 1); | |
367 fail(); | |
368 } catch (NullPointerException e) { | |
369 // expected. | |
370 } | |
371 } | |
372 | |
373 public void testSerializeAndParse() throws Exception { | 353 public void testSerializeAndParse() throws Exception { |
374 TestMap.Builder builder = TestMap.newBuilder(); | 354 TestMap.Builder builder = TestMap.newBuilder(); |
375 setMapValues(builder); | 355 setMapValues(builder); |
376 TestMap message = builder.build(); | 356 TestMap message = builder.build(); |
377 assertEquals(message.getSerializedSize(), message.toByteString().size()); | 357 assertEquals(message.getSerializedSize(), message.toByteString().size()); |
378 message = TestMap.parser().parseFrom(message.toByteString()); | 358 message = TestMap.parser().parseFrom(message.toByteString()); |
379 assertMapValuesSet(message); | 359 assertMapValuesSet(message); |
380 | 360 |
381 builder = message.toBuilder(); | 361 builder = message.toBuilder(); |
382 updateMapValues(builder); | 362 updateMapValues(builder); |
383 message = builder.build(); | 363 message = builder.build(); |
384 assertEquals(message.getSerializedSize(), message.toByteString().size()); | 364 assertEquals(message.getSerializedSize(), message.toByteString().size()); |
385 message = TestMap.parser().parseFrom(message.toByteString()); | 365 message = TestMap.parser().parseFrom(message.toByteString()); |
386 assertMapValuesUpdated(message); | 366 assertMapValuesUpdated(message); |
387 | 367 |
388 builder = message.toBuilder(); | 368 builder = message.toBuilder(); |
389 builder.clear(); | 369 builder.clear(); |
390 message = builder.build(); | 370 message = builder.build(); |
391 assertEquals(message.getSerializedSize(), message.toByteString().size()); | 371 assertEquals(message.getSerializedSize(), message.toByteString().size()); |
392 message = TestMap.parser().parseFrom(message.toByteString()); | 372 message = TestMap.parser().parseFrom(message.toByteString()); |
393 assertMapValuesCleared(message); | 373 assertMapValuesCleared(message); |
394 } | 374 } |
395 | 375 |
396 private TestMap tryParseTestMap(BizarroTestMap bizarroMap) throws IOException
{ | |
397 ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); | |
398 CodedOutputStream output = CodedOutputStream.newInstance(byteArrayOutputStre
am); | |
399 bizarroMap.writeTo(output); | |
400 output.flush(); | |
401 return TestMap.parser().parseFrom(ByteString.copyFrom(byteArrayOutputStream.
toByteArray())); | |
402 } | |
403 | |
404 public void testParseError() throws Exception { | |
405 ByteString bytes = TestUtil.toBytes("SOME BYTES"); | |
406 String stringKey = "a string key"; | |
407 | |
408 TestMap map = tryParseTestMap(BizarroTestMap.newBuilder() | |
409 .putInt32ToInt32Field(5, bytes) | |
410 .build()); | |
411 assertEquals(map.getInt32ToInt32FieldOrDefault(5, -1), 0); | |
412 | |
413 map = tryParseTestMap(BizarroTestMap.newBuilder() | |
414 .putInt32ToStringField(stringKey, 5) | |
415 .build()); | |
416 assertEquals(map.getInt32ToStringFieldOrDefault(0, null), ""); | |
417 | |
418 map = tryParseTestMap(BizarroTestMap.newBuilder() | |
419 .putInt32ToBytesField(stringKey, 5) | |
420 .build()); | |
421 assertEquals(map.getInt32ToBytesFieldOrDefault(0, null), ByteString.EMPTY); | |
422 | |
423 map = tryParseTestMap(BizarroTestMap.newBuilder() | |
424 .putInt32ToEnumField(stringKey, bytes) | |
425 .build()); | |
426 assertEquals(map.getInt32ToEnumFieldOrDefault(0, null), TestMap.EnumValue.FO
O); | |
427 | |
428 try { | |
429 tryParseTestMap(BizarroTestMap.newBuilder() | |
430 .putInt32ToMessageField(stringKey, bytes) | |
431 .build()); | |
432 fail(); | |
433 } catch (InvalidProtocolBufferException expected) { | |
434 assertTrue(expected.getUnfinishedMessage() instanceof TestMap); | |
435 map = (TestMap) expected.getUnfinishedMessage(); | |
436 assertTrue(map.getInt32ToMessageField().isEmpty()); | |
437 } | |
438 | |
439 map = tryParseTestMap(BizarroTestMap.newBuilder() | |
440 .putStringToInt32Field(stringKey, bytes) | |
441 .build()); | |
442 assertEquals(map.getStringToInt32FieldOrDefault(stringKey, -1), 0); | |
443 } | |
444 | |
445 public void testMergeFrom() throws Exception { | 376 public void testMergeFrom() throws Exception { |
446 TestMap.Builder builder = TestMap.newBuilder(); | 377 TestMap.Builder builder = TestMap.newBuilder(); |
447 setMapValues(builder); | 378 setMapValues(builder); |
448 TestMap message = builder.build(); | 379 TestMap message = builder.build(); |
449 | 380 |
450 TestMap.Builder other = TestMap.newBuilder(); | 381 TestMap.Builder other = TestMap.newBuilder(); |
451 other.mergeFrom(message); | 382 other.mergeFrom(message); |
452 assertMapValuesSet(other.build()); | 383 assertMapValuesSet(other.build()); |
453 } | 384 } |
454 | 385 |
455 public void testEqualsAndHashCode() throws Exception { | 386 public void testEqualsAndHashCode() throws Exception { |
456 // Test that generated equals() and hashCode() will disregard the order | 387 // Test that generated equals() and hashCode() will disregard the order |
457 // of map entries when comparing/hashing map fields. | 388 // of map entries when comparing/hashing map fields. |
458 | 389 |
459 // We can't control the order of elements in a HashMap. The best we can do | 390 // We can't control the order of elements in a HashMap. The best we can do |
460 // here is to add elements in different order. | 391 // here is to add elements in different order. |
461 TestMap.Builder b1 = TestMap.newBuilder() | 392 TestMap.Builder b1 = TestMap.newBuilder(); |
462 .putInt32ToInt32Field(1, 2) | 393 b1.getMutableInt32ToInt32Field().put(1, 2); |
463 .putInt32ToInt32Field(3, 4) | 394 b1.getMutableInt32ToInt32Field().put(3, 4); |
464 .putInt32ToInt32Field(5, 6); | 395 b1.getMutableInt32ToInt32Field().put(5, 6); |
465 TestMap m1 = b1.build(); | 396 TestMap m1 = b1.build(); |
466 | 397 |
467 TestMap.Builder b2 = TestMap.newBuilder() | 398 TestMap.Builder b2 = TestMap.newBuilder(); |
468 .putInt32ToInt32Field(5, 6) | 399 b2.getMutableInt32ToInt32Field().put(5, 6); |
469 .putInt32ToInt32Field(1, 2) | 400 b2.getMutableInt32ToInt32Field().put(1, 2); |
470 .putInt32ToInt32Field(3, 4); | 401 b2.getMutableInt32ToInt32Field().put(3, 4); |
471 TestMap m2 = b2.build(); | 402 TestMap m2 = b2.build(); |
472 | 403 |
473 assertEquals(m1, m2); | 404 assertEquals(m1, m2); |
474 assertEquals(m1.hashCode(), m2.hashCode()); | 405 assertEquals(m1.hashCode(), m2.hashCode()); |
475 | 406 |
476 // Make sure we did compare map fields. | 407 // Make sure we did compare map fields. |
477 b2.putInt32ToInt32Field(1, 0); | 408 b2.getMutableInt32ToInt32Field().put(1, 0); |
478 m2 = b2.build(); | 409 m2 = b2.build(); |
479 assertFalse(m1.equals(m2)); | 410 assertFalse(m1.equals(m2)); |
480 // Don't check m1.hashCode() != m2.hashCode() because it's not guaranteed | 411 // Don't check m1.hashCode() != m2.hashCode() because it's not guaranteed |
481 // to be different. | 412 // to be different. |
482 } | 413 } |
483 | 414 |
484 public void testUnknownEnumValues() throws Exception { | 415 public void testUnknownEnumValues() throws Exception { |
485 TestUnknownEnumValue.Builder builder = TestUnknownEnumValue.newBuilder() | 416 TestUnknownEnumValue.Builder builder = |
486 .putInt32ToInt32Field(1, 1) | 417 TestUnknownEnumValue.newBuilder(); |
487 .putInt32ToInt32Field(2, 54321); | 418 builder.getMutableInt32ToInt32Field().put(1, 1); |
| 419 builder.getMutableInt32ToInt32Field().put(2, 54321); |
488 ByteString data = builder.build().toByteString(); | 420 ByteString data = builder.build().toByteString(); |
489 | 421 |
490 TestMap message = TestMap.parseFrom(data); | 422 TestMap message = TestMap.parseFrom(data); |
491 // Entries with unknown enum values will be stored into UnknownFieldSet so | 423 // Entries with unknown enum values will be stored into UnknownFieldSet so |
492 // there is only one entry in the map. | 424 // there is only one entry in the map. |
493 assertEquals(1, message.getInt32ToEnumField().size()); | 425 assertEquals(1, message.getInt32ToEnumField().size()); |
494 assertEquals(TestMap.EnumValue.BAR, message.getInt32ToEnumField().get(1)); | 426 assertEquals(TestMap.EnumValue.BAR, message.getInt32ToEnumField().get(1)); |
495 // Serializing and parsing should preserve the unknown entry. | 427 // Serializing and parsing should preserve the unknown entry. |
496 data = message.toByteString(); | 428 data = message.toByteString(); |
497 TestUnknownEnumValue messageWithUnknownEnums = | 429 TestUnknownEnumValue messageWithUnknownEnums = |
498 TestUnknownEnumValue.parseFrom(data); | 430 TestUnknownEnumValue.parseFrom(data); |
499 assertEquals(2, messageWithUnknownEnums.getInt32ToInt32Field().size()); | 431 assertEquals(2, messageWithUnknownEnums.getInt32ToInt32Field().size()); |
500 assertEquals(1, messageWithUnknownEnums.getInt32ToInt32Field().get(1).intVal
ue()); | 432 assertEquals(1, messageWithUnknownEnums.getInt32ToInt32Field().get(1).intVal
ue()); |
501 assertEquals(54321, messageWithUnknownEnums.getInt32ToInt32Field().get(2).in
tValue()); | 433 assertEquals(54321, messageWithUnknownEnums.getInt32ToInt32Field().get(2).in
tValue()); |
502 } | 434 } |
503 | 435 |
| 436 |
504 public void testIterationOrder() throws Exception { | 437 public void testIterationOrder() throws Exception { |
505 TestMap.Builder builder = TestMap.newBuilder(); | 438 TestMap.Builder builder = TestMap.newBuilder(); |
506 setMapValues(builder); | 439 setMapValues(builder); |
507 TestMap message = builder.build(); | 440 TestMap message = builder.build(); |
508 | 441 |
509 assertEquals(Arrays.asList("1", "2", "3"), | 442 assertEquals(Arrays.asList("1", "2", "3"), |
510 new ArrayList<String>(message.getStringToInt32Field().keySet())); | 443 new ArrayList<String>(message.getStringToInt32Field().keySet())); |
511 } | 444 } |
512 | 445 |
513 private static <K, V> Map<K, V> newMap(K key1, V value1) { | 446 private static <K, V> Map<K, V> newMap(K key1, V value1) { |
514 Map<K, V> map = new HashMap<K, V>(); | 447 Map<K, V> map = new HashMap<K, V>(); |
515 map.put(key1, value1); | 448 map.put(key1, value1); |
516 return map; | 449 return map; |
517 } | 450 } |
518 | 451 |
519 private static <K, V> Map<K, V> newMap(K key1, V value1, K key2, V value2) { | 452 private static <K, V> Map<K, V> newMap(K key1, V value1, K key2, V value2) { |
520 Map<K, V> map = new HashMap<K, V>(); | 453 Map<K, V> map = new HashMap<K, V>(); |
521 map.put(key1, value1); | 454 map.put(key1, value1); |
522 map.put(key2, value2); | 455 map.put(key2, value2); |
523 return map; | 456 return map; |
524 } | 457 } |
525 | |
526 public void testGetMap() { | |
527 TestMap.Builder builder = TestMap.newBuilder(); | |
528 setMapValues(builder); | |
529 TestMap message = builder.build(); | |
530 assertEquals( | |
531 message.getStringToInt32Field(), | |
532 message.getStringToInt32FieldMap()); | |
533 assertEquals( | |
534 message.getInt32ToBytesField(), | |
535 message.getInt32ToBytesFieldMap()); | |
536 assertEquals( | |
537 message.getInt32ToEnumField(), | |
538 message.getInt32ToEnumFieldMap()); | |
539 assertEquals( | |
540 message.getInt32ToMessageField(), | |
541 message.getInt32ToMessageFieldMap()); | |
542 } | |
543 | |
544 public void testContains() { | |
545 TestMap.Builder builder = TestMap.newBuilder(); | |
546 setMapValues(builder); | |
547 assertMapContainsSetValues(builder); | |
548 assertMapContainsSetValues(builder.build()); | |
549 } | |
550 | |
551 private void assertMapContainsSetValues(TestMapOrBuilder testMapOrBuilder) { | |
552 assertTrue(testMapOrBuilder.containsInt32ToInt32Field(1)); | |
553 assertTrue(testMapOrBuilder.containsInt32ToInt32Field(2)); | |
554 assertTrue(testMapOrBuilder.containsInt32ToInt32Field(3)); | |
555 assertFalse(testMapOrBuilder.containsInt32ToInt32Field(-1)); | |
556 | |
557 assertTrue(testMapOrBuilder.containsInt32ToStringField(1)); | |
558 assertTrue(testMapOrBuilder.containsInt32ToStringField(2)); | |
559 assertTrue(testMapOrBuilder.containsInt32ToStringField(3)); | |
560 assertFalse(testMapOrBuilder.containsInt32ToStringField(-1)); | |
561 | |
562 assertTrue(testMapOrBuilder.containsInt32ToBytesField(1)); | |
563 assertTrue(testMapOrBuilder.containsInt32ToBytesField(2)); | |
564 assertTrue(testMapOrBuilder.containsInt32ToBytesField(3)); | |
565 assertFalse(testMapOrBuilder.containsInt32ToBytesField(-1)); | |
566 | |
567 assertTrue(testMapOrBuilder.containsInt32ToEnumField(1)); | |
568 assertTrue(testMapOrBuilder.containsInt32ToEnumField(2)); | |
569 assertTrue(testMapOrBuilder.containsInt32ToEnumField(3)); | |
570 assertFalse(testMapOrBuilder.containsInt32ToEnumField(-1)); | |
571 | |
572 assertTrue(testMapOrBuilder.containsInt32ToMessageField(1)); | |
573 assertTrue(testMapOrBuilder.containsInt32ToMessageField(2)); | |
574 assertTrue(testMapOrBuilder.containsInt32ToMessageField(3)); | |
575 assertFalse(testMapOrBuilder.containsInt32ToMessageField(-1)); | |
576 | |
577 assertTrue(testMapOrBuilder.containsStringToInt32Field("1")); | |
578 assertTrue(testMapOrBuilder.containsStringToInt32Field("2")); | |
579 assertTrue(testMapOrBuilder.containsStringToInt32Field("3")); | |
580 assertFalse(testMapOrBuilder.containsStringToInt32Field("-1")); | |
581 } | |
582 | |
583 public void testCount() { | |
584 TestMap.Builder builder = TestMap.newBuilder(); | |
585 assertMapCounts(0, builder); | |
586 | |
587 setMapValues(builder); | |
588 assertMapCounts(3, builder); | |
589 | |
590 TestMap message = builder.build(); | |
591 assertMapCounts(3, message); | |
592 | |
593 builder = message.toBuilder().putInt32ToInt32Field(4, 44); | |
594 assertEquals(4, builder.getInt32ToInt32FieldCount()); | |
595 assertEquals(4, builder.build().getInt32ToInt32FieldCount()); | |
596 | |
597 // already present - should be unchanged | |
598 builder.putInt32ToInt32Field(4, 44); | |
599 assertEquals(4, builder.getInt32ToInt32FieldCount()); | |
600 } | |
601 | |
602 private void assertMapCounts(int expectedCount, TestMapOrBuilder testMapOrBuil
der) { | |
603 assertEquals(expectedCount, testMapOrBuilder.getInt32ToInt32FieldCount()); | |
604 assertEquals(expectedCount, testMapOrBuilder.getInt32ToStringFieldCount()); | |
605 assertEquals(expectedCount, testMapOrBuilder.getInt32ToBytesFieldCount()); | |
606 assertEquals(expectedCount, testMapOrBuilder.getInt32ToEnumFieldCount()); | |
607 assertEquals(expectedCount, testMapOrBuilder.getInt32ToMessageFieldCount()); | |
608 assertEquals(expectedCount, testMapOrBuilder.getStringToInt32FieldCount()); | |
609 } | |
610 | |
611 public void testGetOrDefault() { | |
612 TestMap.Builder builder = TestMap.newBuilder(); | |
613 assertMapCounts(0, builder); | |
614 setMapValues(builder); | |
615 doTestGetOrDefault(builder); | |
616 doTestGetOrDefault(builder.build()); | |
617 } | |
618 | |
619 public void doTestGetOrDefault(TestMapOrBuilder testMapOrBuilder) { | |
620 assertEquals(11, testMapOrBuilder.getInt32ToInt32FieldOrDefault(1, -11)); | |
621 assertEquals(-11, testMapOrBuilder.getInt32ToInt32FieldOrDefault(-1, -11)); | |
622 | |
623 assertEquals("11", testMapOrBuilder.getInt32ToStringFieldOrDefault(1, "-11")
); | |
624 assertNull("-11", testMapOrBuilder.getInt32ToStringFieldOrDefault(-1, null))
; | |
625 | |
626 assertEquals(TestUtil.toBytes("11"), testMapOrBuilder.getInt32ToBytesFieldOr
Default(1, null)); | |
627 assertNull(testMapOrBuilder.getInt32ToBytesFieldOrDefault(-1, null)); | |
628 | |
629 assertEquals(TestMap.EnumValue.FOO, testMapOrBuilder.getInt32ToEnumFieldOrDe
fault(1, null)); | |
630 assertNull(testMapOrBuilder.getInt32ToEnumFieldOrDefault(-1, null)); | |
631 | |
632 assertEquals(MessageValue.newBuilder().setValue(11).build(), | |
633 testMapOrBuilder.getInt32ToMessageFieldOrDefault(1, null)); | |
634 assertNull(testMapOrBuilder.getInt32ToMessageFieldOrDefault(-1, null)); | |
635 | |
636 assertEquals(11, testMapOrBuilder.getStringToInt32FieldOrDefault("1", -11)); | |
637 assertEquals(-11, testMapOrBuilder.getStringToInt32FieldOrDefault("-1", -11)
); | |
638 | |
639 try { | |
640 testMapOrBuilder.getStringToInt32FieldOrDefault(null, -11); | |
641 fail(); | |
642 } catch (NullPointerException e) { | |
643 // expected | |
644 } | |
645 } | |
646 | |
647 public void testGetOrThrow() { | |
648 TestMap.Builder builder = TestMap.newBuilder(); | |
649 assertMapCounts(0, builder); | |
650 setMapValues(builder); | |
651 doTestGetOrDefault(builder); | |
652 doTestGetOrDefault(builder.build()); | |
653 } | |
654 | |
655 public void doTestGetOrThrow(TestMapOrBuilder testMapOrBuilder) { | |
656 assertEquals(11, testMapOrBuilder.getInt32ToInt32FieldOrThrow(1)); | |
657 try { | |
658 testMapOrBuilder.getInt32ToInt32FieldOrThrow(-1); | |
659 fail(); | |
660 } catch (IllegalArgumentException e) { | |
661 // expected | |
662 } | |
663 | |
664 assertEquals("11", testMapOrBuilder.getInt32ToStringFieldOrThrow(1)); | |
665 | |
666 try { | |
667 testMapOrBuilder.getInt32ToStringFieldOrThrow(-1); | |
668 fail(); | |
669 } catch (IllegalArgumentException e) { | |
670 // expected | |
671 } | |
672 | |
673 assertEquals(TestUtil.toBytes("11"), testMapOrBuilder.getInt32ToBytesFieldOr
Throw(1)); | |
674 | |
675 try { | |
676 testMapOrBuilder.getInt32ToBytesFieldOrThrow(-1); | |
677 fail(); | |
678 } catch (IllegalArgumentException e) { | |
679 // expected | |
680 } | |
681 | |
682 assertEquals(TestMap.EnumValue.FOO, testMapOrBuilder.getInt32ToEnumFieldOrTh
row(1)); | |
683 try { | |
684 testMapOrBuilder.getInt32ToEnumFieldOrThrow(-1); | |
685 fail(); | |
686 } catch (IllegalArgumentException e) { | |
687 // expected | |
688 } | |
689 | |
690 assertEquals(MessageValue.newBuilder().setValue(11).build(), | |
691 testMapOrBuilder.getInt32ToMessageFieldOrThrow(1)); | |
692 try { | |
693 testMapOrBuilder.getInt32ToMessageFieldOrThrow(-1); | |
694 fail(); | |
695 } catch (IllegalArgumentException e) { | |
696 // expected | |
697 } | |
698 | |
699 assertEquals(11, testMapOrBuilder.getStringToInt32FieldOrThrow("1")); | |
700 try { | |
701 testMapOrBuilder.getStringToInt32FieldOrThrow("-1"); | |
702 fail(); | |
703 } catch (IllegalArgumentException e) { | |
704 // expected | |
705 } | |
706 | |
707 try { | |
708 testMapOrBuilder.getStringToInt32FieldOrThrow(null); | |
709 fail(); | |
710 } catch (NullPointerException e) { | |
711 // expected | |
712 } | |
713 } | |
714 | |
715 public void testPut() { | |
716 TestMap.Builder builder = TestMap.newBuilder(); | |
717 builder.putInt32ToInt32Field(1, 11); | |
718 assertEquals(11, builder.getInt32ToInt32FieldOrThrow(1)); | |
719 | |
720 builder.putInt32ToStringField(1, "a"); | |
721 assertEquals("a", builder.getInt32ToStringFieldOrThrow(1)); | |
722 try { | |
723 builder.putInt32ToStringField(1, null); | |
724 fail(); | |
725 } catch (NullPointerException e) { | |
726 // expected | |
727 } | |
728 | |
729 builder.putInt32ToBytesField(1, TestUtil.toBytes("11")); | |
730 assertEquals(TestUtil.toBytes("11"), builder.getInt32ToBytesFieldOrThrow(1))
; | |
731 try { | |
732 builder.putInt32ToBytesField(1, null); | |
733 fail(); | |
734 } catch (NullPointerException e) { | |
735 // expected | |
736 } | |
737 | |
738 builder.putInt32ToEnumField(1, TestMap.EnumValue.FOO); | |
739 assertEquals(TestMap.EnumValue.FOO, builder.getInt32ToEnumFieldOrThrow(1)); | |
740 try { | |
741 builder.putInt32ToEnumField(1, null); | |
742 fail(); | |
743 } catch (NullPointerException e) { | |
744 // expected | |
745 } | |
746 | |
747 builder.putStringToInt32Field("a", 1); | |
748 assertEquals(1, builder.getStringToInt32FieldOrThrow("a")); | |
749 try { | |
750 builder.putStringToInt32Field(null, -1); | |
751 } catch (NullPointerException e) { | |
752 // expected | |
753 } | |
754 } | |
755 | |
756 public void testRemove() { | |
757 TestMap.Builder builder = TestMap.newBuilder(); | |
758 setMapValues(builder); | |
759 assertEquals(11, builder.getInt32ToInt32FieldOrThrow(1)); | |
760 for (int times = 0; times < 2; times++) { | |
761 builder.removeInt32ToInt32Field(1); | |
762 assertEquals(-1, builder.getInt32ToInt32FieldOrDefault(1, -1)); | |
763 } | |
764 | |
765 assertEquals("11", builder.getInt32ToStringFieldOrThrow(1)); | |
766 for (int times = 0; times < 2; times++) { | |
767 builder.removeInt32ToStringField(1); | |
768 assertNull(builder.getInt32ToStringFieldOrDefault(1, null)); | |
769 } | |
770 | |
771 assertEquals(TestUtil.toBytes("11"), builder.getInt32ToBytesFieldOrThrow(1))
; | |
772 for (int times = 0; times < 2; times++) { | |
773 builder.removeInt32ToBytesField(1); | |
774 assertNull(builder.getInt32ToBytesFieldOrDefault(1, null)); | |
775 } | |
776 | |
777 assertEquals(TestMap.EnumValue.FOO, builder.getInt32ToEnumFieldOrThrow(1)); | |
778 for (int times = 0; times < 2; times++) { | |
779 builder.removeInt32ToEnumField(1); | |
780 assertNull(builder.getInt32ToEnumFieldOrDefault(1, null)); | |
781 } | |
782 | |
783 assertEquals(11, builder.getStringToInt32FieldOrThrow("1")); | |
784 for (int times = 0; times < 2; times++) { | |
785 builder.removeStringToInt32Field("1"); | |
786 assertEquals(-1, builder.getStringToInt32FieldOrDefault("1", -1)); | |
787 } | |
788 | |
789 try { | |
790 builder.removeStringToInt32Field(null); | |
791 fail(); | |
792 } catch (NullPointerException e) { | |
793 // expected | |
794 } | |
795 } | |
796 } | 458 } |
OLD | NEW |