DynamicMessageTest.cs 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. using Google.ProtocolBuffers.TestProtos;
  2. // Protocol Buffers - Google's data interchange format
  3. // Copyright 2008 Google Inc.
  4. // http://code.google.com/p/protobuf/
  5. //
  6. // Licensed under the Apache License, Version 2.0 (the "License");
  7. // you may not use this file except in compliance with the License.
  8. // You may obtain a copy of the License at
  9. //
  10. // http://www.apache.org/licenses/LICENSE-2.0
  11. //
  12. // Unless required by applicable law or agreed to in writing, software
  13. // distributed under the License is distributed on an "AS IS" BASIS,
  14. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15. // See the License for the specific language governing permissions and
  16. // limitations under the License.
  17. using NUnit.Framework;
  18. namespace Google.ProtocolBuffers {
  19. [TestFixture]
  20. public class DynamicMessageTest {
  21. private ReflectionTester reflectionTester;
  22. private ReflectionTester extensionsReflectionTester;
  23. [SetUp]
  24. public void SetUp() {
  25. reflectionTester = ReflectionTester.CreateTestAllTypesInstance();
  26. extensionsReflectionTester = ReflectionTester.CreateTestAllExtensionsInstance();
  27. }
  28. [Test]
  29. public void DynamicMessageAccessors() {
  30. IBuilder builder = DynamicMessage.CreateBuilder(TestAllTypes.Descriptor);
  31. reflectionTester.SetAllFieldsViaReflection(builder);
  32. IMessage message = builder.WeakBuild();
  33. reflectionTester.AssertAllFieldsSetViaReflection(message);
  34. }
  35. [Test]
  36. public void DynamicMessageExtensionAccessors() {
  37. // We don't need to extensively test DynamicMessage's handling of
  38. // extensions because, frankly, it doesn't do anything special with them.
  39. // It treats them just like any other fields.
  40. IBuilder builder = DynamicMessage.CreateBuilder(TestAllExtensions.Descriptor);
  41. extensionsReflectionTester.SetAllFieldsViaReflection(builder);
  42. IMessage message = builder.WeakBuild();
  43. extensionsReflectionTester.AssertAllFieldsSetViaReflection(message);
  44. }
  45. [Test]
  46. public void DynamicMessageRepeatedSetters() {
  47. IBuilder builder = DynamicMessage.CreateBuilder(TestAllTypes.Descriptor);
  48. reflectionTester.SetAllFieldsViaReflection(builder);
  49. reflectionTester.ModifyRepeatedFieldsViaReflection(builder);
  50. IMessage message = builder.WeakBuild();
  51. reflectionTester.AssertRepeatedFieldsModifiedViaReflection(message);
  52. }
  53. [Test]
  54. public void DynamicMessageDefaults() {
  55. reflectionTester.AssertClearViaReflection(DynamicMessage.GetDefaultInstance(TestAllTypes.Descriptor));
  56. reflectionTester.AssertClearViaReflection(DynamicMessage.CreateBuilder(TestAllTypes.Descriptor).Build());
  57. }
  58. [Test]
  59. public void DynamicMessageSerializedSize() {
  60. TestAllTypes message = TestUtil.GetAllSet();
  61. IBuilder dynamicBuilder = DynamicMessage.CreateBuilder(TestAllTypes.Descriptor);
  62. reflectionTester.SetAllFieldsViaReflection(dynamicBuilder);
  63. IMessage dynamicMessage = dynamicBuilder.WeakBuild();
  64. Assert.AreEqual(message.SerializedSize, dynamicMessage.SerializedSize);
  65. }
  66. [Test]
  67. public void DynamicMessageSerialization() {
  68. IBuilder builder = DynamicMessage.CreateBuilder(TestAllTypes.Descriptor);
  69. reflectionTester.SetAllFieldsViaReflection(builder);
  70. IMessage message = builder.WeakBuild();
  71. ByteString rawBytes = message.ToByteString();
  72. TestAllTypes message2 = TestAllTypes.ParseFrom(rawBytes);
  73. TestUtil.AssertAllFieldsSet(message2);
  74. // In fact, the serialized forms should be exactly the same, byte-for-byte.
  75. Assert.AreEqual(TestUtil.GetAllSet().ToByteString(), rawBytes);
  76. }
  77. [Test]
  78. public void DynamicMessageParsing() {
  79. TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();
  80. TestUtil.SetAllFields(builder);
  81. TestAllTypes message = builder.Build();
  82. ByteString rawBytes = message.ToByteString();
  83. IMessage message2 = DynamicMessage.ParseFrom(TestAllTypes.Descriptor, rawBytes);
  84. reflectionTester.AssertAllFieldsSetViaReflection(message2);
  85. }
  86. [Test]
  87. public void DynamicMessageCopy() {
  88. TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();
  89. TestUtil.SetAllFields(builder);
  90. TestAllTypes message = builder.Build();
  91. DynamicMessage copy = DynamicMessage.CreateBuilder(message).Build();
  92. reflectionTester.AssertAllFieldsSetViaReflection(copy);
  93. }
  94. }
  95. }