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 17 matching lines...) Expand all Loading... |
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 static java.util.Collections.emptyList; | 33 import static java.util.Collections.emptyList; |
34 import static java.util.Collections.singletonList; | 34 import static java.util.Collections.singletonList; |
35 | 35 |
36 import com.google.protobuf.UnittestImportLite.ImportEnumLite; | 36 import com.google.protobuf.UnittestImportLite.ImportEnumLite; |
37 import com.google.protobuf.UnittestImportPublicLite.PublicImportMessageLite; | 37 import com.google.protobuf.UnittestImportPublicLite.PublicImportMessageLite; |
| 38 import com.google.protobuf.UnittestLite; |
38 import com.google.protobuf.UnittestLite.ForeignEnumLite; | 39 import com.google.protobuf.UnittestLite.ForeignEnumLite; |
39 import com.google.protobuf.UnittestLite.ForeignMessageLite; | 40 import com.google.protobuf.UnittestLite.ForeignMessageLite; |
40 import com.google.protobuf.UnittestLite.TestAllExtensionsLite; | 41 import com.google.protobuf.UnittestLite.TestAllExtensionsLite; |
41 import com.google.protobuf.UnittestLite.TestAllTypesLite; | 42 import com.google.protobuf.UnittestLite.TestAllTypesLite; |
42 import com.google.protobuf.UnittestLite.TestAllTypesLite.NestedEnum; | 43 import com.google.protobuf.UnittestLite.TestAllTypesLite.NestedEnum; |
43 import com.google.protobuf.UnittestLite.TestAllTypesLite.NestedMessage; | 44 import com.google.protobuf.UnittestLite.TestAllTypesLite.NestedMessage; |
44 import com.google.protobuf.UnittestLite.TestAllTypesLite.OneofFieldCase; | 45 import com.google.protobuf.UnittestLite.TestAllTypesLite.OneofFieldCase; |
45 import com.google.protobuf.UnittestLite.TestAllTypesLite.OptionalGroup; | 46 import com.google.protobuf.UnittestLite.TestAllTypesLite.OptionalGroup; |
46 import com.google.protobuf.UnittestLite.TestAllTypesLite.RepeatedGroup; | 47 import com.google.protobuf.UnittestLite.TestAllTypesLite.RepeatedGroup; |
47 import com.google.protobuf.UnittestLite.TestAllTypesLiteOrBuilder; | 48 import com.google.protobuf.UnittestLite.TestAllTypesLiteOrBuilder; |
48 import com.google.protobuf.UnittestLite.TestHugeFieldNumbersLite; | |
49 import com.google.protobuf.UnittestLite.TestNestedExtensionLite; | 49 import com.google.protobuf.UnittestLite.TestNestedExtensionLite; |
50 import protobuf_unittest.lite_equals_and_hash.LiteEqualsAndHash.Bar; | 50 import protobuf_unittest.lite_equals_and_hash.LiteEqualsAndHash.Bar; |
51 import protobuf_unittest.lite_equals_and_hash.LiteEqualsAndHash.BarPrime; | 51 import protobuf_unittest.lite_equals_and_hash.LiteEqualsAndHash.BarPrime; |
52 import protobuf_unittest.lite_equals_and_hash.LiteEqualsAndHash.Foo; | 52 import protobuf_unittest.lite_equals_and_hash.LiteEqualsAndHash.Foo; |
53 import protobuf_unittest.lite_equals_and_hash.LiteEqualsAndHash.TestOneofEquals; | 53 import protobuf_unittest.lite_equals_and_hash.LiteEqualsAndHash.TestOneofEquals; |
54 import protobuf_unittest.lite_equals_and_hash.LiteEqualsAndHash.TestRecursiveOne
of; | 54 import protobuf_unittest.lite_equals_and_hash.LiteEqualsAndHash.TestRecursiveOne
of; |
| 55 |
55 import junit.framework.TestCase; | 56 import junit.framework.TestCase; |
56 | 57 |
| 58 import java.io.ByteArrayInputStream; |
| 59 import java.io.ByteArrayOutputStream; |
| 60 import java.io.NotSerializableException; |
| 61 import java.io.ObjectInputStream; |
| 62 import java.io.ObjectOutputStream; |
| 63 |
57 /** | 64 /** |
58 * Test lite runtime. | 65 * Test lite runtime. |
59 * | 66 * |
60 * @author kenton@google.com Kenton Varda | 67 * @author kenton@google.com Kenton Varda |
61 */ | 68 */ |
62 public class LiteTest extends TestCase { | 69 public class LiteTest extends TestCase { |
63 @Override | 70 @Override |
64 public void setUp() throws Exception { | 71 public void setUp() throws Exception { |
65 // Test that nested extensions are initialized correctly even if the outer | 72 // Test that nested extensions are initialized correctly even if the outer |
66 // class has not been accessed directly. This was once a bug with lite | 73 // class has not been accessed directly. This was once a bug with lite |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
125 assertEquals(1, message2.getExtension( | 132 assertEquals(1, message2.getExtension( |
126 UnittestLite.repeatedStringExtensionLite).size()); | 133 UnittestLite.repeatedStringExtensionLite).size()); |
127 assertEquals("hello", message2.getExtension( | 134 assertEquals("hello", message2.getExtension( |
128 UnittestLite.repeatedStringExtensionLite, 0)); | 135 UnittestLite.repeatedStringExtensionLite, 0)); |
129 assertEquals(TestAllTypesLite.NestedEnum.BAZ, message2.getExtension( | 136 assertEquals(TestAllTypesLite.NestedEnum.BAZ, message2.getExtension( |
130 UnittestLite.optionalNestedEnumExtensionLite)); | 137 UnittestLite.optionalNestedEnumExtensionLite)); |
131 assertEquals(7, message2.getExtension( | 138 assertEquals(7, message2.getExtension( |
132 UnittestLite.optionalNestedMessageExtensionLite).getBb()); | 139 UnittestLite.optionalNestedMessageExtensionLite).getBb()); |
133 } | 140 } |
134 | 141 |
| 142 |
135 public void testClone() { | 143 public void testClone() { |
136 TestAllTypesLite.Builder expected = TestAllTypesLite.newBuilder() | 144 TestAllTypesLite.Builder expected = TestAllTypesLite.newBuilder() |
137 .setOptionalInt32(123); | 145 .setOptionalInt32(123); |
138 assertEquals( | 146 assertEquals( |
139 expected.getOptionalInt32(), expected.clone().getOptionalInt32()); | 147 expected.getOptionalInt32(), expected.clone().getOptionalInt32()); |
140 | 148 |
141 TestAllExtensionsLite.Builder expected2 = TestAllExtensionsLite.newBuilder() | 149 TestAllExtensionsLite.Builder expected2 = TestAllExtensionsLite.newBuilder() |
142 .setExtension(UnittestLite.optionalInt32ExtensionLite, 123); | 150 .setExtension(UnittestLite.optionalInt32ExtensionLite, 123); |
143 assertEquals( | 151 assertEquals( |
144 expected2.getExtension(UnittestLite.optionalInt32ExtensionLite), | 152 expected2.getExtension(UnittestLite.optionalInt32ExtensionLite), |
(...skipping 1273 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1418 UnittestLite.optionalInt32ExtensionLite)); | 1426 UnittestLite.optionalInt32ExtensionLite)); |
1419 assertEquals( | 1427 assertEquals( |
1420 11, (int) extendableMessage.getExtension( | 1428 11, (int) extendableMessage.getExtension( |
1421 UnittestLite.optionalFixed32ExtensionLite)); | 1429 UnittestLite.optionalFixed32ExtensionLite)); |
1422 } | 1430 } |
1423 | 1431 |
1424 public void testToStringDefaultInstance() throws Exception { | 1432 public void testToStringDefaultInstance() throws Exception { |
1425 assertToStringEquals("", TestAllTypesLite.getDefaultInstance()); | 1433 assertToStringEquals("", TestAllTypesLite.getDefaultInstance()); |
1426 } | 1434 } |
1427 | 1435 |
1428 public void testToStringScalarFieldsSuffixedWithList() throws Exception { | |
1429 assertToStringEquals("deceptively_named_list: 7", TestAllTypesLite.newBuilde
r() | |
1430 .setDeceptivelyNamedList(7) | |
1431 .build()); | |
1432 } | |
1433 | |
1434 public void testToStringPrimitives() throws Exception { | 1436 public void testToStringPrimitives() throws Exception { |
1435 TestAllTypesLite proto = TestAllTypesLite.newBuilder() | 1437 TestAllTypesLite proto = TestAllTypesLite.newBuilder() |
1436 .setOptionalInt32(1) | 1438 .setOptionalInt32(1) |
1437 .setOptionalInt64(9223372036854775807L) | 1439 .setOptionalInt64(9223372036854775807L) |
1438 .build(); | 1440 .build(); |
1439 assertToStringEquals("optional_int32: 1\noptional_int64: 9223372036854775807
", proto); | 1441 assertToStringEquals("optional_int32: 1\noptional_int64: 9223372036854775807
", proto); |
1440 | 1442 |
1441 proto = TestAllTypesLite.newBuilder() | 1443 proto = TestAllTypesLite.newBuilder() |
1442 .setOptionalBool(true) | 1444 .setOptionalBool(true) |
1443 .setOptionalNestedEnum(TestAllTypesLite.NestedEnum.BAZ) | 1445 .setOptionalNestedEnum(TestAllTypesLite.NestedEnum.BAZ) |
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1621 } | 1623 } |
1622 | 1624 |
1623 public void testMergeFromStream_invalidBytes() throws Exception { | 1625 public void testMergeFromStream_invalidBytes() throws Exception { |
1624 TestAllTypesLite.Builder builder = TestAllTypesLite.newBuilder() | 1626 TestAllTypesLite.Builder builder = TestAllTypesLite.newBuilder() |
1625 .setDefaultBool(true); | 1627 .setDefaultBool(true); |
1626 try { | 1628 try { |
1627 builder.mergeFrom(CodedInputStream.newInstance("Invalid bytes".getBytes(In
ternal.UTF_8))); | 1629 builder.mergeFrom(CodedInputStream.newInstance("Invalid bytes".getBytes(In
ternal.UTF_8))); |
1628 fail(); | 1630 fail(); |
1629 } catch (InvalidProtocolBufferException expected) {} | 1631 } catch (InvalidProtocolBufferException expected) {} |
1630 } | 1632 } |
1631 | 1633 |
1632 public void testMergeFrom_sanity() throws Exception { | 1634 public void testMergeFrom_sanity() throws Exception { |
1633 TestAllTypesLite one = TestUtilLite.getAllLiteSetBuilder().build(); | 1635 TestAllTypesLite one = TestUtilLite.getAllLiteSetBuilder().build(); |
1634 byte[] bytes = one.toByteArray(); | 1636 byte[] bytes = one.toByteArray(); |
1635 TestAllTypesLite two = TestAllTypesLite.parseFrom(bytes); | 1637 TestAllTypesLite two = TestAllTypesLite.parseFrom(bytes); |
1636 | 1638 |
1637 one = one.toBuilder().mergeFrom(one).build(); | 1639 one = one.toBuilder().mergeFrom(one).build(); |
1638 two = two.toBuilder().mergeFrom(bytes).build(); | 1640 two = two.toBuilder().mergeFrom(bytes).build(); |
1639 assertEquals(one, two); | 1641 assertEquals(one, two); |
1640 assertEquals(two, one); | 1642 assertEquals(two, one); |
1641 assertEquals(one.hashCode(), two.hashCode()); | 1643 assertEquals(one.hashCode(), two.hashCode()); |
1642 } | 1644 } |
1643 | 1645 |
1644 public void testMergeFromNoLazyFieldSharing() throws Exception { | |
1645 TestAllTypesLite.Builder sourceBuilder = TestAllTypesLite.newBuilder().setOp
tionalLazyMessage( | |
1646 TestAllTypesLite.NestedMessage.newBuilder().setBb(1)); | |
1647 TestAllTypesLite.Builder targetBuilder = | |
1648 TestAllTypesLite.newBuilder().mergeFrom(sourceBuilder.build()); | |
1649 assertEquals(1, sourceBuilder.getOptionalLazyMessage().getBb()); | |
1650 // now change the sourceBuilder, and target value shouldn't be affected. | |
1651 sourceBuilder.setOptionalLazyMessage( | |
1652 TestAllTypesLite.NestedMessage.newBuilder().setBb(2)); | |
1653 assertEquals(1, targetBuilder.getOptionalLazyMessage().getBb()); | |
1654 } | |
1655 | |
1656 public void testEquals_notEqual() throws Exception { | 1646 public void testEquals_notEqual() throws Exception { |
1657 TestAllTypesLite one = TestUtilLite.getAllLiteSetBuilder().build(); | 1647 TestAllTypesLite one = TestUtilLite.getAllLiteSetBuilder().build(); |
1658 byte[] bytes = one.toByteArray(); | 1648 byte[] bytes = one.toByteArray(); |
1659 TestAllTypesLite two = one.toBuilder().mergeFrom(one).mergeFrom(bytes).build
(); | 1649 TestAllTypesLite two = one.toBuilder().mergeFrom(one).mergeFrom(bytes).build
(); |
1660 | 1650 |
1661 assertFalse(one.equals(two)); | 1651 assertFalse(one.equals(two)); |
1662 assertFalse(two.equals(one)); | 1652 assertFalse(two.equals(one)); |
1663 | 1653 |
1664 assertFalse(one.equals(TestAllTypesLite.getDefaultInstance())); | 1654 assertFalse(one.equals(TestAllTypesLite.getDefaultInstance())); |
1665 assertFalse(TestAllTypesLite.getDefaultInstance().equals(one)); | 1655 assertFalse(TestAllTypesLite.getDefaultInstance().equals(one)); |
(...skipping 539 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2205 .setExtension(Bar.fooExt, Bar.newBuilder() | 2195 .setExtension(Bar.fooExt, Bar.newBuilder() |
2206 .setName("name") | 2196 .setName("name") |
2207 .build()) | 2197 .build()) |
2208 .build(); | 2198 .build(); |
2209 | 2199 |
2210 Foo fooWithValueAndUnknownFields = Foo.parseFrom(fooWithValueAndExtension.to
ByteArray()); | 2200 Foo fooWithValueAndUnknownFields = Foo.parseFrom(fooWithValueAndExtension.to
ByteArray()); |
2211 | 2201 |
2212 assertEqualsAndHashCodeAreFalse(fooWithOnlyValue, fooWithValueAndUnknownFiel
ds); | 2202 assertEqualsAndHashCodeAreFalse(fooWithOnlyValue, fooWithValueAndUnknownFiel
ds); |
2213 assertEqualsAndHashCodeAreFalse(fooWithValueAndExtension, fooWithValueAndUnk
nownFields); | 2203 assertEqualsAndHashCodeAreFalse(fooWithValueAndExtension, fooWithValueAndUnk
nownFields); |
2214 } | 2204 } |
2215 | |
2216 public void testEqualsAndHashCodeWithExtensions() throws InvalidProtocolBuffer
Exception { | |
2217 Foo fooWithOnlyValue = Foo.newBuilder() | |
2218 .setValue(1) | |
2219 .build(); | |
2220 | |
2221 Foo fooWithValueAndExtension = fooWithOnlyValue.toBuilder() | |
2222 .setValue(1) | |
2223 .setExtension(Bar.fooExt, Bar.newBuilder() | |
2224 .setName("name") | |
2225 .build()) | |
2226 .build(); | |
2227 | |
2228 assertEqualsAndHashCodeAreFalse(fooWithOnlyValue, fooWithValueAndExtension); | |
2229 } | |
2230 | 2205 |
2231 // Test to ensure we avoid a class cast exception with oneofs. | 2206 // Test to ensure we avoid a class cast exception with oneofs. |
2232 public void testEquals_oneOfMessages() { | 2207 public void testEquals_oneOfMessages() { |
2233 TestAllTypesLite mine = TestAllTypesLite.newBuilder() | 2208 TestAllTypesLite mine = TestAllTypesLite.newBuilder() |
2234 .setOneofString("Hello") | 2209 .setOneofString("Hello") |
2235 .build(); | 2210 .build(); |
2236 | 2211 |
2237 TestAllTypesLite other = TestAllTypesLite.newBuilder() | 2212 TestAllTypesLite other = TestAllTypesLite.newBuilder() |
2238 .setOneofNestedMessage(NestedMessage.getDefaultInstance()) | 2213 .setOneofNestedMessage(NestedMessage.getDefaultInstance()) |
2239 .build(); | 2214 .build(); |
2240 | 2215 |
2241 assertFalse(mine.equals(other)); | 2216 assertFalse(mine.equals(other)); |
2242 assertFalse(other.equals(mine)); | 2217 assertFalse(other.equals(mine)); |
2243 } | 2218 } |
2244 | 2219 |
2245 public void testHugeFieldNumbers() throws InvalidProtocolBufferException { | |
2246 TestHugeFieldNumbersLite message = | |
2247 TestHugeFieldNumbersLite.newBuilder() | |
2248 .setOptionalInt32(1) | |
2249 .addRepeatedInt32(2) | |
2250 .setOptionalEnum(ForeignEnumLite.FOREIGN_LITE_FOO) | |
2251 .setOptionalString("xyz") | |
2252 .setOptionalMessage(ForeignMessageLite.newBuilder().setC(3).build()) | |
2253 .build(); | |
2254 | |
2255 TestHugeFieldNumbersLite parsedMessage = | |
2256 TestHugeFieldNumbersLite.parseFrom(message.toByteArray()); | |
2257 assertEquals(1, parsedMessage.getOptionalInt32()); | |
2258 assertEquals(2, parsedMessage.getRepeatedInt32(0)); | |
2259 assertEquals(ForeignEnumLite.FOREIGN_LITE_FOO, parsedMessage.getOptionalEnum
()); | |
2260 assertEquals("xyz", parsedMessage.getOptionalString()); | |
2261 assertEquals(3, parsedMessage.getOptionalMessage().getC()); | |
2262 } | |
2263 | |
2264 private void assertEqualsAndHashCodeAreFalse(Object o1, Object o2) { | 2220 private void assertEqualsAndHashCodeAreFalse(Object o1, Object o2) { |
2265 assertFalse(o1.equals(o2)); | 2221 assertFalse(o1.equals(o2)); |
2266 assertFalse(o1.hashCode() == o2.hashCode()); | 2222 assertFalse(o1.hashCode() == o2.hashCode()); |
2267 } | 2223 } |
2268 | 2224 |
2269 public void testRecursiveHashcode() { | 2225 public void testRecursiveHashcode() { |
2270 // This tests that we don't infinite loop. | 2226 // This tests that we don't infinite loop. |
2271 TestRecursiveOneof.getDefaultInstance().hashCode(); | 2227 TestRecursiveOneof.getDefaultInstance().hashCode(); |
2272 } | 2228 } |
2273 } | 2229 } |
OLD | NEW |