| 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 |