DynamicMessageTest.cs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using NUnit.Framework;
  5. using Google.ProtocolBuffers.TestProtos;
  6. namespace Google.ProtocolBuffers {
  7. [TestFixture]
  8. public class DynamicMessageTest {
  9. private ReflectionTester reflectionTester;
  10. private ReflectionTester extensionsReflectionTester;
  11. [SetUp]
  12. public void SetUp() {
  13. reflectionTester = new ReflectionTester(TestAllTypes.Descriptor, null);
  14. extensionsReflectionTester = new ReflectionTester(TestAllExtensions.Descriptor, TestUtil.CreateExtensionRegistry());
  15. }
  16. [Test]
  17. public void DynamicMessageAccessors() {
  18. IBuilder builder = DynamicMessage.CreateBuilder(TestAllTypes.Descriptor);
  19. reflectionTester.SetAllFieldsViaReflection(builder);
  20. IMessage message = builder.Build();
  21. reflectionTester.AssertAllFieldsSetViaReflection(message);
  22. }
  23. [Test]
  24. public void DynamicMessageExtensionAccessors() {
  25. // We don't need to extensively test DynamicMessage's handling of
  26. // extensions because, frankly, it doesn't do anything special with them.
  27. // It treats them just like any other fields.
  28. IBuilder builder = DynamicMessage.CreateBuilder(TestAllExtensions.Descriptor);
  29. extensionsReflectionTester.SetAllFieldsViaReflection(builder);
  30. IMessage message = builder.Build();
  31. extensionsReflectionTester.AssertAllFieldsSetViaReflection(message);
  32. }
  33. [Test]
  34. public void DynamicMessageRepeatedSetters() {
  35. IBuilder builder = DynamicMessage.CreateBuilder(TestAllTypes.Descriptor);
  36. reflectionTester.SetAllFieldsViaReflection(builder);
  37. reflectionTester.ModifyRepeatedFieldsViaReflection(builder);
  38. IMessage message = builder.Build();
  39. reflectionTester.AssertRepeatedFieldsModifiedViaReflection(message);
  40. }
  41. [Test]
  42. public void DynamicMessageDefaults() {
  43. reflectionTester.AssertClearViaReflection(DynamicMessage.GetDefaultInstance(TestAllTypes.Descriptor));
  44. reflectionTester.AssertClearViaReflection(DynamicMessage.CreateBuilder(TestAllTypes.Descriptor).Build());
  45. }
  46. [Test]
  47. public void DynamicMessageSerializedSize() {
  48. TestAllTypes message = TestUtil.GetAllSet();
  49. IBuilder dynamicBuilder = DynamicMessage.CreateBuilder(TestAllTypes.Descriptor);
  50. reflectionTester.SetAllFieldsViaReflection(dynamicBuilder);
  51. IMessage dynamicMessage = dynamicBuilder.Build();
  52. Assert.AreEqual(message.SerializedSize, dynamicMessage.SerializedSize);
  53. }
  54. [Test]
  55. public void DynamicMessageSerialization() {
  56. IBuilder builder = DynamicMessage.CreateBuilder(TestAllTypes.Descriptor);
  57. reflectionTester.SetAllFieldsViaReflection(builder);
  58. IMessage message = builder.Build();
  59. ByteString rawBytes = message.ToByteString();
  60. TestAllTypes message2 = TestAllTypes.ParseFrom(rawBytes);
  61. TestUtil.AssertAllFieldsSet(message2);
  62. // In fact, the serialized forms should be exactly the same, byte-for-byte.
  63. Assert.AreEqual(TestUtil.GetAllSet().ToByteString(), rawBytes);
  64. }
  65. [Test]
  66. public void DynamicMessageParsing() {
  67. TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();
  68. TestUtil.SetAllFields(builder);
  69. TestAllTypes message = builder.Build();
  70. ByteString rawBytes = message.ToByteString();
  71. IMessage message2 = DynamicMessage.ParseFrom(TestAllTypes.Descriptor, rawBytes);
  72. reflectionTester.AssertAllFieldsSetViaReflection(message2);
  73. }
  74. [Test]
  75. public void DynamicMessageCopy() {
  76. TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();
  77. TestUtil.SetAllFields(builder);
  78. TestAllTypes message = builder.Build();
  79. DynamicMessage copy = DynamicMessage.CreateBuilder(message).Build();
  80. reflectionTester.AssertAllFieldsSetViaReflection(copy);
  81. }
  82. }
  83. }