GeneratedMessageTest.Proto2.cs 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368
  1. using Google.Protobuf.TestProtos.Proto2;
  2. using Proto2 = Google.Protobuf.TestProtos.Proto2;
  3. using NUnit.Framework;
  4. using static Google.Protobuf.TestProtos.Proto2.UnittestExtensions;
  5. namespace Google.Protobuf
  6. {
  7. /// <summary>
  8. /// Tests around the generated TestAllTypes message in unittest.proto
  9. /// </summary>
  10. public partial class GeneratedMessageTest
  11. {
  12. [Test]
  13. public void DefaultProto2Values()
  14. {
  15. var message = new TestAllTypes();
  16. Assert.AreEqual(false, message.OptionalBool);
  17. Assert.AreEqual(ByteString.Empty, message.OptionalBytes);
  18. Assert.AreEqual(0.0, message.OptionalDouble);
  19. Assert.AreEqual(0, message.OptionalFixed32);
  20. Assert.AreEqual(0L, message.OptionalFixed64);
  21. Assert.AreEqual(0.0f, message.OptionalFloat);
  22. Assert.AreEqual(ForeignEnum.ForeignFoo, message.OptionalForeignEnum);
  23. Assert.IsNull(message.OptionalForeignMessage);
  24. Assert.AreEqual(ImportEnum.ImportFoo, message.OptionalImportEnum);
  25. Assert.IsNull(message.OptionalImportMessage);
  26. Assert.AreEqual(0, message.OptionalInt32);
  27. Assert.AreEqual(0L, message.OptionalInt64);
  28. Assert.AreEqual(Proto2.TestAllTypes.Types.NestedEnum.Foo, message.OptionalNestedEnum);
  29. Assert.IsNull(message.OptionalNestedMessage);
  30. Assert.IsNull(message.OptionalPublicImportMessage);
  31. Assert.AreEqual(0, message.OptionalSfixed32);
  32. Assert.AreEqual(0L, message.OptionalSfixed64);
  33. Assert.AreEqual(0, message.OptionalSint32);
  34. Assert.AreEqual(0L, message.OptionalSint64);
  35. Assert.AreEqual("", message.OptionalString);
  36. Assert.AreEqual(0U, message.OptionalUint32);
  37. Assert.AreEqual(0UL, message.OptionalUint64);
  38. // Repeated fields
  39. Assert.AreEqual(0, message.RepeatedBool.Count);
  40. Assert.AreEqual(0, message.RepeatedBytes.Count);
  41. Assert.AreEqual(0, message.RepeatedDouble.Count);
  42. Assert.AreEqual(0, message.RepeatedFixed32.Count);
  43. Assert.AreEqual(0, message.RepeatedFixed64.Count);
  44. Assert.AreEqual(0, message.RepeatedFloat.Count);
  45. Assert.AreEqual(0, message.RepeatedForeignEnum.Count);
  46. Assert.AreEqual(0, message.RepeatedForeignMessage.Count);
  47. Assert.AreEqual(0, message.RepeatedImportEnum.Count);
  48. Assert.AreEqual(0, message.RepeatedImportMessage.Count);
  49. Assert.AreEqual(0, message.RepeatedNestedEnum.Count);
  50. Assert.AreEqual(0, message.RepeatedNestedMessage.Count);
  51. Assert.AreEqual(0, message.RepeatedSfixed32.Count);
  52. Assert.AreEqual(0, message.RepeatedSfixed64.Count);
  53. Assert.AreEqual(0, message.RepeatedSint32.Count);
  54. Assert.AreEqual(0, message.RepeatedSint64.Count);
  55. Assert.AreEqual(0, message.RepeatedString.Count);
  56. Assert.AreEqual(0, message.RepeatedUint32.Count);
  57. Assert.AreEqual(0, message.RepeatedUint64.Count);
  58. // Oneof fields
  59. Assert.AreEqual(Proto2.TestAllTypes.OneofFieldOneofCase.None, message.OneofFieldCase);
  60. Assert.AreEqual(0, message.OneofUint32);
  61. Assert.AreEqual("", message.OneofString);
  62. Assert.AreEqual(ByteString.Empty, message.OneofBytes);
  63. Assert.IsNull(message.OneofNestedMessage);
  64. Assert.AreEqual(true, message.DefaultBool);
  65. Assert.AreEqual(ByteString.CopyFromUtf8("world"), message.DefaultBytes);
  66. Assert.AreEqual("123", message.DefaultCord);
  67. Assert.AreEqual(52e3, message.DefaultDouble);
  68. Assert.AreEqual(47, message.DefaultFixed32);
  69. Assert.AreEqual(48, message.DefaultFixed64);
  70. Assert.AreEqual(51.5, message.DefaultFloat);
  71. Assert.AreEqual(ForeignEnum.ForeignBar, message.DefaultForeignEnum);
  72. Assert.AreEqual(ImportEnum.ImportBar, message.DefaultImportEnum);
  73. Assert.AreEqual(41, message.DefaultInt32);
  74. Assert.AreEqual(42, message.DefaultInt64);
  75. Assert.AreEqual(Proto2.TestAllTypes.Types.NestedEnum.Bar, message.DefaultNestedEnum);
  76. Assert.AreEqual(49, message.DefaultSfixed32);
  77. Assert.AreEqual(-50, message.DefaultSfixed64);
  78. Assert.AreEqual(-45, message.DefaultSint32);
  79. Assert.AreEqual(46, message.DefaultSint64);
  80. Assert.AreEqual("hello", message.DefaultString);
  81. Assert.AreEqual("abc", message.DefaultStringPiece);
  82. Assert.AreEqual(43, message.DefaultUint32);
  83. Assert.AreEqual(44, message.DefaultUint64);
  84. Assert.False(message.HasDefaultBool);
  85. Assert.False(message.HasDefaultBytes);
  86. Assert.False(message.HasDefaultCord);
  87. Assert.False(message.HasDefaultDouble);
  88. Assert.False(message.HasDefaultFixed32);
  89. Assert.False(message.HasDefaultFixed64);
  90. Assert.False(message.HasDefaultFloat);
  91. Assert.False(message.HasDefaultForeignEnum);
  92. Assert.False(message.HasDefaultImportEnum);
  93. Assert.False(message.HasDefaultInt32);
  94. Assert.False(message.HasDefaultInt64);
  95. Assert.False(message.HasDefaultNestedEnum);
  96. Assert.False(message.HasDefaultSfixed32);
  97. Assert.False(message.HasDefaultSfixed64);
  98. Assert.False(message.HasDefaultSint32);
  99. Assert.False(message.HasDefaultSint64);
  100. Assert.False(message.HasDefaultString);
  101. Assert.False(message.HasDefaultStringPiece);
  102. Assert.False(message.HasDefaultUint32);
  103. Assert.False(message.HasDefaultUint64);
  104. }
  105. [Test]
  106. public void DefaultExtensionValues()
  107. {
  108. var message = new TestAllExtensions();
  109. Assert.AreEqual(false, message.GetExtension(OptionalBoolExtension));
  110. Assert.AreEqual(ByteString.Empty, message.GetExtension(OptionalBytesExtension));
  111. Assert.AreEqual(0.0, message.GetExtension(OptionalDoubleExtension));
  112. Assert.AreEqual(0, message.GetExtension(OptionalFixed32Extension));
  113. Assert.AreEqual(0L, message.GetExtension(OptionalFixed64Extension));
  114. Assert.AreEqual(0.0f, message.GetExtension(OptionalFloatExtension));
  115. Assert.AreEqual(ForeignEnum.ForeignFoo, message.GetExtension(OptionalForeignEnumExtension));
  116. Assert.IsNull(message.GetExtension(OptionalForeignMessageExtension));
  117. Assert.AreEqual(ImportEnum.ImportFoo, message.GetExtension(OptionalImportEnumExtension));
  118. Assert.IsNull(message.GetExtension(OptionalImportMessageExtension));
  119. Assert.AreEqual(0, message.GetExtension(OptionalInt32Extension));
  120. Assert.AreEqual(0L, message.GetExtension(OptionalInt64Extension));
  121. Assert.AreEqual(Proto2.TestAllTypes.Types.NestedEnum.Foo, message.GetExtension(OptionalNestedEnumExtension));
  122. Assert.IsNull(message.GetExtension(OptionalNestedMessageExtension));
  123. Assert.IsNull(message.GetExtension(OptionalPublicImportMessageExtension));
  124. Assert.AreEqual(0, message.GetExtension(OptionalSfixed32Extension));
  125. Assert.AreEqual(0L, message.GetExtension(OptionalSfixed64Extension));
  126. Assert.AreEqual(0, message.GetExtension(OptionalSint32Extension));
  127. Assert.AreEqual(0L, message.GetExtension(OptionalSint64Extension));
  128. Assert.AreEqual("", message.GetExtension(OptionalStringExtension));
  129. Assert.AreEqual(0U, message.GetExtension(OptionalUint32Extension));
  130. Assert.AreEqual(0UL, message.GetExtension(OptionalUint64Extension));
  131. // Repeated fields
  132. Assert.IsNull(message.GetExtension(RepeatedBoolExtension));
  133. Assert.IsNull(message.GetExtension(RepeatedBytesExtension));
  134. Assert.IsNull(message.GetExtension(RepeatedDoubleExtension));
  135. Assert.IsNull(message.GetExtension(RepeatedFixed32Extension));
  136. Assert.IsNull(message.GetExtension(RepeatedFixed64Extension));
  137. Assert.IsNull(message.GetExtension(RepeatedFloatExtension));
  138. Assert.IsNull(message.GetExtension(RepeatedForeignEnumExtension));
  139. Assert.IsNull(message.GetExtension(RepeatedForeignMessageExtension));
  140. Assert.IsNull(message.GetExtension(RepeatedImportEnumExtension));
  141. Assert.IsNull(message.GetExtension(RepeatedImportMessageExtension));
  142. Assert.IsNull(message.GetExtension(RepeatedNestedEnumExtension));
  143. Assert.IsNull(message.GetExtension(RepeatedNestedMessageExtension));
  144. Assert.IsNull(message.GetExtension(RepeatedSfixed32Extension));
  145. Assert.IsNull(message.GetExtension(RepeatedSfixed64Extension));
  146. Assert.IsNull(message.GetExtension(RepeatedSint32Extension));
  147. Assert.IsNull(message.GetExtension(RepeatedSint64Extension));
  148. Assert.IsNull(message.GetExtension(RepeatedStringExtension));
  149. Assert.IsNull(message.GetExtension(RepeatedUint32Extension));
  150. Assert.IsNull(message.GetExtension(RepeatedUint64Extension));
  151. // Oneof fields
  152. Assert.AreEqual(0, message.GetExtension(OneofUint32Extension));
  153. Assert.AreEqual("", message.GetExtension(OneofStringExtension));
  154. Assert.AreEqual(ByteString.Empty, message.GetExtension(OneofBytesExtension));
  155. Assert.IsNull(message.GetExtension(OneofNestedMessageExtension));
  156. Assert.AreEqual(true, message.GetExtension(DefaultBoolExtension));
  157. Assert.AreEqual(ByteString.CopyFromUtf8("world"), message.GetExtension(DefaultBytesExtension));
  158. Assert.AreEqual("123", message.GetExtension(DefaultCordExtension));
  159. Assert.AreEqual(52e3, message.GetExtension(DefaultDoubleExtension));
  160. Assert.AreEqual(47, message.GetExtension(DefaultFixed32Extension));
  161. Assert.AreEqual(48, message.GetExtension(DefaultFixed64Extension));
  162. Assert.AreEqual(51.5, message.GetExtension(DefaultFloatExtension));
  163. Assert.AreEqual(ForeignEnum.ForeignBar, message.GetExtension(DefaultForeignEnumExtension));
  164. Assert.AreEqual(ImportEnum.ImportBar, message.GetExtension(DefaultImportEnumExtension));
  165. Assert.AreEqual(41, message.GetExtension(DefaultInt32Extension));
  166. Assert.AreEqual(42, message.GetExtension(DefaultInt64Extension));
  167. Assert.AreEqual(Proto2.TestAllTypes.Types.NestedEnum.Bar, message.GetExtension(DefaultNestedEnumExtension));
  168. Assert.AreEqual(49, message.GetExtension(DefaultSfixed32Extension));
  169. Assert.AreEqual(-50, message.GetExtension(DefaultSfixed64Extension));
  170. Assert.AreEqual(-45, message.GetExtension(DefaultSint32Extension));
  171. Assert.AreEqual(46, message.GetExtension(DefaultSint64Extension));
  172. Assert.AreEqual("hello", message.GetExtension(DefaultStringExtension));
  173. Assert.AreEqual("abc", message.GetExtension(DefaultStringPieceExtension));
  174. Assert.AreEqual(43, message.GetExtension(DefaultUint32Extension));
  175. Assert.AreEqual(44, message.GetExtension(DefaultUint64Extension));
  176. Assert.False(message.HasExtension(DefaultBoolExtension));
  177. Assert.False(message.HasExtension(DefaultBytesExtension));
  178. Assert.False(message.HasExtension(DefaultCordExtension));
  179. Assert.False(message.HasExtension(DefaultDoubleExtension));
  180. Assert.False(message.HasExtension(DefaultFixed32Extension));
  181. Assert.False(message.HasExtension(DefaultFixed64Extension));
  182. Assert.False(message.HasExtension(DefaultFloatExtension));
  183. Assert.False(message.HasExtension(DefaultForeignEnumExtension));
  184. Assert.False(message.HasExtension(DefaultImportEnumExtension));
  185. Assert.False(message.HasExtension(DefaultInt32Extension));
  186. Assert.False(message.HasExtension(DefaultInt64Extension));
  187. Assert.False(message.HasExtension(DefaultNestedEnumExtension));
  188. Assert.False(message.HasExtension(DefaultSfixed32Extension));
  189. Assert.False(message.HasExtension(DefaultSfixed64Extension));
  190. Assert.False(message.HasExtension(DefaultSint32Extension));
  191. Assert.False(message.HasExtension(DefaultSint64Extension));
  192. Assert.False(message.HasExtension(DefaultStringExtension));
  193. Assert.False(message.HasExtension(DefaultStringPieceExtension));
  194. Assert.False(message.HasExtension(DefaultUint32Extension));
  195. Assert.False(message.HasExtension(DefaultUint64Extension));
  196. }
  197. [Test]
  198. public void FieldPresence()
  199. {
  200. var message = new TestAllTypes();
  201. Assert.False(message.HasOptionalBool);
  202. Assert.False(message.OptionalBool);
  203. message.OptionalBool = true;
  204. Assert.True(message.HasOptionalBool);
  205. Assert.True(message.OptionalBool);
  206. message.OptionalBool = false;
  207. Assert.True(message.HasOptionalBool);
  208. Assert.False(message.OptionalBool);
  209. message.ClearOptionalBool();
  210. Assert.False(message.HasOptionalBool);
  211. Assert.False(message.OptionalBool);
  212. Assert.False(message.HasDefaultBool);
  213. Assert.True(message.DefaultBool);
  214. message.DefaultBool = false;
  215. Assert.True(message.HasDefaultBool);
  216. Assert.False(message.DefaultBool);
  217. message.DefaultBool = true;
  218. Assert.True(message.HasDefaultBool);
  219. Assert.True(message.DefaultBool);
  220. message.ClearDefaultBool();
  221. Assert.False(message.HasDefaultBool);
  222. Assert.True(message.DefaultBool);
  223. }
  224. [Test]
  225. public void RequiredFields()
  226. {
  227. var message = new TestRequired();
  228. Assert.False(message.IsInitialized());
  229. message.A = 1;
  230. message.B = 2;
  231. message.C = 3;
  232. Assert.True(message.IsInitialized());
  233. }
  234. [Test]
  235. public void RequiredFieldsInExtensions()
  236. {
  237. var message = new TestAllExtensions();
  238. Assert.True(message.IsInitialized());
  239. message.SetExtension(TestRequired.Extensions.Single, new TestRequired());
  240. Assert.False(message.IsInitialized());
  241. var extensionMessage = message.GetExtension(TestRequired.Extensions.Single);
  242. extensionMessage.A = 1;
  243. extensionMessage.B = 2;
  244. extensionMessage.C = 3;
  245. Assert.True(message.IsInitialized());
  246. message.GetOrInitializeExtension(TestRequired.Extensions.Multi);
  247. Assert.True(message.IsInitialized());
  248. message.GetExtension(TestRequired.Extensions.Multi).Add(new TestRequired());
  249. Assert.False(message.IsInitialized());
  250. extensionMessage = message.GetExtension(TestRequired.Extensions.Multi)[0];
  251. extensionMessage.A = 1;
  252. extensionMessage.B = 2;
  253. extensionMessage.C = 3;
  254. Assert.True(message.IsInitialized());
  255. message.SetExtension(UnittestExtensions.OptionalBoolExtension, true);
  256. Assert.True(message.IsInitialized());
  257. message.GetOrInitializeExtension(UnittestExtensions.RepeatedBoolExtension).Add(true);
  258. Assert.True(message.IsInitialized());
  259. }
  260. [Test]
  261. public void RequiredFieldInNestedMessageMapValue()
  262. {
  263. var message = new TestRequiredMap();
  264. message.Foo.Add(0, new TestRequiredMap.Types.NestedMessage());
  265. Assert.False(message.IsInitialized());
  266. message.Foo[0].RequiredInt32 = 12;
  267. Assert.True(message.IsInitialized());
  268. }
  269. [Test]
  270. public void RoundTrip_Groups()
  271. {
  272. var message = new TestAllTypes
  273. {
  274. OptionalGroup = new TestAllTypes.Types.OptionalGroup
  275. {
  276. A = 10
  277. },
  278. RepeatedGroup =
  279. {
  280. new TestAllTypes.Types.RepeatedGroup { A = 10 },
  281. new TestAllTypes.Types.RepeatedGroup { A = 20 },
  282. new TestAllTypes.Types.RepeatedGroup { A = 30 }
  283. }
  284. };
  285. byte[] bytes = message.ToByteArray();
  286. TestAllTypes parsed = Proto2.TestAllTypes.Parser.ParseFrom(bytes);
  287. Assert.AreEqual(message, parsed);
  288. }
  289. [Test]
  290. public void RoundTrip_ExtensionGroups()
  291. {
  292. var message = new TestAllExtensions();
  293. message.SetExtension(UnittestExtensions.OptionalGroupExtension, new OptionalGroup_extension { A = 10 });
  294. message.GetOrInitializeExtension(UnittestExtensions.RepeatedGroupExtension).AddRange(new[]
  295. {
  296. new RepeatedGroup_extension { A = 10 },
  297. new RepeatedGroup_extension { A = 20 },
  298. new RepeatedGroup_extension { A = 30 }
  299. });
  300. byte[] bytes = message.ToByteArray();
  301. TestAllExtensions extendable_parsed = TestAllExtensions.Parser.WithExtensionRegistry(new ExtensionRegistry() { UnittestExtensions.OptionalGroupExtension, UnittestExtensions.RepeatedGroupExtension }).ParseFrom(bytes);
  302. Assert.AreEqual(message, extendable_parsed);
  303. }
  304. [Test]
  305. public void RoundTrip_NestedExtensionGroup()
  306. {
  307. var message = new TestGroupExtension();
  308. message.SetExtension(TestNestedExtension.Extensions.OptionalGroupExtension, new TestNestedExtension.Types.OptionalGroup_extension { A = 10 });
  309. byte[] bytes = message.ToByteArray();
  310. TestGroupExtension extendable_parsed = TestGroupExtension.Parser.WithExtensionRegistry(new ExtensionRegistry() { TestNestedExtension.Extensions.OptionalGroupExtension }).ParseFrom(bytes);
  311. Assert.AreEqual(message, extendable_parsed);
  312. }
  313. }
  314. }