GeneratedMessageTest.cs 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using Google.ProtocolBuffers.Descriptors;
  5. using NUnit.Framework;
  6. using Google.ProtocolBuffers.TestProtos;
  7. namespace Google.ProtocolBuffers {
  8. [TestFixture]
  9. public class GeneratedMessageTest {
  10. ReflectionTester reflectionTester;
  11. ReflectionTester extensionsReflectionTester;
  12. [SetUp]
  13. public void SetUp() {
  14. reflectionTester = ReflectionTester.CreateTestAllTypesInstance();
  15. extensionsReflectionTester = ReflectionTester.CreateTestAllExtensionsInstance();
  16. }
  17. [Test]
  18. public void DefaultInstance() {
  19. Assert.AreSame(TestAllTypes.DefaultInstance, TestAllTypes.DefaultInstance.DefaultInstanceForType);
  20. Assert.AreSame(TestAllTypes.DefaultInstance, TestAllTypes.CreateBuilder().DefaultInstanceForType);
  21. }
  22. [Test]
  23. public void Accessors() {
  24. TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();
  25. TestUtil.SetAllFields(builder);
  26. TestAllTypes message = builder.Build();
  27. TestUtil.AssertAllFieldsSet(message);
  28. }
  29. [Test]
  30. public void RepeatedSetters() {
  31. TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();
  32. TestUtil.SetAllFields(builder);
  33. TestUtil.ModifyRepeatedFields(builder);
  34. TestAllTypes message = builder.Build();
  35. TestUtil.AssertRepeatedFieldsModified(message);
  36. }
  37. [Test]
  38. public void RepeatedAppend() {
  39. TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();
  40. builder.AddRangeRepeatedInt32(new int[]{1, 2, 3, 4});
  41. builder.AddRangeRepeatedForeignEnum((new ForeignEnum[] { ForeignEnum.FOREIGN_BAZ }));
  42. ForeignMessage foreignMessage = ForeignMessage.CreateBuilder().SetC(12).Build();
  43. builder.AddRangeRepeatedForeignMessage(new ForeignMessage[] {foreignMessage});
  44. TestAllTypes message = builder.Build();
  45. TestUtil.AssertEqual(message.RepeatedInt32List, new int[]{1, 2, 3, 4});
  46. TestUtil.AssertEqual(message.RepeatedForeignEnumList, new ForeignEnum[] {ForeignEnum.FOREIGN_BAZ});
  47. Assert.AreEqual(1, message.RepeatedForeignMessageCount);
  48. Assert.AreEqual(12, message.GetRepeatedForeignMessage(0).C);
  49. }
  50. [Test]
  51. public void SettingForeignMessageUsingBuilder() {
  52. TestAllTypes message = TestAllTypes.CreateBuilder()
  53. // Pass builder for foreign message instance.
  54. .SetOptionalForeignMessage(ForeignMessage.CreateBuilder().SetC(123))
  55. .Build();
  56. TestAllTypes expectedMessage = TestAllTypes.CreateBuilder()
  57. // Create expected version passing foreign message instance explicitly.
  58. .SetOptionalForeignMessage(ForeignMessage.CreateBuilder().SetC(123).Build())
  59. .Build();
  60. Assert.AreEqual(expectedMessage, message);
  61. }
  62. [Test]
  63. public void SettingRepeatedForeignMessageUsingBuilder() {
  64. TestAllTypes message = TestAllTypes.CreateBuilder()
  65. // Pass builder for foreign message instance.
  66. .AddRepeatedForeignMessage(ForeignMessage.CreateBuilder().SetC(456))
  67. .Build();
  68. TestAllTypes expectedMessage = TestAllTypes.CreateBuilder()
  69. // Create expected version passing foreign message instance explicitly.
  70. .AddRepeatedForeignMessage(ForeignMessage.CreateBuilder().SetC(456).Build())
  71. .Build();
  72. Assert.AreEqual(expectedMessage, message);
  73. }
  74. [Test]
  75. public void Defaults() {
  76. TestUtil.AssertClear(TestAllTypes.DefaultInstance);
  77. TestUtil.AssertClear(TestAllTypes.CreateBuilder().Build());
  78. Assert.AreEqual("\u1234", TestExtremeDefaultValues.DefaultInstance.Utf8String);
  79. }
  80. [Test]
  81. public void ReflectionGetters() {
  82. TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();
  83. TestUtil.SetAllFields(builder);
  84. TestAllTypes message = builder.Build();
  85. reflectionTester.AssertAllFieldsSetViaReflection(message);
  86. }
  87. [Test]
  88. public void ReflectionSetters() {
  89. TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();
  90. reflectionTester.SetAllFieldsViaReflection(builder);
  91. TestAllTypes message = builder.Build();
  92. TestUtil.AssertAllFieldsSet(message);
  93. }
  94. [Test]
  95. public void ReflectionRepeatedSetters() {
  96. TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();
  97. reflectionTester.SetAllFieldsViaReflection(builder);
  98. reflectionTester.ModifyRepeatedFieldsViaReflection(builder);
  99. TestAllTypes message = builder.Build();
  100. TestUtil.AssertRepeatedFieldsModified(message);
  101. }
  102. [Test]
  103. public void ReflectionDefaults() {
  104. reflectionTester.AssertClearViaReflection(TestAllTypes.DefaultInstance);
  105. reflectionTester.AssertClearViaReflection(TestAllTypes.CreateBuilder().Build());
  106. }
  107. // =================================================================
  108. // Extensions.
  109. [Test]
  110. public void ExtensionAccessors() {
  111. TestAllExtensions.Builder builder = TestAllExtensions.CreateBuilder();
  112. TestUtil.SetAllExtensions(builder);
  113. TestAllExtensions message = builder.Build();
  114. TestUtil.AssertAllExtensionsSet(message);
  115. }
  116. [Test]
  117. public void ExtensionRepeatedSetters() {
  118. TestAllExtensions.Builder builder = TestAllExtensions.CreateBuilder();
  119. TestUtil.SetAllExtensions(builder);
  120. TestUtil.ModifyRepeatedExtensions(builder);
  121. TestAllExtensions message = builder.Build();
  122. TestUtil.AssertRepeatedExtensionsModified(message);
  123. }
  124. [Test]
  125. public void ExtensionDefaults() {
  126. TestUtil.AssertExtensionsClear(TestAllExtensions.DefaultInstance);
  127. TestUtil.AssertExtensionsClear(TestAllExtensions.CreateBuilder().Build());
  128. }
  129. [Test]
  130. public void ExtensionReflectionGetters() {
  131. TestAllExtensions.Builder builder = TestAllExtensions.CreateBuilder();
  132. TestUtil.SetAllExtensions(builder);
  133. TestAllExtensions message = builder.Build();
  134. extensionsReflectionTester.AssertAllFieldsSetViaReflection(message);
  135. }
  136. [Test]
  137. public void ExtensionReflectionSetters() {
  138. TestAllExtensions.Builder builder = TestAllExtensions.CreateBuilder();
  139. extensionsReflectionTester.SetAllFieldsViaReflection(builder);
  140. TestAllExtensions message = builder.Build();
  141. TestUtil.AssertAllExtensionsSet(message);
  142. }
  143. [Test]
  144. public void ExtensionReflectionRepeatedSetters() {
  145. TestAllExtensions.Builder builder = TestAllExtensions.CreateBuilder();
  146. extensionsReflectionTester.SetAllFieldsViaReflection(builder);
  147. extensionsReflectionTester.ModifyRepeatedFieldsViaReflection(builder);
  148. TestAllExtensions message = builder.Build();
  149. TestUtil.AssertRepeatedExtensionsModified(message);
  150. }
  151. [Test]
  152. public void ExtensionReflectionDefaults() {
  153. extensionsReflectionTester.AssertClearViaReflection(TestAllExtensions.DefaultInstance);
  154. extensionsReflectionTester.AssertClearViaReflection(TestAllExtensions.CreateBuilder().Build());
  155. }
  156. [Test]
  157. public void ClearExtension() {
  158. // ClearExtension() is not actually used in TestUtil, so try it manually.
  159. Assert.IsFalse(TestAllExtensions.CreateBuilder()
  160. .SetExtension(UnitTestProtoFile.OptionalInt32Extension, 1)
  161. .ClearExtension(UnitTestProtoFile.OptionalInt32Extension)
  162. .HasExtension(UnitTestProtoFile.OptionalInt32Extension));
  163. Assert.AreEqual(0, TestAllExtensions.CreateBuilder()
  164. .AddExtension(UnitTestProtoFile.RepeatedInt32Extension, 1)
  165. .ClearExtension(UnitTestProtoFile.RepeatedInt32Extension)
  166. .GetExtensionCount(UnitTestProtoFile.RepeatedInt32Extension));
  167. }
  168. [Test]
  169. public void MultipleFilesOption() {
  170. // We mostly just want to check that things compile.
  171. MessageWithNoOuter message = MessageWithNoOuter.CreateBuilder()
  172. .SetNested(MessageWithNoOuter.Types.NestedMessage.CreateBuilder().SetI(1))
  173. .AddForeign(TestAllTypes.CreateBuilder().SetOptionalInt32(1))
  174. .SetNestedEnum(MessageWithNoOuter.Types.NestedEnum.BAZ)
  175. .SetForeignEnum(EnumWithNoOuter.BAR)
  176. .Build();
  177. Assert.AreEqual(message, MessageWithNoOuter.ParseFrom(message.ToByteString()));
  178. Assert.AreEqual(MultiFileProto.Descriptor, MessageWithNoOuter.Descriptor.File);
  179. FieldDescriptor field = MessageWithNoOuter.Descriptor.FindDescriptor<FieldDescriptor>("foreign_enum");
  180. Assert.AreEqual(MultiFileProto.Descriptor.FindTypeByName<EnumDescriptor>("EnumWithNoOuter")
  181. .FindValueByNumber((int)EnumWithNoOuter.BAR), message[field]);
  182. Assert.AreEqual(MultiFileProto.Descriptor, ServiceWithNoOuter.Descriptor.File);
  183. Assert.IsFalse(TestAllExtensions.DefaultInstance.HasExtension(MultiFileProto.ExtensionWithOuter));
  184. }
  185. }
  186. }