GeneratedMessageTest.cs 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  1. // Protocol Buffers - Google's data interchange format
  2. // Copyright 2008 Google Inc.
  3. // http://code.google.com/p/protobuf/
  4. //
  5. // Licensed under the Apache License, Version 2.0 (the "License");
  6. // you may not use this file except in compliance with the License.
  7. // You may obtain a copy of the License at
  8. //
  9. // http://www.apache.org/licenses/LICENSE-2.0
  10. //
  11. // Unless required by applicable law or agreed to in writing, software
  12. // distributed under the License is distributed on an "AS IS" BASIS,
  13. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14. // See the License for the specific language governing permissions and
  15. // limitations under the License.
  16. using Google.ProtocolBuffers.Descriptors;
  17. using Google.ProtocolBuffers.TestProtos;
  18. using NUnit.Framework;
  19. namespace Google.ProtocolBuffers {
  20. [TestFixture]
  21. public class GeneratedMessageTest {
  22. ReflectionTester reflectionTester;
  23. ReflectionTester extensionsReflectionTester;
  24. [SetUp]
  25. public void SetUp() {
  26. reflectionTester = ReflectionTester.CreateTestAllTypesInstance();
  27. extensionsReflectionTester = ReflectionTester.CreateTestAllExtensionsInstance();
  28. }
  29. [Test]
  30. public void DefaultInstance() {
  31. Assert.AreSame(TestAllTypes.DefaultInstance, TestAllTypes.DefaultInstance.DefaultInstanceForType);
  32. Assert.AreSame(TestAllTypes.DefaultInstance, TestAllTypes.CreateBuilder().DefaultInstanceForType);
  33. }
  34. [Test]
  35. public void Accessors() {
  36. TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();
  37. TestUtil.SetAllFields(builder);
  38. TestAllTypes message = builder.Build();
  39. TestUtil.AssertAllFieldsSet(message);
  40. }
  41. [Test]
  42. public void RepeatedSetters() {
  43. TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();
  44. TestUtil.SetAllFields(builder);
  45. TestUtil.ModifyRepeatedFields(builder);
  46. TestAllTypes message = builder.Build();
  47. TestUtil.AssertRepeatedFieldsModified(message);
  48. }
  49. [Test]
  50. public void RepeatedAppend() {
  51. TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();
  52. builder.AddRangeRepeatedInt32(new int[]{1, 2, 3, 4});
  53. builder.AddRangeRepeatedForeignEnum((new ForeignEnum[] { ForeignEnum.FOREIGN_BAZ }));
  54. ForeignMessage foreignMessage = ForeignMessage.CreateBuilder().SetC(12).Build();
  55. builder.AddRangeRepeatedForeignMessage(new ForeignMessage[] {foreignMessage});
  56. TestAllTypes message = builder.Build();
  57. TestUtil.AssertEqual(message.RepeatedInt32List, new int[]{1, 2, 3, 4});
  58. TestUtil.AssertEqual(message.RepeatedForeignEnumList, new ForeignEnum[] {ForeignEnum.FOREIGN_BAZ});
  59. Assert.AreEqual(1, message.RepeatedForeignMessageCount);
  60. Assert.AreEqual(12, message.GetRepeatedForeignMessage(0).C);
  61. }
  62. [Test]
  63. public void SettingForeignMessageUsingBuilder() {
  64. TestAllTypes message = TestAllTypes.CreateBuilder()
  65. // Pass builder for foreign message instance.
  66. .SetOptionalForeignMessage(ForeignMessage.CreateBuilder().SetC(123))
  67. .Build();
  68. TestAllTypes expectedMessage = TestAllTypes.CreateBuilder()
  69. // Create expected version passing foreign message instance explicitly.
  70. .SetOptionalForeignMessage(ForeignMessage.CreateBuilder().SetC(123).Build())
  71. .Build();
  72. Assert.AreEqual(expectedMessage, message);
  73. }
  74. [Test]
  75. public void SettingRepeatedForeignMessageUsingBuilder() {
  76. TestAllTypes message = TestAllTypes.CreateBuilder()
  77. // Pass builder for foreign message instance.
  78. .AddRepeatedForeignMessage(ForeignMessage.CreateBuilder().SetC(456))
  79. .Build();
  80. TestAllTypes expectedMessage = TestAllTypes.CreateBuilder()
  81. // Create expected version passing foreign message instance explicitly.
  82. .AddRepeatedForeignMessage(ForeignMessage.CreateBuilder().SetC(456).Build())
  83. .Build();
  84. Assert.AreEqual(expectedMessage, message);
  85. }
  86. [Test]
  87. public void Defaults() {
  88. TestUtil.AssertClear(TestAllTypes.DefaultInstance);
  89. TestUtil.AssertClear(TestAllTypes.CreateBuilder().Build());
  90. Assert.AreEqual("\u1234", TestExtremeDefaultValues.DefaultInstance.Utf8String);
  91. }
  92. [Test]
  93. public void ReflectionGetters() {
  94. TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();
  95. TestUtil.SetAllFields(builder);
  96. TestAllTypes message = builder.Build();
  97. reflectionTester.AssertAllFieldsSetViaReflection(message);
  98. }
  99. [Test]
  100. public void ReflectionSetters() {
  101. TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();
  102. reflectionTester.SetAllFieldsViaReflection(builder);
  103. TestAllTypes message = builder.Build();
  104. TestUtil.AssertAllFieldsSet(message);
  105. }
  106. [Test]
  107. public void ReflectionRepeatedSetters() {
  108. TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();
  109. reflectionTester.SetAllFieldsViaReflection(builder);
  110. reflectionTester.ModifyRepeatedFieldsViaReflection(builder);
  111. TestAllTypes message = builder.Build();
  112. TestUtil.AssertRepeatedFieldsModified(message);
  113. }
  114. [Test]
  115. public void ReflectionDefaults() {
  116. reflectionTester.AssertClearViaReflection(TestAllTypes.DefaultInstance);
  117. reflectionTester.AssertClearViaReflection(TestAllTypes.CreateBuilder().Build());
  118. }
  119. // =================================================================
  120. // Extensions.
  121. [Test]
  122. public void ExtensionAccessors() {
  123. TestAllExtensions.Builder builder = TestAllExtensions.CreateBuilder();
  124. TestUtil.SetAllExtensions(builder);
  125. TestAllExtensions message = builder.Build();
  126. TestUtil.AssertAllExtensionsSet(message);
  127. }
  128. [Test]
  129. public void ExtensionRepeatedSetters() {
  130. TestAllExtensions.Builder builder = TestAllExtensions.CreateBuilder();
  131. TestUtil.SetAllExtensions(builder);
  132. TestUtil.ModifyRepeatedExtensions(builder);
  133. TestAllExtensions message = builder.Build();
  134. TestUtil.AssertRepeatedExtensionsModified(message);
  135. }
  136. [Test]
  137. public void ExtensionDefaults() {
  138. TestUtil.AssertExtensionsClear(TestAllExtensions.DefaultInstance);
  139. TestUtil.AssertExtensionsClear(TestAllExtensions.CreateBuilder().Build());
  140. }
  141. [Test]
  142. public void ExtensionReflectionGetters() {
  143. TestAllExtensions.Builder builder = TestAllExtensions.CreateBuilder();
  144. TestUtil.SetAllExtensions(builder);
  145. TestAllExtensions message = builder.Build();
  146. extensionsReflectionTester.AssertAllFieldsSetViaReflection(message);
  147. }
  148. [Test]
  149. public void ExtensionReflectionSetters() {
  150. TestAllExtensions.Builder builder = TestAllExtensions.CreateBuilder();
  151. extensionsReflectionTester.SetAllFieldsViaReflection(builder);
  152. TestAllExtensions message = builder.Build();
  153. TestUtil.AssertAllExtensionsSet(message);
  154. }
  155. [Test]
  156. public void ExtensionReflectionRepeatedSetters() {
  157. TestAllExtensions.Builder builder = TestAllExtensions.CreateBuilder();
  158. extensionsReflectionTester.SetAllFieldsViaReflection(builder);
  159. extensionsReflectionTester.ModifyRepeatedFieldsViaReflection(builder);
  160. TestAllExtensions message = builder.Build();
  161. TestUtil.AssertRepeatedExtensionsModified(message);
  162. }
  163. [Test]
  164. public void ExtensionReflectionDefaults() {
  165. extensionsReflectionTester.AssertClearViaReflection(TestAllExtensions.DefaultInstance);
  166. extensionsReflectionTester.AssertClearViaReflection(TestAllExtensions.CreateBuilder().Build());
  167. }
  168. [Test]
  169. public void ClearExtension() {
  170. // ClearExtension() is not actually used in TestUtil, so try it manually.
  171. Assert.IsFalse(TestAllExtensions.CreateBuilder()
  172. .SetExtension(UnitTestProtoFile.OptionalInt32Extension, 1)
  173. .ClearExtension(UnitTestProtoFile.OptionalInt32Extension)
  174. .HasExtension(UnitTestProtoFile.OptionalInt32Extension));
  175. Assert.AreEqual(0, TestAllExtensions.CreateBuilder()
  176. .AddExtension(UnitTestProtoFile.RepeatedInt32Extension, 1)
  177. .ClearExtension(UnitTestProtoFile.RepeatedInt32Extension)
  178. .GetExtensionCount(UnitTestProtoFile.RepeatedInt32Extension));
  179. }
  180. [Test]
  181. public void MultipleFilesOption() {
  182. // We mostly just want to check that things compile.
  183. MessageWithNoOuter message = MessageWithNoOuter.CreateBuilder()
  184. .SetNested(MessageWithNoOuter.Types.NestedMessage.CreateBuilder().SetI(1))
  185. .AddForeign(TestAllTypes.CreateBuilder().SetOptionalInt32(1))
  186. .SetNestedEnum(MessageWithNoOuter.Types.NestedEnum.BAZ)
  187. .SetForeignEnum(EnumWithNoOuter.BAR)
  188. .Build();
  189. Assert.AreEqual(message, MessageWithNoOuter.ParseFrom(message.ToByteString()));
  190. Assert.AreEqual(MultiFileProto.Descriptor, MessageWithNoOuter.Descriptor.File);
  191. FieldDescriptor field = MessageWithNoOuter.Descriptor.FindDescriptor<FieldDescriptor>("foreign_enum");
  192. Assert.AreEqual(MultiFileProto.Descriptor.FindTypeByName<EnumDescriptor>("EnumWithNoOuter")
  193. .FindValueByNumber((int)EnumWithNoOuter.BAR), message[field]);
  194. Assert.AreEqual(MultiFileProto.Descriptor, ServiceWithNoOuter.Descriptor.File);
  195. Assert.IsFalse(TestAllExtensions.DefaultInstance.HasExtension(MultiFileProto.ExtensionWithOuter));
  196. }
  197. }
  198. }