|
@@ -3361,6 +3361,7 @@ public class NanoTest extends TestCase {
|
|
|
TestAllTypesNano.BAR,
|
|
|
TestAllTypesNano.BAZ
|
|
|
};
|
|
|
+ message.setOneofUint32(3);
|
|
|
return message;
|
|
|
}
|
|
|
|
|
@@ -3559,6 +3560,85 @@ public class NanoTest extends TestCase {
|
|
|
new NanoReferenceTypes.TestAllTypesNano(), MessageNano.toByteArray(m7))));
|
|
|
}
|
|
|
|
|
|
+ private static TestAllTypesNano generateMessageForOneof(int caseNumber) {
|
|
|
+ TestAllTypesNano result = new TestAllTypesNano();
|
|
|
+ TestAllTypesNano.NestedMessage nested =
|
|
|
+ new TestAllTypesNano.NestedMessage();
|
|
|
+ nested.bb = 2;
|
|
|
+ switch (caseNumber) {
|
|
|
+ case TestAllTypesNano.ONEOF_UINT32_FIELD_NUMBER:
|
|
|
+ result.setOneofUint32(1);
|
|
|
+ break;
|
|
|
+ case TestAllTypesNano.ONEOF_ENUM_FIELD_NUMBER:
|
|
|
+ result.setOneofEnum(TestAllTypesNano.BAR);
|
|
|
+ break;
|
|
|
+ case TestAllTypesNano.ONEOF_NESTED_MESSAGE_FIELD_NUMBER:
|
|
|
+ result.setOneofNestedMessage(nested);
|
|
|
+ break;
|
|
|
+ case TestAllTypesNano.ONEOF_BYTES_FIELD_NUMBER:
|
|
|
+ result.setOneofBytes(new byte[] {1, 2});
|
|
|
+ break;
|
|
|
+ case TestAllTypesNano.ONEOF_STRING_FIELD_NUMBER:
|
|
|
+ result.setOneofString("hello");
|
|
|
+ break;
|
|
|
+ case TestAllTypesNano.ONEOF_FIXED64_FIELD_NUMBER:
|
|
|
+ result.setOneofFixed64(-1L);
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ throw new RuntimeException("unexpected case number: " + caseNumber);
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ public void testOneofHashCodeEquals() throws Exception {
|
|
|
+ TestAllTypesNano m1 = generateMessageForOneof(
|
|
|
+ TestAllTypesNano.ONEOF_UINT32_FIELD_NUMBER);
|
|
|
+ assertEquals(m1, generateMessageForOneof(
|
|
|
+ TestAllTypesNano.ONEOF_UINT32_FIELD_NUMBER));
|
|
|
+ assertFalse(m1.equals(new TestAllTypesNano()));
|
|
|
+
|
|
|
+ TestAllTypesNano m2 = generateMessageForOneof(
|
|
|
+ TestAllTypesNano.ONEOF_ENUM_FIELD_NUMBER);
|
|
|
+ assertEquals(m2, generateMessageForOneof(
|
|
|
+ TestAllTypesNano.ONEOF_ENUM_FIELD_NUMBER));
|
|
|
+ assertFalse(m2.equals(new TestAllTypesNano()));
|
|
|
+
|
|
|
+ TestAllTypesNano m3 = generateMessageForOneof(
|
|
|
+ TestAllTypesNano.ONEOF_NESTED_MESSAGE_FIELD_NUMBER);
|
|
|
+ assertEquals(m3, generateMessageForOneof(
|
|
|
+ TestAllTypesNano.ONEOF_NESTED_MESSAGE_FIELD_NUMBER));
|
|
|
+ assertFalse(m3.equals(new TestAllTypesNano()));
|
|
|
+
|
|
|
+ TestAllTypesNano m4 = generateMessageForOneof(
|
|
|
+ TestAllTypesNano.ONEOF_BYTES_FIELD_NUMBER);
|
|
|
+ assertEquals(m4, generateMessageForOneof(
|
|
|
+ TestAllTypesNano.ONEOF_BYTES_FIELD_NUMBER));
|
|
|
+ assertFalse(m4.equals(new TestAllTypesNano()));
|
|
|
+
|
|
|
+ TestAllTypesNano m5 = generateMessageForOneof(
|
|
|
+ TestAllTypesNano.ONEOF_STRING_FIELD_NUMBER);
|
|
|
+ assertEquals(m5, generateMessageForOneof(
|
|
|
+ TestAllTypesNano.ONEOF_STRING_FIELD_NUMBER));
|
|
|
+ assertFalse(m5.equals(new TestAllTypesNano()));
|
|
|
+
|
|
|
+ TestAllTypesNano m6 = generateMessageForOneof(
|
|
|
+ TestAllTypesNano.ONEOF_FIXED64_FIELD_NUMBER);
|
|
|
+ assertEquals(m6, generateMessageForOneof(
|
|
|
+ TestAllTypesNano.ONEOF_FIXED64_FIELD_NUMBER));
|
|
|
+ assertFalse(m6.equals(new TestAllTypesNano()));
|
|
|
+
|
|
|
+ Map<TestAllTypesNano, Integer> map =
|
|
|
+ new HashMap<TestAllTypesNano, Integer>();
|
|
|
+ map.put(m1, 1);
|
|
|
+ map.put(m2, 2);
|
|
|
+ map.put(m3, 3);
|
|
|
+ map.put(m4, 4);
|
|
|
+ map.put(m5, 5);
|
|
|
+ map.put(m6, 6);
|
|
|
+
|
|
|
+ assertEquals(6, map.size());
|
|
|
+ }
|
|
|
+
|
|
|
public void testNullRepeatedFields() throws Exception {
|
|
|
// Check that serialization after explicitly setting a repeated field
|
|
|
// to null doesn't NPE.
|