PageRenderTime 792ms CodeModel.GetById 11ms RepoModel.GetById 1ms app.codeStats 0ms

/src/protobuf/java/src/test/java/com/google/protobuf/DynamicMessageTest.java

https://gitlab.com/vectorci/rippled
Java | 264 lines | 174 code | 39 blank | 51 comment | 0 complexity | a645aa406dcbe2e633ebc50e0a4bb5cf MD5 | raw file
  1. // Protocol Buffers - Google's data interchange format
  2. // Copyright 2008 Google Inc. All rights reserved.
  3. // http://code.google.com/p/protobuf/
  4. //
  5. // Redistribution and use in source and binary forms, with or without
  6. // modification, are permitted provided that the following conditions are
  7. // met:
  8. //
  9. // * Redistributions of source code must retain the above copyright
  10. // notice, this list of conditions and the following disclaimer.
  11. // * Redistributions in binary form must reproduce the above
  12. // copyright notice, this list of conditions and the following disclaimer
  13. // in the documentation and/or other materials provided with the
  14. // distribution.
  15. // * Neither the name of Google Inc. nor the names of its
  16. // contributors may be used to endorse or promote products derived from
  17. // this software without specific prior written permission.
  18. //
  19. // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  20. // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  21. // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  22. // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  23. // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  24. // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  25. // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  26. // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  27. // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  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.
  30. package com.google.protobuf;
  31. import protobuf_unittest.UnittestProto.TestAllExtensions;
  32. import protobuf_unittest.UnittestProto.TestAllTypes;
  33. import protobuf_unittest.UnittestProto.TestEmptyMessage;
  34. import protobuf_unittest.UnittestProto.TestPackedTypes;
  35. import junit.framework.TestCase;
  36. import java.util.Arrays;
  37. /**
  38. * Unit test for {@link DynamicMessage}. See also {@link MessageTest}, which
  39. * tests some {@link DynamicMessage} functionality.
  40. *
  41. * @author kenton@google.com Kenton Varda
  42. */
  43. public class DynamicMessageTest extends TestCase {
  44. TestUtil.ReflectionTester reflectionTester =
  45. new TestUtil.ReflectionTester(TestAllTypes.getDescriptor(), null);
  46. TestUtil.ReflectionTester extensionsReflectionTester =
  47. new TestUtil.ReflectionTester(TestAllExtensions.getDescriptor(),
  48. TestUtil.getExtensionRegistry());
  49. TestUtil.ReflectionTester packedReflectionTester =
  50. new TestUtil.ReflectionTester(TestPackedTypes.getDescriptor(), null);
  51. public void testDynamicMessageAccessors() throws Exception {
  52. Message.Builder builder =
  53. DynamicMessage.newBuilder(TestAllTypes.getDescriptor());
  54. reflectionTester.setAllFieldsViaReflection(builder);
  55. Message message = builder.build();
  56. reflectionTester.assertAllFieldsSetViaReflection(message);
  57. }
  58. public void testSettersAfterBuild() throws Exception {
  59. Message.Builder builder =
  60. DynamicMessage.newBuilder(TestAllTypes.getDescriptor());
  61. Message firstMessage = builder.build();
  62. // double build()
  63. builder.build();
  64. // clear() after build()
  65. builder.clear();
  66. // setters after build()
  67. reflectionTester.setAllFieldsViaReflection(builder);
  68. Message message = builder.build();
  69. reflectionTester.assertAllFieldsSetViaReflection(message);
  70. // repeated setters after build()
  71. reflectionTester.modifyRepeatedFieldsViaReflection(builder);
  72. message = builder.build();
  73. reflectionTester.assertRepeatedFieldsModifiedViaReflection(message);
  74. // firstMessage shouldn't have been modified.
  75. reflectionTester.assertClearViaReflection(firstMessage);
  76. }
  77. public void testUnknownFields() throws Exception {
  78. Message.Builder builder =
  79. DynamicMessage.newBuilder(TestEmptyMessage.getDescriptor());
  80. builder.setUnknownFields(UnknownFieldSet.newBuilder()
  81. .addField(1, UnknownFieldSet.Field.newBuilder().addVarint(1).build())
  82. .addField(2, UnknownFieldSet.Field.newBuilder().addFixed32(1).build())
  83. .build());
  84. Message message = builder.build();
  85. assertEquals(2, message.getUnknownFields().asMap().size());
  86. // clone() with unknown fields
  87. Message.Builder newBuilder = builder.clone();
  88. assertEquals(2, newBuilder.getUnknownFields().asMap().size());
  89. // clear() with unknown fields
  90. newBuilder.clear();
  91. assertTrue(newBuilder.getUnknownFields().asMap().isEmpty());
  92. // serialize/parse with unknown fields
  93. newBuilder.mergeFrom(message.toByteString());
  94. assertEquals(2, newBuilder.getUnknownFields().asMap().size());
  95. }
  96. public void testDynamicMessageSettersRejectNull() throws Exception {
  97. Message.Builder builder =
  98. DynamicMessage.newBuilder(TestAllTypes.getDescriptor());
  99. reflectionTester.assertReflectionSettersRejectNull(builder);
  100. }
  101. public void testDynamicMessageExtensionAccessors() throws Exception {
  102. // We don't need to extensively test DynamicMessage's handling of
  103. // extensions because, frankly, it doesn't do anything special with them.
  104. // It treats them just like any other fields.
  105. Message.Builder builder =
  106. DynamicMessage.newBuilder(TestAllExtensions.getDescriptor());
  107. extensionsReflectionTester.setAllFieldsViaReflection(builder);
  108. Message message = builder.build();
  109. extensionsReflectionTester.assertAllFieldsSetViaReflection(message);
  110. }
  111. public void testDynamicMessageExtensionSettersRejectNull() throws Exception {
  112. Message.Builder builder =
  113. DynamicMessage.newBuilder(TestAllExtensions.getDescriptor());
  114. extensionsReflectionTester.assertReflectionSettersRejectNull(builder);
  115. }
  116. public void testDynamicMessageRepeatedSetters() throws Exception {
  117. Message.Builder builder =
  118. DynamicMessage.newBuilder(TestAllTypes.getDescriptor());
  119. reflectionTester.setAllFieldsViaReflection(builder);
  120. reflectionTester.modifyRepeatedFieldsViaReflection(builder);
  121. Message message = builder.build();
  122. reflectionTester.assertRepeatedFieldsModifiedViaReflection(message);
  123. }
  124. public void testDynamicMessageRepeatedSettersRejectNull() throws Exception {
  125. Message.Builder builder =
  126. DynamicMessage.newBuilder(TestAllTypes.getDescriptor());
  127. reflectionTester.assertReflectionRepeatedSettersRejectNull(builder);
  128. }
  129. public void testDynamicMessageDefaults() throws Exception {
  130. reflectionTester.assertClearViaReflection(
  131. DynamicMessage.getDefaultInstance(TestAllTypes.getDescriptor()));
  132. reflectionTester.assertClearViaReflection(
  133. DynamicMessage.newBuilder(TestAllTypes.getDescriptor()).build());
  134. }
  135. public void testDynamicMessageSerializedSize() throws Exception {
  136. TestAllTypes message = TestUtil.getAllSet();
  137. Message.Builder dynamicBuilder =
  138. DynamicMessage.newBuilder(TestAllTypes.getDescriptor());
  139. reflectionTester.setAllFieldsViaReflection(dynamicBuilder);
  140. Message dynamicMessage = dynamicBuilder.build();
  141. assertEquals(message.getSerializedSize(),
  142. dynamicMessage.getSerializedSize());
  143. }
  144. public void testDynamicMessageSerialization() throws Exception {
  145. Message.Builder builder =
  146. DynamicMessage.newBuilder(TestAllTypes.getDescriptor());
  147. reflectionTester.setAllFieldsViaReflection(builder);
  148. Message message = builder.build();
  149. ByteString rawBytes = message.toByteString();
  150. TestAllTypes message2 = TestAllTypes.parseFrom(rawBytes);
  151. TestUtil.assertAllFieldsSet(message2);
  152. // In fact, the serialized forms should be exactly the same, byte-for-byte.
  153. assertEquals(TestUtil.getAllSet().toByteString(), rawBytes);
  154. }
  155. public void testDynamicMessageParsing() throws Exception {
  156. TestAllTypes.Builder builder = TestAllTypes.newBuilder();
  157. TestUtil.setAllFields(builder);
  158. TestAllTypes message = builder.build();
  159. ByteString rawBytes = message.toByteString();
  160. Message message2 =
  161. DynamicMessage.parseFrom(TestAllTypes.getDescriptor(), rawBytes);
  162. reflectionTester.assertAllFieldsSetViaReflection(message2);
  163. // Test Parser interface.
  164. Message message3 = message2.getParserForType().parseFrom(rawBytes);
  165. reflectionTester.assertAllFieldsSetViaReflection(message3);
  166. }
  167. public void testDynamicMessageExtensionParsing() throws Exception {
  168. ByteString rawBytes = TestUtil.getAllExtensionsSet().toByteString();
  169. Message message = DynamicMessage.parseFrom(
  170. TestAllExtensions.getDescriptor(), rawBytes,
  171. TestUtil.getExtensionRegistry());
  172. extensionsReflectionTester.assertAllFieldsSetViaReflection(message);
  173. // Test Parser interface.
  174. Message message2 = message.getParserForType().parseFrom(
  175. rawBytes, TestUtil.getExtensionRegistry());
  176. extensionsReflectionTester.assertAllFieldsSetViaReflection(message2);
  177. }
  178. public void testDynamicMessagePackedSerialization() throws Exception {
  179. Message.Builder builder =
  180. DynamicMessage.newBuilder(TestPackedTypes.getDescriptor());
  181. packedReflectionTester.setPackedFieldsViaReflection(builder);
  182. Message message = builder.build();
  183. ByteString rawBytes = message.toByteString();
  184. TestPackedTypes message2 = TestPackedTypes.parseFrom(rawBytes);
  185. TestUtil.assertPackedFieldsSet(message2);
  186. // In fact, the serialized forms should be exactly the same, byte-for-byte.
  187. assertEquals(TestUtil.getPackedSet().toByteString(), rawBytes);
  188. }
  189. public void testDynamicMessagePackedParsing() throws Exception {
  190. TestPackedTypes.Builder builder = TestPackedTypes.newBuilder();
  191. TestUtil.setPackedFields(builder);
  192. TestPackedTypes message = builder.build();
  193. ByteString rawBytes = message.toByteString();
  194. Message message2 =
  195. DynamicMessage.parseFrom(TestPackedTypes.getDescriptor(), rawBytes);
  196. packedReflectionTester.assertPackedFieldsSetViaReflection(message2);
  197. // Test Parser interface.
  198. Message message3 = message2.getParserForType().parseFrom(rawBytes);
  199. packedReflectionTester.assertPackedFieldsSetViaReflection(message3);
  200. }
  201. public void testDynamicMessageCopy() throws Exception {
  202. TestAllTypes.Builder builder = TestAllTypes.newBuilder();
  203. TestUtil.setAllFields(builder);
  204. TestAllTypes message = builder.build();
  205. DynamicMessage copy = DynamicMessage.newBuilder(message).build();
  206. reflectionTester.assertAllFieldsSetViaReflection(copy);
  207. }
  208. public void testToBuilder() throws Exception {
  209. DynamicMessage.Builder builder =
  210. DynamicMessage.newBuilder(TestAllTypes.getDescriptor());
  211. reflectionTester.setAllFieldsViaReflection(builder);
  212. int unknownFieldNum = 9;
  213. long unknownFieldVal = 90;
  214. builder.setUnknownFields(UnknownFieldSet.newBuilder()
  215. .addField(unknownFieldNum,
  216. UnknownFieldSet.Field.newBuilder()
  217. .addVarint(unknownFieldVal).build())
  218. .build());
  219. DynamicMessage message = builder.build();
  220. DynamicMessage derived = message.toBuilder().build();
  221. reflectionTester.assertAllFieldsSetViaReflection(derived);
  222. assertEquals(Arrays.asList(unknownFieldVal),
  223. derived.getUnknownFields().getField(unknownFieldNum).getVarintList());
  224. }
  225. }