Index: third_party/protobuf/java/src/test/java/com/google/protobuf/AbstractMessageTest.java |
=================================================================== |
--- third_party/protobuf/java/src/test/java/com/google/protobuf/AbstractMessageTest.java (revision 214611) |
+++ third_party/protobuf/java/src/test/java/com/google/protobuf/AbstractMessageTest.java (working copy) |
@@ -30,6 +30,7 @@ |
package com.google.protobuf; |
+import com.google.protobuf.Descriptors.FieldDescriptor; |
import protobuf_unittest.UnittestOptimizeFor.TestOptimizedForSize; |
import protobuf_unittest.UnittestProto; |
import protobuf_unittest.UnittestProto.ForeignMessage; |
@@ -167,7 +168,14 @@ |
wrappedBuilder.setUnknownFields(unknownFields); |
return this; |
} |
+ @Override |
+ public Message.Builder getFieldBuilder(FieldDescriptor field) { |
+ return wrappedBuilder.getFieldBuilder(field); |
+ } |
} |
+ public Parser<? extends Message> getParserForType() { |
+ return wrappedMessage.getParserForType(); |
+ } |
} |
// ================================================================= |
@@ -220,6 +228,34 @@ |
TestUtil.assertAllFieldsSet((TestAllTypes) message.wrappedMessage); |
} |
+ public void testParsingUninitialized() throws Exception { |
+ TestRequiredForeign.Builder builder = TestRequiredForeign.newBuilder(); |
+ builder.getOptionalMessageBuilder().setDummy2(10); |
+ ByteString bytes = builder.buildPartial().toByteString(); |
+ Message.Builder abstractMessageBuilder = |
+ new AbstractMessageWrapper.Builder(TestRequiredForeign.newBuilder()); |
+ // mergeFrom() should not throw initialization error. |
+ abstractMessageBuilder.mergeFrom(bytes).buildPartial(); |
+ try { |
+ abstractMessageBuilder.mergeFrom(bytes).build(); |
+ fail(); |
+ } catch (UninitializedMessageException ex) { |
+ // pass |
+ } |
+ |
+ // test DynamicMessage directly. |
+ Message.Builder dynamicMessageBuilder = DynamicMessage.newBuilder( |
+ TestRequiredForeign.getDescriptor()); |
+ // mergeFrom() should not throw initialization error. |
+ dynamicMessageBuilder.mergeFrom(bytes).buildPartial(); |
+ try { |
+ dynamicMessageBuilder.mergeFrom(bytes).build(); |
+ fail(); |
+ } catch (UninitializedMessageException ex) { |
+ // pass |
+ } |
+ } |
+ |
public void testPackedSerialization() throws Exception { |
Message abstractMessage = |
new AbstractMessageWrapper(TestUtil.getPackedSet()); |
@@ -298,12 +334,16 @@ |
new AbstractMessageWrapper.Builder(builder); |
assertFalse(abstractBuilder.isInitialized()); |
+ assertEquals("a, b, c", abstractBuilder.getInitializationErrorString()); |
builder.setA(1); |
assertFalse(abstractBuilder.isInitialized()); |
+ assertEquals("b, c", abstractBuilder.getInitializationErrorString()); |
builder.setB(1); |
assertFalse(abstractBuilder.isInitialized()); |
+ assertEquals("c", abstractBuilder.getInitializationErrorString()); |
builder.setC(1); |
assertTrue(abstractBuilder.isInitialized()); |
+ assertEquals("", abstractBuilder.getInitializationErrorString()); |
} |
public void testForeignIsInitialized() throws Exception { |
@@ -312,18 +352,27 @@ |
new AbstractMessageWrapper.Builder(builder); |
assertTrue(abstractBuilder.isInitialized()); |
+ assertEquals("", abstractBuilder.getInitializationErrorString()); |
builder.setOptionalMessage(TEST_REQUIRED_UNINITIALIZED); |
assertFalse(abstractBuilder.isInitialized()); |
+ assertEquals( |
+ "optional_message.a, optional_message.b, optional_message.c", |
+ abstractBuilder.getInitializationErrorString()); |
builder.setOptionalMessage(TEST_REQUIRED_INITIALIZED); |
assertTrue(abstractBuilder.isInitialized()); |
+ assertEquals("", abstractBuilder.getInitializationErrorString()); |
builder.addRepeatedMessage(TEST_REQUIRED_UNINITIALIZED); |
assertFalse(abstractBuilder.isInitialized()); |
+ assertEquals( |
+ "repeated_message[0].a, repeated_message[0].b, repeated_message[0].c", |
+ abstractBuilder.getInitializationErrorString()); |
builder.setRepeatedMessage(0, TEST_REQUIRED_INITIALIZED); |
assertTrue(abstractBuilder.isInitialized()); |
+ assertEquals("", abstractBuilder.getInitializationErrorString()); |
} |
// ----------------------------------------------------------------- |
@@ -421,7 +470,7 @@ |
/** |
- * Asserts that the given proto has symetric equals and hashCode methods. |
+ * Asserts that the given proto has symmetric equals and hashCode methods. |
*/ |
private void checkEqualsIsConsistent(Message message) { |
// Object should be equal to itself. |