GeneratedMessageTest.cs 8.7 KB

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