TestUtil.cs 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.IO;
  5. using Google.ProtocolBuffers.TestProtos;
  6. using NUnit.Framework;
  7. namespace Google.ProtocolBuffers {
  8. internal static class TestUtil {
  9. private static DirectoryInfo testDataDirectory;
  10. internal static DirectoryInfo TestDataDirectory {
  11. get {
  12. if (testDataDirectory != null) {
  13. return testDataDirectory;
  14. }
  15. DirectoryInfo ancestor = new DirectoryInfo(".");
  16. // Search each parent directory looking for "src/google/protobuf".
  17. while (ancestor != null) {
  18. string candidate = Path.Combine(ancestor.FullName, "src/google/protobuf");
  19. if (Directory.Exists(candidate)) {
  20. testDataDirectory = new DirectoryInfo(candidate);
  21. return testDataDirectory;
  22. }
  23. ancestor = ancestor.Parent;
  24. }
  25. // TODO(jonskeet): Come up with a better exception to throw
  26. throw new Exception("Unable to find directory containing test files");
  27. }
  28. }
  29. /// <summary>
  30. /// Helper to convert a String to ByteString.
  31. /// </summary>
  32. private static ByteString ToBytes(String str) {
  33. return ByteString.CopyFrom(Encoding.UTF8.GetBytes(str));
  34. }
  35. internal static TestAllTypes GetAllSet() {
  36. TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();
  37. SetAllFields(builder);
  38. return builder.Build();
  39. }
  40. /// <summary>
  41. /// Sets every field of the specified message to the values expected by
  42. /// AssertAllFieldsSet.
  43. /// </summary>
  44. internal static void SetAllFields(TestAllTypes.Builder message) {
  45. message.SetOptionalInt32(101);
  46. message.SetOptionalInt64(102);
  47. message.SetOptionalUint32(103);
  48. message.SetOptionalUint64(104);
  49. message.SetOptionalSint32(105);
  50. message.SetOptionalSint64(106);
  51. message.SetOptionalFixed32(107);
  52. message.SetOptionalFixed64(108);
  53. message.SetOptionalSfixed32(109);
  54. message.SetOptionalSfixed64(110);
  55. message.SetOptionalFloat(111);
  56. message.SetOptionalDouble(112);
  57. message.SetOptionalBool(true);
  58. message.SetOptionalString("115");
  59. message.SetOptionalBytes(ToBytes("116"));
  60. message.SetOptionalGroup(TestAllTypes.Types.OptionalGroup.CreateBuilder().SetA(117).Build());
  61. message.SetOptionalNestedMessage(TestAllTypes.Types.NestedMessage.CreateBuilder().SetBb(118).Build());
  62. message.SetOptionalForeignMessage(ForeignMessage.CreateBuilder().SetC(119).Build());
  63. message.SetOptionalImportMessage(ImportMessage.CreateBuilder().SetD(120).Build());
  64. message.SetOptionalNestedEnum(TestAllTypes.Types.NestedEnum.BAZ);
  65. message.SetOptionalForeignEnum(ForeignEnum.FOREIGN_BAZ);
  66. message.SetOptionalImportEnum(ImportEnum.IMPORT_BAZ);
  67. message.SetOptionalStringPiece("124");
  68. message.SetOptionalCord("125");
  69. // -----------------------------------------------------------------
  70. message.AddRepeatedInt32(201);
  71. message.AddRepeatedInt64(202);
  72. message.AddRepeatedUint32(203);
  73. message.AddRepeatedUint64(204);
  74. message.AddRepeatedSint32(205);
  75. message.AddRepeatedSint64(206);
  76. message.AddRepeatedFixed32(207);
  77. message.AddRepeatedFixed64(208);
  78. message.AddRepeatedSfixed32(209);
  79. message.AddRepeatedSfixed64(210);
  80. message.AddRepeatedFloat(211);
  81. message.AddRepeatedDouble(212);
  82. message.AddRepeatedBool(true);
  83. message.AddRepeatedString("215");
  84. message.AddRepeatedBytes(ToBytes("216"));
  85. message.AddRepeatedGroup(TestAllTypes.Types.RepeatedGroup.CreateBuilder().SetA(217).Build());
  86. message.AddRepeatedNestedMessage(TestAllTypes.Types.NestedMessage.CreateBuilder().SetBb(218).Build());
  87. message.AddRepeatedForeignMessage(ForeignMessage.CreateBuilder().SetC(219).Build());
  88. message.AddRepeatedImportMessage(ImportMessage.CreateBuilder().SetD(220).Build());
  89. message.AddRepeatedNestedEnum(TestAllTypes.Types.NestedEnum.BAR);
  90. message.AddRepeatedForeignEnum(ForeignEnum.FOREIGN_BAR);
  91. message.AddRepeatedImportEnum(ImportEnum.IMPORT_BAR);
  92. message.AddRepeatedStringPiece("224");
  93. message.AddRepeatedCord("225");
  94. // Add a second one of each field.
  95. message.AddRepeatedInt32(301);
  96. message.AddRepeatedInt64(302);
  97. message.AddRepeatedUint32(303);
  98. message.AddRepeatedUint64(304);
  99. message.AddRepeatedSint32(305);
  100. message.AddRepeatedSint64(306);
  101. message.AddRepeatedFixed32(307);
  102. message.AddRepeatedFixed64(308);
  103. message.AddRepeatedSfixed32(309);
  104. message.AddRepeatedSfixed64(310);
  105. message.AddRepeatedFloat(311);
  106. message.AddRepeatedDouble(312);
  107. message.AddRepeatedBool(false);
  108. message.AddRepeatedString("315");
  109. message.AddRepeatedBytes(ToBytes("316"));
  110. message.AddRepeatedGroup(TestAllTypes.Types.RepeatedGroup.CreateBuilder().SetA(317).Build());
  111. message.AddRepeatedNestedMessage(TestAllTypes.Types.NestedMessage.CreateBuilder().SetBb(318).Build());
  112. message.AddRepeatedForeignMessage(ForeignMessage.CreateBuilder().SetC(319).Build());
  113. message.AddRepeatedImportMessage(ImportMessage.CreateBuilder().SetD(320).Build());
  114. message.AddRepeatedNestedEnum(TestAllTypes.Types.NestedEnum.BAZ);
  115. message.AddRepeatedForeignEnum(ForeignEnum.FOREIGN_BAZ);
  116. message.AddRepeatedImportEnum(ImportEnum.IMPORT_BAZ);
  117. message.AddRepeatedStringPiece("324");
  118. message.AddRepeatedCord("325");
  119. // -----------------------------------------------------------------
  120. message.SetDefaultInt32(401);
  121. message.SetDefaultInt64(402);
  122. message.SetDefaultUint32(403);
  123. message.SetDefaultUint64(404);
  124. message.SetDefaultSint32(405);
  125. message.SetDefaultSint64(406);
  126. message.SetDefaultFixed32(407);
  127. message.SetDefaultFixed64(408);
  128. message.SetDefaultSfixed32(409);
  129. message.SetDefaultSfixed64(410);
  130. message.SetDefaultFloat(411);
  131. message.SetDefaultDouble(412);
  132. message.SetDefaultBool(false);
  133. message.SetDefaultString("415");
  134. message.SetDefaultBytes(ToBytes("416"));
  135. message.SetDefaultNestedEnum(TestAllTypes.Types.NestedEnum.FOO);
  136. message.SetDefaultForeignEnum(ForeignEnum.FOREIGN_FOO);
  137. message.SetDefaultImportEnum(ImportEnum.IMPORT_FOO);
  138. message.SetDefaultStringPiece("424");
  139. message.SetDefaultCord("425");
  140. }
  141. /// <summary>
  142. /// Asserts that all fields of the specified message are set to the values
  143. /// assigned by SetAllFields.
  144. /// </summary>
  145. internal static void AssertAllFieldsSet(TestAllTypes message) {
  146. Assert.IsTrue(message.HasOptionalInt32);
  147. Assert.IsTrue(message.HasOptionalInt64);
  148. Assert.IsTrue(message.HasOptionalUint32);
  149. Assert.IsTrue(message.HasOptionalUint64);
  150. Assert.IsTrue(message.HasOptionalSint32);
  151. Assert.IsTrue(message.HasOptionalSint64);
  152. Assert.IsTrue(message.HasOptionalFixed32);
  153. Assert.IsTrue(message.HasOptionalFixed64);
  154. Assert.IsTrue(message.HasOptionalSfixed32);
  155. Assert.IsTrue(message.HasOptionalSfixed64);
  156. Assert.IsTrue(message.HasOptionalFloat);
  157. Assert.IsTrue(message.HasOptionalDouble);
  158. Assert.IsTrue(message.HasOptionalBool);
  159. Assert.IsTrue(message.HasOptionalString);
  160. Assert.IsTrue(message.HasOptionalBytes);
  161. Assert.IsTrue(message.HasOptionalGroup);
  162. Assert.IsTrue(message.HasOptionalNestedMessage);
  163. Assert.IsTrue(message.HasOptionalForeignMessage);
  164. Assert.IsTrue(message.HasOptionalImportMessage);
  165. Assert.IsTrue(message.OptionalGroup.HasA);
  166. Assert.IsTrue(message.OptionalNestedMessage.HasBb);
  167. Assert.IsTrue(message.OptionalForeignMessage.HasC);
  168. Assert.IsTrue(message.OptionalImportMessage.HasD);
  169. Assert.IsTrue(message.HasOptionalNestedEnum);
  170. Assert.IsTrue(message.HasOptionalForeignEnum);
  171. Assert.IsTrue(message.HasOptionalImportEnum);
  172. Assert.IsTrue(message.HasOptionalStringPiece);
  173. Assert.IsTrue(message.HasOptionalCord);
  174. Assert.AreEqual(101, message.OptionalInt32);
  175. Assert.AreEqual(102, message.OptionalInt64);
  176. Assert.AreEqual(103, message.OptionalUint32);
  177. Assert.AreEqual(104, message.OptionalUint64);
  178. Assert.AreEqual(105, message.OptionalSint32);
  179. Assert.AreEqual(106, message.OptionalSint64);
  180. Assert.AreEqual(107, message.OptionalFixed32);
  181. Assert.AreEqual(108, message.OptionalFixed64);
  182. Assert.AreEqual(109, message.OptionalSfixed32);
  183. Assert.AreEqual(110, message.OptionalSfixed64);
  184. Assert.AreEqual(111, message.OptionalFloat);
  185. Assert.AreEqual(112, message.OptionalDouble);
  186. Assert.AreEqual(true, message.OptionalBool);
  187. Assert.AreEqual("115", message.OptionalString);
  188. Assert.AreEqual(ToBytes("116"), message.OptionalBytes);
  189. Assert.AreEqual(117, message.OptionalGroup.A);
  190. Assert.AreEqual(118, message.OptionalNestedMessage.Bb);
  191. Assert.AreEqual(119, message.OptionalForeignMessage.C);
  192. Assert.AreEqual(120, message.OptionalImportMessage.D);
  193. Assert.AreEqual(TestAllTypes.Types.NestedEnum.BAZ, message.OptionalNestedEnum);
  194. Assert.AreEqual(ForeignEnum.FOREIGN_BAZ, message.OptionalForeignEnum);
  195. Assert.AreEqual(ImportEnum.IMPORT_BAZ, message.OptionalImportEnum);
  196. Assert.AreEqual("124", message.OptionalStringPiece);
  197. Assert.AreEqual("125", message.OptionalCord);
  198. // -----------------------------------------------------------------
  199. Assert.AreEqual(2, message.RepeatedInt32Count);
  200. Assert.AreEqual(2, message.RepeatedInt64Count);
  201. Assert.AreEqual(2, message.RepeatedUint32Count);
  202. Assert.AreEqual(2, message.RepeatedUint64Count);
  203. Assert.AreEqual(2, message.RepeatedSint32Count);
  204. Assert.AreEqual(2, message.RepeatedSint64Count);
  205. Assert.AreEqual(2, message.RepeatedFixed32Count);
  206. Assert.AreEqual(2, message.RepeatedFixed64Count);
  207. Assert.AreEqual(2, message.RepeatedSfixed32Count);
  208. Assert.AreEqual(2, message.RepeatedSfixed64Count);
  209. Assert.AreEqual(2, message.RepeatedFloatCount);
  210. Assert.AreEqual(2, message.RepeatedDoubleCount);
  211. Assert.AreEqual(2, message.RepeatedBoolCount);
  212. Assert.AreEqual(2, message.RepeatedStringCount);
  213. Assert.AreEqual(2, message.RepeatedBytesCount);
  214. Assert.AreEqual(2, message.RepeatedGroupCount );
  215. Assert.AreEqual(2, message.RepeatedNestedMessageCount );
  216. Assert.AreEqual(2, message.RepeatedForeignMessageCount);
  217. Assert.AreEqual(2, message.RepeatedImportMessageCount );
  218. Assert.AreEqual(2, message.RepeatedNestedEnumCount );
  219. Assert.AreEqual(2, message.RepeatedForeignEnumCount );
  220. Assert.AreEqual(2, message.RepeatedImportEnumCount );
  221. Assert.AreEqual(2, message.RepeatedStringPieceCount);
  222. Assert.AreEqual(2, message.RepeatedCordCount);
  223. Assert.AreEqual(201, message.GetRepeatedInt32(0));
  224. Assert.AreEqual(202, message.GetRepeatedInt64(0));
  225. Assert.AreEqual(203, message.GetRepeatedUint32(0));
  226. Assert.AreEqual(204, message.GetRepeatedUint64(0));
  227. Assert.AreEqual(205, message.GetRepeatedSint32(0));
  228. Assert.AreEqual(206, message.GetRepeatedSint64(0));
  229. Assert.AreEqual(207, message.GetRepeatedFixed32(0));
  230. Assert.AreEqual(208, message.GetRepeatedFixed64(0));
  231. Assert.AreEqual(209, message.GetRepeatedSfixed32(0));
  232. Assert.AreEqual(210, message.GetRepeatedSfixed64(0));
  233. Assert.AreEqual(211, message.GetRepeatedFloat(0));
  234. Assert.AreEqual(212, message.GetRepeatedDouble(0));
  235. Assert.AreEqual(true , message.GetRepeatedBool(0));
  236. Assert.AreEqual("215", message.GetRepeatedString(0));
  237. Assert.AreEqual(ToBytes("216"), message.GetRepeatedBytes(0));
  238. Assert.AreEqual(217, message.GetRepeatedGroup(0).A);
  239. Assert.AreEqual(218, message.GetRepeatedNestedMessage (0).Bb);
  240. Assert.AreEqual(219, message.GetRepeatedForeignMessage(0).C);
  241. Assert.AreEqual(220, message.GetRepeatedImportMessage (0).D);
  242. Assert.AreEqual(TestAllTypes.Types.NestedEnum.BAR, message.GetRepeatedNestedEnum (0));
  243. Assert.AreEqual(ForeignEnum.FOREIGN_BAR, message.GetRepeatedForeignEnum(0));
  244. Assert.AreEqual(ImportEnum.IMPORT_BAR, message.GetRepeatedImportEnum(0));
  245. Assert.AreEqual("224", message.GetRepeatedStringPiece(0));
  246. Assert.AreEqual("225", message.GetRepeatedCord(0));
  247. Assert.AreEqual(301, message.GetRepeatedInt32 (1));
  248. Assert.AreEqual(302, message.GetRepeatedInt64 (1));
  249. Assert.AreEqual(303, message.GetRepeatedUint32 (1));
  250. Assert.AreEqual(304, message.GetRepeatedUint64 (1));
  251. Assert.AreEqual(305, message.GetRepeatedSint32 (1));
  252. Assert.AreEqual(306, message.GetRepeatedSint64 (1));
  253. Assert.AreEqual(307, message.GetRepeatedFixed32 (1));
  254. Assert.AreEqual(308, message.GetRepeatedFixed64 (1));
  255. Assert.AreEqual(309, message.GetRepeatedSfixed32(1));
  256. Assert.AreEqual(310, message.GetRepeatedSfixed64(1));
  257. Assert.AreEqual(311, message.GetRepeatedFloat (1), 0.0);
  258. Assert.AreEqual(312, message.GetRepeatedDouble (1), 0.0);
  259. Assert.AreEqual(false, message.GetRepeatedBool (1));
  260. Assert.AreEqual("315", message.GetRepeatedString (1));
  261. Assert.AreEqual(ToBytes("316"), message.GetRepeatedBytes(1));
  262. Assert.AreEqual(317, message.GetRepeatedGroup (1).A);
  263. Assert.AreEqual(318, message.GetRepeatedNestedMessage (1).Bb);
  264. Assert.AreEqual(319, message.GetRepeatedForeignMessage(1).C);
  265. Assert.AreEqual(320, message.GetRepeatedImportMessage (1).D);
  266. Assert.AreEqual(TestAllTypes.Types.NestedEnum.BAZ, message.GetRepeatedNestedEnum (1));
  267. Assert.AreEqual(ForeignEnum.FOREIGN_BAZ, message.GetRepeatedForeignEnum(1));
  268. Assert.AreEqual(ImportEnum.IMPORT_BAZ, message.GetRepeatedImportEnum(1));
  269. Assert.AreEqual("324", message.GetRepeatedStringPiece(1));
  270. Assert.AreEqual("325", message.GetRepeatedCord(1));
  271. // -----------------------------------------------------------------
  272. Assert.IsTrue(message.HasDefaultInt32 );
  273. Assert.IsTrue(message.HasDefaultInt64 );
  274. Assert.IsTrue(message.HasDefaultUint32 );
  275. Assert.IsTrue(message.HasDefaultUint64 );
  276. Assert.IsTrue(message.HasDefaultSint32 );
  277. Assert.IsTrue(message.HasDefaultSint64 );
  278. Assert.IsTrue(message.HasDefaultFixed32 );
  279. Assert.IsTrue(message.HasDefaultFixed64 );
  280. Assert.IsTrue(message.HasDefaultSfixed32);
  281. Assert.IsTrue(message.HasDefaultSfixed64);
  282. Assert.IsTrue(message.HasDefaultFloat );
  283. Assert.IsTrue(message.HasDefaultDouble );
  284. Assert.IsTrue(message.HasDefaultBool );
  285. Assert.IsTrue(message.HasDefaultString );
  286. Assert.IsTrue(message.HasDefaultBytes );
  287. Assert.IsTrue(message.HasDefaultNestedEnum );
  288. Assert.IsTrue(message.HasDefaultForeignEnum);
  289. Assert.IsTrue(message.HasDefaultImportEnum );
  290. Assert.IsTrue(message.HasDefaultStringPiece);
  291. Assert.IsTrue(message.HasDefaultCord);
  292. Assert.AreEqual(401, message.DefaultInt32);
  293. Assert.AreEqual(402, message.DefaultInt64);
  294. Assert.AreEqual(403, message.DefaultUint32);
  295. Assert.AreEqual(404, message.DefaultUint64);
  296. Assert.AreEqual(405, message.DefaultSint32);
  297. Assert.AreEqual(406, message.DefaultSint64);
  298. Assert.AreEqual(407, message.DefaultFixed32);
  299. Assert.AreEqual(408, message.DefaultFixed64);
  300. Assert.AreEqual(409, message.DefaultSfixed32);
  301. Assert.AreEqual(410, message.DefaultSfixed64);
  302. Assert.AreEqual(411, message.DefaultFloat);
  303. Assert.AreEqual(412, message.DefaultDouble);
  304. Assert.AreEqual(false, message.DefaultBool );
  305. Assert.AreEqual("415", message.DefaultString );
  306. Assert.AreEqual(ToBytes("416"), message.DefaultBytes);
  307. Assert.AreEqual(TestAllTypes.Types.NestedEnum.FOO, message.DefaultNestedEnum);
  308. Assert.AreEqual(ForeignEnum.FOREIGN_FOO, message.DefaultForeignEnum);
  309. Assert.AreEqual(ImportEnum.IMPORT_FOO, message.DefaultImportEnum);
  310. Assert.AreEqual("424", message.DefaultStringPiece);
  311. Assert.AreEqual("425", message.DefaultCord);
  312. }
  313. }
  314. }