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; |
33 import map_lite_test.MapForProto2TestProto.TestMap; | 34 import map_lite_test.MapForProto2TestProto.TestMap; |
34 import map_lite_test.MapForProto2TestProto.TestMap.MessageValue; | 35 import map_lite_test.MapForProto2TestProto.TestMap.MessageValue; |
| 36 import map_lite_test.MapForProto2TestProto.TestMapOrBuilder; |
35 import map_lite_test.MapForProto2TestProto.TestUnknownEnumValue; | 37 import map_lite_test.MapForProto2TestProto.TestUnknownEnumValue; |
36 | 38 import java.io.ByteArrayOutputStream; |
37 import junit.framework.TestCase; | 39 import java.io.IOException; |
38 | |
39 import java.util.ArrayList; | 40 import java.util.ArrayList; |
40 import java.util.Arrays; | 41 import java.util.Arrays; |
41 import java.util.HashMap; | 42 import java.util.HashMap; |
42 import java.util.Map; | 43 import java.util.Map; |
| 44 import junit.framework.TestCase; |
43 | 45 |
44 /** | 46 /** |
45 * Unit tests for map fields. | 47 * Unit tests for map fields. |
46 */ | 48 */ |
47 public class MapForProto2LiteTest extends TestCase { | 49 public final class MapForProto2LiteTest extends TestCase { |
| 50 |
48 private void setMapValues(TestMap.Builder builder) { | 51 private void setMapValues(TestMap.Builder builder) { |
49 builder.getMutableInt32ToInt32Field().put(1, 11); | 52 builder |
50 builder.getMutableInt32ToInt32Field().put(2, 22); | 53 .putInt32ToInt32Field(1, 11) |
51 builder.getMutableInt32ToInt32Field().put(3, 33); | 54 .putInt32ToInt32Field(2, 22) |
| 55 .putInt32ToInt32Field(3, 33) |
52 | 56 |
53 builder.getMutableInt32ToStringField().put(1, "11"); | 57 .putInt32ToStringField(1, "11") |
54 builder.getMutableInt32ToStringField().put(2, "22"); | 58 .putInt32ToStringField(2, "22") |
55 builder.getMutableInt32ToStringField().put(3, "33"); | 59 .putInt32ToStringField(3, "33") |
56 | 60 |
57 builder.getMutableInt32ToBytesField().put(1, TestUtil.toBytes("11")); | 61 .putInt32ToBytesField(1, TestUtil.toBytes("11")) |
58 builder.getMutableInt32ToBytesField().put(2, TestUtil.toBytes("22")); | 62 .putInt32ToBytesField(2, TestUtil.toBytes("22")) |
59 builder.getMutableInt32ToBytesField().put(3, TestUtil.toBytes("33")); | 63 .putInt32ToBytesField(3, TestUtil.toBytes("33")) |
60 | 64 |
61 builder.getMutableInt32ToEnumField().put(1, TestMap.EnumValue.FOO); | 65 .putInt32ToEnumField(1, TestMap.EnumValue.FOO) |
62 builder.getMutableInt32ToEnumField().put(2, TestMap.EnumValue.BAR); | 66 .putInt32ToEnumField(2, TestMap.EnumValue.BAR) |
63 builder.getMutableInt32ToEnumField().put(3, TestMap.EnumValue.BAZ); | 67 .putInt32ToEnumField(3, TestMap.EnumValue.BAZ) |
64 | 68 |
65 builder.getMutableInt32ToMessageField().put( | 69 .putInt32ToMessageField(1, MessageValue.newBuilder().setValue(11).build(
)) |
66 1, MessageValue.newBuilder().setValue(11).build()); | 70 .putInt32ToMessageField(2, MessageValue.newBuilder().setValue(22).build(
)) |
67 builder.getMutableInt32ToMessageField().put( | 71 .putInt32ToMessageField(3, MessageValue.newBuilder().setValue(33).build(
)) |
68 2, MessageValue.newBuilder().setValue(22).build()); | 72 |
69 builder.getMutableInt32ToMessageField().put( | 73 .putStringToInt32Field("1", 11) |
70 3, MessageValue.newBuilder().setValue(33).build()); | 74 .putStringToInt32Field("2", 22) |
71 | 75 .putStringToInt32Field("3", 33); |
72 builder.getMutableStringToInt32Field().put("1", 11); | 76 } |
73 builder.getMutableStringToInt32Field().put("2", 22); | 77 |
74 builder.getMutableStringToInt32Field().put("3", 33); | 78 public void testSetMapValues() { |
| 79 TestMap.Builder mapBuilder = TestMap.newBuilder(); |
| 80 setMapValues(mapBuilder); |
| 81 TestMap map = mapBuilder.build(); |
| 82 assertMapValuesSet(map); |
75 } | 83 } |
76 | 84 |
77 private void copyMapValues(TestMap source, TestMap.Builder destination) { | 85 private void copyMapValues(TestMap source, TestMap.Builder destination) { |
78 destination | 86 destination |
79 .putAllInt32ToInt32Field(source.getInt32ToInt32Field()) | 87 .putAllInt32ToInt32Field(source.getInt32ToInt32Field()) |
80 .putAllInt32ToStringField(source.getInt32ToStringField()) | 88 .putAllInt32ToStringField(source.getInt32ToStringField()) |
81 .putAllInt32ToBytesField(source.getInt32ToBytesField()) | 89 .putAllInt32ToBytesField(source.getInt32ToBytesField()) |
82 .putAllInt32ToEnumField(source.getInt32ToEnumField()) | 90 .putAllInt32ToEnumField(source.getInt32ToEnumField()) |
83 .putAllInt32ToMessageField(source.getInt32ToMessageField()) | 91 .putAllInt32ToMessageField(source.getInt32ToMessageField()) |
84 .putAllStringToInt32Field(source.getStringToInt32Field()); | 92 .putAllStringToInt32Field(source.getStringToInt32Field()); |
85 } | 93 } |
86 | 94 |
87 private void assertMapValuesSet(TestMap message) { | 95 private void assertMapValuesSet(TestMap message) { |
88 assertEquals(3, message.getInt32ToInt32Field().size()); | 96 assertEquals(3, message.getInt32ToInt32Field().size()); |
89 assertEquals(11, message.getInt32ToInt32Field().get(1).intValue()); | 97 assertEquals(11, message.getInt32ToInt32Field().get(1).intValue()); |
90 assertEquals(22, message.getInt32ToInt32Field().get(2).intValue()); | 98 assertEquals(22, message.getInt32ToInt32Field().get(2).intValue()); |
91 assertEquals(33, message.getInt32ToInt32Field().get(3).intValue()); | 99 assertEquals(33, message.getInt32ToInt32Field().get(3).intValue()); |
92 | 100 |
93 assertEquals(3, message.getInt32ToStringField().size()); | 101 assertEquals(3, message.getInt32ToStringField().size()); |
94 assertEquals("11", message.getInt32ToStringField().get(1)); | 102 assertEquals("11", message.getInt32ToStringField().get(1)); |
95 assertEquals("22", message.getInt32ToStringField().get(2)); | 103 assertEquals("22", message.getInt32ToStringField().get(2)); |
96 assertEquals("33", message.getInt32ToStringField().get(3)); | 104 assertEquals("33", message.getInt32ToStringField().get(3)); |
97 | 105 |
98 assertEquals(3, message.getInt32ToBytesField().size()); | 106 assertEquals(3, message.getInt32ToBytesField().size()); |
99 assertEquals(TestUtil.toBytes("11"), message.getInt32ToBytesField().get(1)); | 107 assertEquals(TestUtil.toBytes("11"), message.getInt32ToBytesField().get(1)); |
100 assertEquals(TestUtil.toBytes("22"), message.getInt32ToBytesField().get(2)); | 108 assertEquals(TestUtil.toBytes("22"), message.getInt32ToBytesField().get(2)); |
101 assertEquals(TestUtil.toBytes("33"), message.getInt32ToBytesField().get(3)); | 109 assertEquals(TestUtil.toBytes("33"), message.getInt32ToBytesField().get(3)); |
102 | 110 |
103 assertEquals(3, message.getInt32ToEnumField().size()); | 111 assertEquals(3, message.getInt32ToEnumField().size()); |
104 assertEquals(TestMap.EnumValue.FOO, message.getInt32ToEnumField().get(1)); | 112 assertEquals(TestMap.EnumValue.FOO, message.getInt32ToEnumField().get(1)); |
105 assertEquals(TestMap.EnumValue.BAR, message.getInt32ToEnumField().get(2)); | 113 assertEquals(TestMap.EnumValue.BAR, message.getInt32ToEnumField().get(2)); |
106 assertEquals(TestMap.EnumValue.BAZ, message.getInt32ToEnumField().get(3)); | 114 assertEquals(TestMap.EnumValue.BAZ, message.getInt32ToEnumField().get(3)); |
107 | 115 |
108 assertEquals(3, message.getInt32ToMessageField().size()); | 116 assertEquals(3, message.getInt32ToMessageField().size()); |
109 assertEquals(11, message.getInt32ToMessageField().get(1).getValue()); | 117 assertEquals(11, message.getInt32ToMessageField().get(1).getValue()); |
110 assertEquals(22, message.getInt32ToMessageField().get(2).getValue()); | 118 assertEquals(22, message.getInt32ToMessageField().get(2).getValue()); |
111 assertEquals(33, message.getInt32ToMessageField().get(3).getValue()); | 119 assertEquals(33, message.getInt32ToMessageField().get(3).getValue()); |
112 | 120 |
113 assertEquals(3, message.getStringToInt32Field().size()); | 121 assertEquals(3, message.getStringToInt32Field().size()); |
114 assertEquals(11, message.getStringToInt32Field().get("1").intValue()); | 122 assertEquals(11, message.getStringToInt32Field().get("1").intValue()); |
115 assertEquals(22, message.getStringToInt32Field().get("2").intValue()); | 123 assertEquals(22, message.getStringToInt32Field().get("2").intValue()); |
116 assertEquals(33, message.getStringToInt32Field().get("3").intValue()); | 124 assertEquals(33, message.getStringToInt32Field().get("3").intValue()); |
117 } | 125 } |
118 | 126 |
119 private void updateMapValues(TestMap.Builder builder) { | 127 private void updateMapValues(TestMap.Builder builder) { |
120 builder.getMutableInt32ToInt32Field().put(1, 111); | 128 builder |
121 builder.getMutableInt32ToInt32Field().remove(2); | 129 .putInt32ToInt32Field(1, 111) |
122 builder.getMutableInt32ToInt32Field().put(4, 44); | 130 .removeInt32ToInt32Field(2) |
| 131 .putInt32ToInt32Field(4, 44) |
123 | 132 |
124 builder.getMutableInt32ToStringField().put(1, "111"); | 133 .putInt32ToStringField(1, "111") |
125 builder.getMutableInt32ToStringField().remove(2); | 134 .removeInt32ToStringField(2) |
126 builder.getMutableInt32ToStringField().put(4, "44"); | 135 .putInt32ToStringField(4, "44") |
127 | 136 |
128 builder.getMutableInt32ToBytesField().put(1, TestUtil.toBytes("111")); | 137 .putInt32ToBytesField(1, TestUtil.toBytes("111")) |
129 builder.getMutableInt32ToBytesField().remove(2); | 138 .removeInt32ToBytesField(2) |
130 builder.getMutableInt32ToBytesField().put(4, TestUtil.toBytes("44")); | 139 .putInt32ToBytesField(4, TestUtil.toBytes("44")) |
131 | 140 |
132 builder.getMutableInt32ToEnumField().put(1, TestMap.EnumValue.BAR); | 141 .putInt32ToEnumField(1, TestMap.EnumValue.BAR) |
133 builder.getMutableInt32ToEnumField().remove(2); | 142 .removeInt32ToEnumField(2) |
134 builder.getMutableInt32ToEnumField().put(4, TestMap.EnumValue.QUX); | 143 .putInt32ToEnumField(4, TestMap.EnumValue.QUX) |
135 | 144 |
136 builder.getMutableInt32ToMessageField().put( | 145 .putInt32ToMessageField(1, MessageValue.newBuilder().setValue(111).build
()) |
137 1, MessageValue.newBuilder().setValue(111).build()); | 146 .removeInt32ToMessageField(2) |
138 builder.getMutableInt32ToMessageField().remove(2); | 147 .putInt32ToMessageField(4, MessageValue.newBuilder().setValue(44).build(
)) |
139 builder.getMutableInt32ToMessageField().put( | 148 |
140 4, MessageValue.newBuilder().setValue(44).build()); | 149 .putStringToInt32Field("1", 111) |
141 | 150 .removeStringToInt32Field("2") |
142 builder.getMutableStringToInt32Field().put("1", 111); | 151 .putStringToInt32Field("4", 44); |
143 builder.getMutableStringToInt32Field().remove("2"); | 152 } |
144 builder.getMutableStringToInt32Field().put("4", 44); | 153 |
| 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); |
145 } | 164 } |
146 | 165 |
147 private void assertMapValuesUpdated(TestMap message) { | 166 private void assertMapValuesUpdated(TestMap message) { |
148 assertEquals(3, message.getInt32ToInt32Field().size()); | 167 assertEquals(3, message.getInt32ToInt32Field().size()); |
149 assertEquals(111, message.getInt32ToInt32Field().get(1).intValue()); | 168 assertEquals(111, message.getInt32ToInt32Field().get(1).intValue()); |
150 assertEquals(33, message.getInt32ToInt32Field().get(3).intValue()); | 169 assertEquals(33, message.getInt32ToInt32Field().get(3).intValue()); |
151 assertEquals(44, message.getInt32ToInt32Field().get(4).intValue()); | 170 assertEquals(44, message.getInt32ToInt32Field().get(4).intValue()); |
152 | 171 |
153 assertEquals(3, message.getInt32ToStringField().size()); | 172 assertEquals(3, message.getInt32ToStringField().size()); |
154 assertEquals("111", message.getInt32ToStringField().get(1)); | 173 assertEquals("111", message.getInt32ToStringField().get(1)); |
155 assertEquals("33", message.getInt32ToStringField().get(3)); | 174 assertEquals("33", message.getInt32ToStringField().get(3)); |
156 assertEquals("44", message.getInt32ToStringField().get(4)); | 175 assertEquals("44", message.getInt32ToStringField().get(4)); |
157 | 176 |
158 assertEquals(3, message.getInt32ToBytesField().size()); | 177 assertEquals(3, message.getInt32ToBytesField().size()); |
159 assertEquals(TestUtil.toBytes("111"), message.getInt32ToBytesField().get(1))
; | 178 assertEquals(TestUtil.toBytes("111"), message.getInt32ToBytesField().get(1))
; |
160 assertEquals(TestUtil.toBytes("33"), message.getInt32ToBytesField().get(3)); | 179 assertEquals(TestUtil.toBytes("33"), message.getInt32ToBytesField().get(3)); |
161 assertEquals(TestUtil.toBytes("44"), message.getInt32ToBytesField().get(4)); | 180 assertEquals(TestUtil.toBytes("44"), message.getInt32ToBytesField().get(4)); |
162 | 181 |
163 assertEquals(3, message.getInt32ToEnumField().size()); | 182 assertEquals(3, message.getInt32ToEnumField().size()); |
164 assertEquals(TestMap.EnumValue.BAR, message.getInt32ToEnumField().get(1)); | 183 assertEquals(TestMap.EnumValue.BAR, message.getInt32ToEnumField().get(1)); |
165 assertEquals(TestMap.EnumValue.BAZ, message.getInt32ToEnumField().get(3)); | 184 assertEquals(TestMap.EnumValue.BAZ, message.getInt32ToEnumField().get(3)); |
166 assertEquals(TestMap.EnumValue.QUX, message.getInt32ToEnumField().get(4)); | 185 assertEquals(TestMap.EnumValue.QUX, message.getInt32ToEnumField().get(4)); |
167 | 186 |
168 assertEquals(3, message.getInt32ToMessageField().size()); | 187 assertEquals(3, message.getInt32ToMessageField().size()); |
169 assertEquals(111, message.getInt32ToMessageField().get(1).getValue()); | 188 assertEquals(111, message.getInt32ToMessageField().get(1).getValue()); |
170 assertEquals(33, message.getInt32ToMessageField().get(3).getValue()); | 189 assertEquals(33, message.getInt32ToMessageField().get(3).getValue()); |
171 assertEquals(44, message.getInt32ToMessageField().get(4).getValue()); | 190 assertEquals(44, message.getInt32ToMessageField().get(4).getValue()); |
172 | 191 |
173 assertEquals(3, message.getStringToInt32Field().size()); | 192 assertEquals(3, message.getStringToInt32Field().size()); |
174 assertEquals(111, message.getStringToInt32Field().get("1").intValue()); | 193 assertEquals(111, message.getStringToInt32Field().get("1").intValue()); |
175 assertEquals(33, message.getStringToInt32Field().get("3").intValue()); | 194 assertEquals(33, message.getStringToInt32Field().get("3").intValue()); |
176 assertEquals(44, message.getStringToInt32Field().get("4").intValue()); | 195 assertEquals(44, message.getStringToInt32Field().get("4").intValue()); |
177 } | 196 } |
178 | 197 |
179 private void assertMapValuesCleared(TestMap message) { | 198 private void assertMapValuesCleared(TestMapOrBuilder testMapOrBuilder) { |
180 assertEquals(0, message.getInt32ToInt32Field().size()); | 199 assertEquals(0, testMapOrBuilder.getInt32ToInt32Field().size()); |
181 assertEquals(0, message.getInt32ToStringField().size()); | 200 assertEquals(0, testMapOrBuilder.getInt32ToInt32FieldCount()); |
182 assertEquals(0, message.getInt32ToBytesField().size()); | 201 assertEquals(0, testMapOrBuilder.getInt32ToStringField().size()); |
183 assertEquals(0, message.getInt32ToEnumField().size()); | 202 assertEquals(0, testMapOrBuilder.getInt32ToStringFieldCount()); |
184 assertEquals(0, message.getInt32ToMessageField().size()); | 203 assertEquals(0, testMapOrBuilder.getInt32ToBytesField().size()); |
185 assertEquals(0, message.getStringToInt32Field().size()); | 204 assertEquals(0, testMapOrBuilder.getInt32ToBytesFieldCount()); |
| 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()); |
186 } | 211 } |
187 | 212 |
188 public void testSanityCopyOnWrite() throws InvalidProtocolBufferException { | 213 public void testSanityCopyOnWrite() throws InvalidProtocolBufferException { |
189 // Since builders are implemented as a thin wrapper around a message | 214 // Since builders are implemented as a thin wrapper around a message |
190 // instance, we attempt to verify that we can't cause the builder to modify | 215 // instance, we attempt to verify that we can't cause the builder to modify |
191 // a produced message. | 216 // a produced message. |
192 | 217 |
193 TestMap.Builder builder = TestMap.newBuilder(); | 218 TestMap.Builder builder = TestMap.newBuilder(); |
194 TestMap message = builder.build(); | 219 TestMap message = builder.build(); |
195 Map<Integer, Integer> intMap = builder.getMutableInt32ToInt32Field(); | 220 builder.putInt32ToInt32Field(1, 2); |
196 intMap.put(1, 2); | |
197 assertTrue(message.getInt32ToInt32Field().isEmpty()); | 221 assertTrue(message.getInt32ToInt32Field().isEmpty()); |
198 message = builder.build(); | 222 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) { |
199 try { | 251 try { |
200 intMap.put(2, 3); | 252 map.put(key, value); |
201 fail(); | 253 fail(); |
202 } catch (UnsupportedOperationException e) { | 254 } catch (UnsupportedOperationException e) { |
203 // expected | 255 // expected |
204 } | 256 } |
205 assertEquals(newMap(1, 2), message.getInt32ToInt32Field()); | 257 if (!map.isEmpty()) { |
| 258 try { |
| 259 map.entrySet().remove(map.entrySet().iterator().next()); |
| 260 fail(); |
| 261 } catch (UnsupportedOperationException e) { |
| 262 // expected |
| 263 } |
| 264 } |
| 265 } |
| 266 |
| 267 public void testMutableMapLifecycle() { |
| 268 TestMap.Builder builder = TestMap.newBuilder() |
| 269 .putInt32ToInt32Field(1, 2); |
| 270 assertEquals(newMap(1, 2), builder.build().getInt32ToInt32Field()); |
206 assertEquals(newMap(1, 2), builder.getInt32ToInt32Field()); | 271 assertEquals(newMap(1, 2), builder.getInt32ToInt32Field()); |
207 builder.getMutableInt32ToInt32Field().put(2, 3); | 272 builder.putInt32ToInt32Field(2, 3); |
208 assertEquals(newMap(1, 2), message.getInt32ToInt32Field()); | |
209 assertEquals(newMap(1, 2, 2, 3), builder.getInt32ToInt32Field()); | |
210 } | |
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 | |
222 } | |
223 assertEquals(newMap(1, 2), builder.getInt32ToInt32Field()); | |
224 builder.getMutableInt32ToInt32Field().put(2, 3); | |
225 assertEquals(newMap(1, 2, 2, 3), builder.getInt32ToInt32Field()); | 273 assertEquals(newMap(1, 2, 2, 3), builder.getInt32ToInt32Field()); |
226 | 274 |
227 Map<Integer, TestMap.EnumValue> enumMap = builder.getMutableInt32ToEnumField
(); | 275 builder.putInt32ToEnumField(1, TestMap.EnumValue.BAR); |
228 enumMap.put(1, TestMap.EnumValue.BAR); | |
229 assertEquals(newMap(1, TestMap.EnumValue.BAR), builder.build().getInt32ToEnu
mField()); | 276 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 } | |
236 assertEquals(newMap(1, TestMap.EnumValue.BAR), builder.getInt32ToEnumField()
); | 277 assertEquals(newMap(1, TestMap.EnumValue.BAR), builder.getInt32ToEnumField()
); |
237 builder.getMutableInt32ToEnumField().put(2, TestMap.EnumValue.FOO); | 278 builder.putInt32ToEnumField(2, TestMap.EnumValue.FOO); |
238 assertEquals( | 279 assertEquals( |
239 newMap(1, TestMap.EnumValue.BAR, 2, TestMap.EnumValue.FOO), | 280 newMap(1, TestMap.EnumValue.BAR, 2, TestMap.EnumValue.FOO), |
240 builder.getInt32ToEnumField()); | 281 builder.getInt32ToEnumField()); |
241 | 282 |
242 Map<Integer, String> stringMap = builder.getMutableInt32ToStringField(); | 283 builder.putInt32ToStringField(1, "1"); |
243 stringMap.put(1, "1"); | |
244 assertEquals(newMap(1, "1"), builder.build().getInt32ToStringField()); | 284 assertEquals(newMap(1, "1"), builder.build().getInt32ToStringField()); |
245 try { | |
246 stringMap.put(2, "2"); | |
247 fail(); | |
248 } catch (UnsupportedOperationException e) { | |
249 // expected | |
250 } | |
251 assertEquals(newMap(1, "1"), builder.getInt32ToStringField()); | 285 assertEquals(newMap(1, "1"), builder.getInt32ToStringField()); |
252 builder.getMutableInt32ToStringField().put(2, "2"); | 286 builder.putInt32ToStringField(2, "2"); |
253 assertEquals( | 287 assertEquals(newMap(1, "1", 2, "2"), builder.getInt32ToStringField()); |
254 newMap(1, "1", 2, "2"), | 288 |
255 builder.getInt32ToStringField()); | 289 builder.putInt32ToMessageField(1, TestMap.MessageValue.getDefaultInstance())
; |
256 | |
257 Map<Integer, TestMap.MessageValue> messageMap = builder.getMutableInt32ToMes
sageField(); | |
258 messageMap.put(1, TestMap.MessageValue.getDefaultInstance()); | |
259 assertEquals(newMap(1, TestMap.MessageValue.getDefaultInstance()), | 290 assertEquals(newMap(1, TestMap.MessageValue.getDefaultInstance()), |
260 builder.build().getInt32ToMessageField()); | 291 builder.build().getInt32ToMessageField()); |
261 try { | |
262 messageMap.put(2, TestMap.MessageValue.getDefaultInstance()); | |
263 fail(); | |
264 } catch (UnsupportedOperationException e) { | |
265 // expected | |
266 } | |
267 assertEquals(newMap(1, TestMap.MessageValue.getDefaultInstance()), | 292 assertEquals(newMap(1, TestMap.MessageValue.getDefaultInstance()), |
268 builder.getInt32ToMessageField()); | 293 builder.getInt32ToMessageField()); |
269 builder.getMutableInt32ToMessageField().put(2, TestMap.MessageValue.getDefau
ltInstance()); | 294 builder.putInt32ToMessageField(2, TestMap.MessageValue.getDefaultInstance())
; |
270 assertEquals( | 295 assertEquals( |
271 newMap(1, TestMap.MessageValue.getDefaultInstance(), | 296 newMap(1, TestMap.MessageValue.getDefaultInstance(), |
272 2, TestMap.MessageValue.getDefaultInstance()), | 297 2, TestMap.MessageValue.getDefaultInstance()), |
273 builder.getInt32ToMessageField()); | 298 builder.getInt32ToMessageField()); |
274 } | 299 } |
275 | 300 |
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 | |
322 public void testGettersAndSetters() throws Exception { | 301 public void testGettersAndSetters() throws Exception { |
323 TestMap.Builder builder = TestMap.newBuilder(); | 302 TestMap.Builder builder = TestMap.newBuilder(); |
324 TestMap message = builder.build(); | 303 TestMap message = builder.build(); |
325 assertMapValuesCleared(message); | 304 assertMapValuesCleared(message); |
326 | 305 |
327 builder = message.toBuilder(); | 306 builder = message.toBuilder(); |
328 setMapValues(builder); | 307 setMapValues(builder); |
329 message = builder.build(); | 308 message = builder.build(); |
330 assertMapValuesSet(message); | 309 assertMapValuesSet(message); |
331 | 310 |
332 builder = message.toBuilder(); | 311 builder = message.toBuilder(); |
333 updateMapValues(builder); | 312 updateMapValues(builder); |
334 message = builder.build(); | 313 message = builder.build(); |
335 assertMapValuesUpdated(message); | 314 assertMapValuesUpdated(message); |
336 | 315 |
337 builder = message.toBuilder(); | 316 builder = message.toBuilder(); |
338 builder.clear(); | 317 builder.clear(); |
| 318 assertMapValuesCleared(builder); |
339 message = builder.build(); | 319 message = builder.build(); |
340 assertMapValuesCleared(message); | 320 assertMapValuesCleared(message); |
341 } | 321 } |
342 | 322 |
343 public void testPutAll() throws Exception { | 323 public void testPutAll() throws Exception { |
344 TestMap.Builder sourceBuilder = TestMap.newBuilder(); | 324 TestMap.Builder sourceBuilder = TestMap.newBuilder(); |
345 setMapValues(sourceBuilder); | 325 setMapValues(sourceBuilder); |
346 TestMap source = sourceBuilder.build(); | 326 TestMap source = sourceBuilder.build(); |
| 327 assertMapValuesSet(source); |
347 | 328 |
348 TestMap.Builder destination = TestMap.newBuilder(); | 329 TestMap.Builder destination = TestMap.newBuilder(); |
349 copyMapValues(source, destination); | 330 copyMapValues(source, destination); |
350 assertMapValuesSet(destination.build()); | 331 assertMapValuesSet(destination.build()); |
351 } | 332 } |
352 | 333 |
| 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 |
353 public void testSerializeAndParse() throws Exception { | 373 public void testSerializeAndParse() throws Exception { |
354 TestMap.Builder builder = TestMap.newBuilder(); | 374 TestMap.Builder builder = TestMap.newBuilder(); |
355 setMapValues(builder); | 375 setMapValues(builder); |
356 TestMap message = builder.build(); | 376 TestMap message = builder.build(); |
357 assertEquals(message.getSerializedSize(), message.toByteString().size()); | 377 assertEquals(message.getSerializedSize(), message.toByteString().size()); |
358 message = TestMap.parser().parseFrom(message.toByteString()); | 378 message = TestMap.parser().parseFrom(message.toByteString()); |
359 assertMapValuesSet(message); | 379 assertMapValuesSet(message); |
360 | 380 |
361 builder = message.toBuilder(); | 381 builder = message.toBuilder(); |
362 updateMapValues(builder); | 382 updateMapValues(builder); |
363 message = builder.build(); | 383 message = builder.build(); |
364 assertEquals(message.getSerializedSize(), message.toByteString().size()); | 384 assertEquals(message.getSerializedSize(), message.toByteString().size()); |
365 message = TestMap.parser().parseFrom(message.toByteString()); | 385 message = TestMap.parser().parseFrom(message.toByteString()); |
366 assertMapValuesUpdated(message); | 386 assertMapValuesUpdated(message); |
367 | 387 |
368 builder = message.toBuilder(); | 388 builder = message.toBuilder(); |
369 builder.clear(); | 389 builder.clear(); |
370 message = builder.build(); | 390 message = builder.build(); |
371 assertEquals(message.getSerializedSize(), message.toByteString().size()); | 391 assertEquals(message.getSerializedSize(), message.toByteString().size()); |
372 message = TestMap.parser().parseFrom(message.toByteString()); | 392 message = TestMap.parser().parseFrom(message.toByteString()); |
373 assertMapValuesCleared(message); | 393 assertMapValuesCleared(message); |
374 } | 394 } |
375 | 395 |
| 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 |
376 public void testMergeFrom() throws Exception { | 445 public void testMergeFrom() throws Exception { |
377 TestMap.Builder builder = TestMap.newBuilder(); | 446 TestMap.Builder builder = TestMap.newBuilder(); |
378 setMapValues(builder); | 447 setMapValues(builder); |
379 TestMap message = builder.build(); | 448 TestMap message = builder.build(); |
380 | 449 |
381 TestMap.Builder other = TestMap.newBuilder(); | 450 TestMap.Builder other = TestMap.newBuilder(); |
382 other.mergeFrom(message); | 451 other.mergeFrom(message); |
383 assertMapValuesSet(other.build()); | 452 assertMapValuesSet(other.build()); |
384 } | 453 } |
385 | 454 |
386 public void testEqualsAndHashCode() throws Exception { | 455 public void testEqualsAndHashCode() throws Exception { |
387 // Test that generated equals() and hashCode() will disregard the order | 456 // Test that generated equals() and hashCode() will disregard the order |
388 // of map entries when comparing/hashing map fields. | 457 // of map entries when comparing/hashing map fields. |
389 | 458 |
390 // We can't control the order of elements in a HashMap. The best we can do | 459 // We can't control the order of elements in a HashMap. The best we can do |
391 // here is to add elements in different order. | 460 // here is to add elements in different order. |
392 TestMap.Builder b1 = TestMap.newBuilder(); | 461 TestMap.Builder b1 = TestMap.newBuilder() |
393 b1.getMutableInt32ToInt32Field().put(1, 2); | 462 .putInt32ToInt32Field(1, 2) |
394 b1.getMutableInt32ToInt32Field().put(3, 4); | 463 .putInt32ToInt32Field(3, 4) |
395 b1.getMutableInt32ToInt32Field().put(5, 6); | 464 .putInt32ToInt32Field(5, 6); |
396 TestMap m1 = b1.build(); | 465 TestMap m1 = b1.build(); |
397 | 466 |
398 TestMap.Builder b2 = TestMap.newBuilder(); | 467 TestMap.Builder b2 = TestMap.newBuilder() |
399 b2.getMutableInt32ToInt32Field().put(5, 6); | 468 .putInt32ToInt32Field(5, 6) |
400 b2.getMutableInt32ToInt32Field().put(1, 2); | 469 .putInt32ToInt32Field(1, 2) |
401 b2.getMutableInt32ToInt32Field().put(3, 4); | 470 .putInt32ToInt32Field(3, 4); |
402 TestMap m2 = b2.build(); | 471 TestMap m2 = b2.build(); |
403 | 472 |
404 assertEquals(m1, m2); | 473 assertEquals(m1, m2); |
405 assertEquals(m1.hashCode(), m2.hashCode()); | 474 assertEquals(m1.hashCode(), m2.hashCode()); |
406 | 475 |
407 // Make sure we did compare map fields. | 476 // Make sure we did compare map fields. |
408 b2.getMutableInt32ToInt32Field().put(1, 0); | 477 b2.putInt32ToInt32Field(1, 0); |
409 m2 = b2.build(); | 478 m2 = b2.build(); |
410 assertFalse(m1.equals(m2)); | 479 assertFalse(m1.equals(m2)); |
411 // Don't check m1.hashCode() != m2.hashCode() because it's not guaranteed | 480 // Don't check m1.hashCode() != m2.hashCode() because it's not guaranteed |
412 // to be different. | 481 // to be different. |
413 } | 482 } |
414 | 483 |
415 public void testUnknownEnumValues() throws Exception { | 484 public void testUnknownEnumValues() throws Exception { |
416 TestUnknownEnumValue.Builder builder = | 485 TestUnknownEnumValue.Builder builder = TestUnknownEnumValue.newBuilder() |
417 TestUnknownEnumValue.newBuilder(); | 486 .putInt32ToInt32Field(1, 1) |
418 builder.getMutableInt32ToInt32Field().put(1, 1); | 487 .putInt32ToInt32Field(2, 54321); |
419 builder.getMutableInt32ToInt32Field().put(2, 54321); | |
420 ByteString data = builder.build().toByteString(); | 488 ByteString data = builder.build().toByteString(); |
421 | 489 |
422 TestMap message = TestMap.parseFrom(data); | 490 TestMap message = TestMap.parseFrom(data); |
423 // Entries with unknown enum values will be stored into UnknownFieldSet so | 491 // Entries with unknown enum values will be stored into UnknownFieldSet so |
424 // there is only one entry in the map. | 492 // there is only one entry in the map. |
425 assertEquals(1, message.getInt32ToEnumField().size()); | 493 assertEquals(1, message.getInt32ToEnumField().size()); |
426 assertEquals(TestMap.EnumValue.BAR, message.getInt32ToEnumField().get(1)); | 494 assertEquals(TestMap.EnumValue.BAR, message.getInt32ToEnumField().get(1)); |
427 // Serializing and parsing should preserve the unknown entry. | 495 // Serializing and parsing should preserve the unknown entry. |
428 data = message.toByteString(); | 496 data = message.toByteString(); |
429 TestUnknownEnumValue messageWithUnknownEnums = | 497 TestUnknownEnumValue messageWithUnknownEnums = |
430 TestUnknownEnumValue.parseFrom(data); | 498 TestUnknownEnumValue.parseFrom(data); |
431 assertEquals(2, messageWithUnknownEnums.getInt32ToInt32Field().size()); | 499 assertEquals(2, messageWithUnknownEnums.getInt32ToInt32Field().size()); |
432 assertEquals(1, messageWithUnknownEnums.getInt32ToInt32Field().get(1).intVal
ue()); | 500 assertEquals(1, messageWithUnknownEnums.getInt32ToInt32Field().get(1).intVal
ue()); |
433 assertEquals(54321, messageWithUnknownEnums.getInt32ToInt32Field().get(2).in
tValue()); | 501 assertEquals(54321, messageWithUnknownEnums.getInt32ToInt32Field().get(2).in
tValue()); |
434 } | 502 } |
435 | 503 |
436 | |
437 public void testIterationOrder() throws Exception { | 504 public void testIterationOrder() throws Exception { |
438 TestMap.Builder builder = TestMap.newBuilder(); | 505 TestMap.Builder builder = TestMap.newBuilder(); |
439 setMapValues(builder); | 506 setMapValues(builder); |
440 TestMap message = builder.build(); | 507 TestMap message = builder.build(); |
441 | 508 |
442 assertEquals(Arrays.asList("1", "2", "3"), | 509 assertEquals(Arrays.asList("1", "2", "3"), |
443 new ArrayList<String>(message.getStringToInt32Field().keySet())); | 510 new ArrayList<String>(message.getStringToInt32Field().keySet())); |
444 } | 511 } |
445 | 512 |
446 private static <K, V> Map<K, V> newMap(K key1, V value1) { | 513 private static <K, V> Map<K, V> newMap(K key1, V value1) { |
447 Map<K, V> map = new HashMap<K, V>(); | 514 Map<K, V> map = new HashMap<K, V>(); |
448 map.put(key1, value1); | 515 map.put(key1, value1); |
449 return map; | 516 return map; |
450 } | 517 } |
451 | 518 |
452 private static <K, V> Map<K, V> newMap(K key1, V value1, K key2, V value2) { | 519 private static <K, V> Map<K, V> newMap(K key1, V value1, K key2, V value2) { |
453 Map<K, V> map = new HashMap<K, V>(); | 520 Map<K, V> map = new HashMap<K, V>(); |
454 map.put(key1, value1); | 521 map.put(key1, value1); |
455 map.put(key2, value2); | 522 map.put(key2, value2); |
456 return map; | 523 return map; |
457 } | 524 } |
| 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 } |
458 } | 796 } |
OLD | NEW |