Index: third_party/protobuf/java/src/test/java/com/google/protobuf/DynamicMessageTest.java |
=================================================================== |
--- third_party/protobuf/java/src/test/java/com/google/protobuf/DynamicMessageTest.java (revision 216642) |
+++ third_party/protobuf/java/src/test/java/com/google/protobuf/DynamicMessageTest.java (working copy) |
@@ -30,8 +30,9 @@ |
package com.google.protobuf; |
+import protobuf_unittest.UnittestProto.TestAllExtensions; |
import protobuf_unittest.UnittestProto.TestAllTypes; |
-import protobuf_unittest.UnittestProto.TestAllExtensions; |
+import protobuf_unittest.UnittestProto.TestEmptyMessage; |
import protobuf_unittest.UnittestProto.TestPackedTypes; |
import junit.framework.TestCase; |
@@ -61,28 +62,44 @@ |
reflectionTester.assertAllFieldsSetViaReflection(message); |
} |
- public void testDoubleBuildError() throws Exception { |
+ public void testSettersAfterBuild() throws Exception { |
Message.Builder builder = |
DynamicMessage.newBuilder(TestAllTypes.getDescriptor()); |
+ Message firstMessage = builder.build(); |
+ // double build() |
builder.build(); |
- try { |
- builder.build(); |
- fail("Should have thrown exception."); |
- } catch (IllegalStateException e) { |
- // Success. |
- } |
+ // clear() after build() |
+ builder.clear(); |
+ // setters after build() |
+ reflectionTester.setAllFieldsViaReflection(builder); |
+ Message message = builder.build(); |
+ reflectionTester.assertAllFieldsSetViaReflection(message); |
+ // repeated setters after build() |
+ reflectionTester.modifyRepeatedFieldsViaReflection(builder); |
+ message = builder.build(); |
+ reflectionTester.assertRepeatedFieldsModifiedViaReflection(message); |
+ // firstMessage shouldn't have been modified. |
+ reflectionTester.assertClearViaReflection(firstMessage); |
} |
- public void testClearAfterBuildError() throws Exception { |
+ public void testUnknownFields() throws Exception { |
Message.Builder builder = |
- DynamicMessage.newBuilder(TestAllTypes.getDescriptor()); |
- builder.build(); |
- try { |
- builder.clear(); |
- fail("Should have thrown exception."); |
- } catch (IllegalStateException e) { |
- // Success. |
- } |
+ DynamicMessage.newBuilder(TestEmptyMessage.getDescriptor()); |
+ builder.setUnknownFields(UnknownFieldSet.newBuilder() |
+ .addField(1, UnknownFieldSet.Field.newBuilder().addVarint(1).build()) |
+ .addField(2, UnknownFieldSet.Field.newBuilder().addFixed32(1).build()) |
+ .build()); |
+ Message message = builder.build(); |
+ assertEquals(2, message.getUnknownFields().asMap().size()); |
+ // clone() with unknown fields |
+ Message.Builder newBuilder = builder.clone(); |
+ assertEquals(2, newBuilder.getUnknownFields().asMap().size()); |
+ // clear() with unknown fields |
+ newBuilder.clear(); |
+ assertTrue(newBuilder.getUnknownFields().asMap().isEmpty()); |
+ // serialize/parse with unknown fields |
+ newBuilder.mergeFrom(message.toByteString()); |
+ assertEquals(2, newBuilder.getUnknownFields().asMap().size()); |
} |
public void testDynamicMessageSettersRejectNull() throws Exception { |
@@ -167,8 +184,25 @@ |
Message message2 = |
DynamicMessage.parseFrom(TestAllTypes.getDescriptor(), rawBytes); |
reflectionTester.assertAllFieldsSetViaReflection(message2); |
+ |
+ // Test Parser interface. |
+ Message message3 = message2.getParserForType().parseFrom(rawBytes); |
+ reflectionTester.assertAllFieldsSetViaReflection(message3); |
} |
+ public void testDynamicMessageExtensionParsing() throws Exception { |
+ ByteString rawBytes = TestUtil.getAllExtensionsSet().toByteString(); |
+ Message message = DynamicMessage.parseFrom( |
+ TestAllExtensions.getDescriptor(), rawBytes, |
+ TestUtil.getExtensionRegistry()); |
+ extensionsReflectionTester.assertAllFieldsSetViaReflection(message); |
+ |
+ // Test Parser interface. |
+ Message message2 = message.getParserForType().parseFrom( |
+ rawBytes, TestUtil.getExtensionRegistry()); |
+ extensionsReflectionTester.assertAllFieldsSetViaReflection(message2); |
+ } |
+ |
public void testDynamicMessagePackedSerialization() throws Exception { |
Message.Builder builder = |
DynamicMessage.newBuilder(TestPackedTypes.getDescriptor()); |
@@ -194,6 +228,10 @@ |
Message message2 = |
DynamicMessage.parseFrom(TestPackedTypes.getDescriptor(), rawBytes); |
packedReflectionTester.assertPackedFieldsSetViaReflection(message2); |
+ |
+ // Test Parser interface. |
+ Message message3 = message2.getParserForType().parseFrom(rawBytes); |
+ packedReflectionTester.assertPackedFieldsSetViaReflection(message3); |
} |
public void testDynamicMessageCopy() throws Exception { |