|
|
|
@ -3663,18 +3663,154 @@ public class NanoTest extends TestCase { |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public void testOneofBasic() throws Exception { |
|
|
|
|
public void testOneofDefault() throws Exception { |
|
|
|
|
TestAllTypesNano m1 = new TestAllTypesNano(); |
|
|
|
|
checkOneofCase(m1, 0); |
|
|
|
|
assertEquals(WireFormatNano.EMPTY_BYTES, m1.getOneofBytes()); |
|
|
|
|
assertEquals(TestAllTypesNano.FOO, m1.getOneofEnum()); |
|
|
|
|
assertEquals(0L, m1.getOneofFixed64()); |
|
|
|
|
assertEquals(null, m1.getOneofNestedMessage()); |
|
|
|
|
assertEquals("", m1.getOneofString()); |
|
|
|
|
assertEquals(0, m1.getOneofUint32()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public void testOneofExclusiveness() throws Exception { |
|
|
|
|
TestAllTypesNano m = new TestAllTypesNano(); |
|
|
|
|
checkOneofCase(m, 0); |
|
|
|
|
|
|
|
|
|
m.setOneofBytes(new byte[]{0, 1}); |
|
|
|
|
checkOneofCase(m, TestAllTypesNano.ONEOF_BYTES_FIELD_NUMBER); |
|
|
|
|
assertTrue(Arrays.equals(new byte[]{0, 1}, m.getOneofBytes())); |
|
|
|
|
|
|
|
|
|
m.setOneofEnum(TestAllTypesNano.BAZ); |
|
|
|
|
checkOneofCase(m, TestAllTypesNano.ONEOF_ENUM_FIELD_NUMBER); |
|
|
|
|
assertEquals(TestAllTypesNano.BAZ, m.getOneofEnum()); |
|
|
|
|
assertEquals(WireFormatNano.EMPTY_BYTES, m.getOneofBytes()); |
|
|
|
|
|
|
|
|
|
m1.setOneofString("hello"); |
|
|
|
|
checkOneofCase(m1, TestAllTypesNano.ONEOF_STRING_FIELD_NUMBER); |
|
|
|
|
m.setOneofFixed64(-1L); |
|
|
|
|
checkOneofCase(m, TestAllTypesNano.ONEOF_FIXED64_FIELD_NUMBER); |
|
|
|
|
assertEquals(-1L, m.getOneofFixed64()); |
|
|
|
|
assertEquals(TestAllTypesNano.FOO, m.getOneofEnum()); |
|
|
|
|
|
|
|
|
|
m.setOneofNestedMessage(new TestAllTypesNano.NestedMessage()); |
|
|
|
|
checkOneofCase(m, TestAllTypesNano.ONEOF_NESTED_MESSAGE_FIELD_NUMBER); |
|
|
|
|
assertEquals( |
|
|
|
|
new TestAllTypesNano.NestedMessage(), m.getOneofNestedMessage()); |
|
|
|
|
assertEquals(0L, m.getOneofFixed64()); |
|
|
|
|
|
|
|
|
|
m.setOneofString("hello"); |
|
|
|
|
checkOneofCase(m, TestAllTypesNano.ONEOF_STRING_FIELD_NUMBER); |
|
|
|
|
assertEquals("hello", m.getOneofString()); |
|
|
|
|
assertNull(m.getOneofNestedMessage()); |
|
|
|
|
|
|
|
|
|
m.setOneofUint32(10); |
|
|
|
|
checkOneofCase(m, TestAllTypesNano.ONEOF_UINT32_FIELD_NUMBER); |
|
|
|
|
assertEquals(10, m.getOneofUint32()); |
|
|
|
|
assertEquals("", m.getOneofString()); |
|
|
|
|
|
|
|
|
|
m.setOneofBytes(new byte[]{0, 1}); |
|
|
|
|
checkOneofCase(m, TestAllTypesNano.ONEOF_BYTES_FIELD_NUMBER); |
|
|
|
|
assertTrue(Arrays.equals(new byte[]{0, 1}, m.getOneofBytes())); |
|
|
|
|
assertEquals(0, m.getOneofUint32()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public void testOneofClear() throws Exception { |
|
|
|
|
TestAllTypesNano m = new TestAllTypesNano(); |
|
|
|
|
m.setOneofBytes(new byte[]{0, 1}); |
|
|
|
|
m.clearOneofField(); |
|
|
|
|
checkOneofCase(m, 0); |
|
|
|
|
|
|
|
|
|
m.setOneofEnum(TestAllTypesNano.BAZ); |
|
|
|
|
m.clearOneofField(); |
|
|
|
|
checkOneofCase(m, 0); |
|
|
|
|
|
|
|
|
|
m.setOneofFixed64(-1L); |
|
|
|
|
m.clearOneofField(); |
|
|
|
|
checkOneofCase(m, 0); |
|
|
|
|
|
|
|
|
|
m.setOneofNestedMessage(new TestAllTypesNano.NestedMessage()); |
|
|
|
|
m.clearOneofField(); |
|
|
|
|
checkOneofCase(m, 0); |
|
|
|
|
|
|
|
|
|
m.setOneofString("hello"); |
|
|
|
|
m.clearOneofField(); |
|
|
|
|
checkOneofCase(m, 0); |
|
|
|
|
|
|
|
|
|
m.setOneofUint32(10); |
|
|
|
|
m.clearOneofField(); |
|
|
|
|
checkOneofCase(m, 0); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public void testOneofMarshling() throws Exception { |
|
|
|
|
TestAllTypesNano m = new TestAllTypesNano(); |
|
|
|
|
TestAllTypesNano parsed = new TestAllTypesNano(); |
|
|
|
|
{ |
|
|
|
|
m.setOneofBytes(new byte[]{0, 1}); |
|
|
|
|
byte[] serialized = MessageNano.toByteArray(m); |
|
|
|
|
MessageNano.mergeFrom(parsed, serialized); |
|
|
|
|
checkOneofCase(parsed, TestAllTypesNano.ONEOF_BYTES_FIELD_NUMBER); |
|
|
|
|
assertTrue(Arrays.equals(new byte[]{0, 1}, parsed.getOneofBytes())); |
|
|
|
|
} |
|
|
|
|
{ |
|
|
|
|
m.setOneofEnum(TestAllTypesNano.BAZ); |
|
|
|
|
byte[] serialized = MessageNano.toByteArray(m); |
|
|
|
|
MessageNano.mergeFrom(parsed, serialized); |
|
|
|
|
checkOneofCase(m, TestAllTypesNano.ONEOF_ENUM_FIELD_NUMBER); |
|
|
|
|
assertEquals(TestAllTypesNano.BAZ, m.getOneofEnum()); |
|
|
|
|
} |
|
|
|
|
{ |
|
|
|
|
m.setOneofEnum(TestAllTypesNano.BAZ); |
|
|
|
|
byte[] serialized = MessageNano.toByteArray(m); |
|
|
|
|
MessageNano.mergeFrom(parsed, serialized); |
|
|
|
|
checkOneofCase(m, TestAllTypesNano.ONEOF_ENUM_FIELD_NUMBER); |
|
|
|
|
assertEquals(TestAllTypesNano.BAZ, m.getOneofEnum()); |
|
|
|
|
} |
|
|
|
|
{ |
|
|
|
|
m.setOneofFixed64(-1L); |
|
|
|
|
byte[] serialized = MessageNano.toByteArray(m); |
|
|
|
|
MessageNano.mergeFrom(parsed, serialized); |
|
|
|
|
checkOneofCase(m, TestAllTypesNano.ONEOF_FIXED64_FIELD_NUMBER); |
|
|
|
|
assertEquals(-1L, m.getOneofFixed64()); |
|
|
|
|
} |
|
|
|
|
{ |
|
|
|
|
m.setOneofNestedMessage(new TestAllTypesNano.NestedMessage()); |
|
|
|
|
byte[] serialized = MessageNano.toByteArray(m); |
|
|
|
|
MessageNano.mergeFrom(parsed, serialized); |
|
|
|
|
checkOneofCase(m, TestAllTypesNano.ONEOF_NESTED_MESSAGE_FIELD_NUMBER); |
|
|
|
|
assertEquals( |
|
|
|
|
new TestAllTypesNano.NestedMessage(), m.getOneofNestedMessage()); |
|
|
|
|
} |
|
|
|
|
{ |
|
|
|
|
m.setOneofString("hello"); |
|
|
|
|
byte[] serialized = MessageNano.toByteArray(m); |
|
|
|
|
MessageNano.mergeFrom(parsed, serialized); |
|
|
|
|
assertEquals("hello", m.getOneofString()); |
|
|
|
|
assertNull(m.getOneofNestedMessage()); |
|
|
|
|
} |
|
|
|
|
{ |
|
|
|
|
m.setOneofUint32(10); |
|
|
|
|
byte[] serialized = MessageNano.toByteArray(m); |
|
|
|
|
MessageNano.mergeFrom(parsed, serialized); |
|
|
|
|
checkOneofCase(m, TestAllTypesNano.ONEOF_UINT32_FIELD_NUMBER); |
|
|
|
|
assertEquals(10, m.getOneofUint32()); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public void testOneofSerializedConcat() throws Exception { |
|
|
|
|
TestAllTypesNano m1 = new TestAllTypesNano(); |
|
|
|
|
m1.setOneofBytes(new byte[] {0, 1}); |
|
|
|
|
byte[] b1 = MessageNano.toByteArray(m1); |
|
|
|
|
TestAllTypesNano m2 = new TestAllTypesNano(); |
|
|
|
|
m2.setOneofEnum(TestAllTypesNano.BAZ); |
|
|
|
|
assertTrue(m2.hasOneofEnum()); |
|
|
|
|
assertEquals( |
|
|
|
|
TestAllTypesNano.ONEOF_ENUM_FIELD_NUMBER, m2.getOneofFieldCase()); |
|
|
|
|
byte[] b2 = MessageNano.toByteArray(m2); |
|
|
|
|
byte[] b3 = new byte[b1.length + b2.length]; |
|
|
|
|
System.arraycopy(b1, 0, b3, 0, b1.length); |
|
|
|
|
System.arraycopy(b2, 0, b3, b1.length, b2.length); |
|
|
|
|
TestAllTypesNano parsed = new TestAllTypesNano(); |
|
|
|
|
MessageNano.mergeFrom(parsed, b3); |
|
|
|
|
// the last on the wire wins.
|
|
|
|
|
checkOneofCase(parsed, TestAllTypesNano.ONEOF_ENUM_FIELD_NUMBER); |
|
|
|
|
assertEquals(TestAllTypesNano.BAZ, parsed.getOneofEnum()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public void testNullRepeatedFields() throws Exception { |
|
|
|
|