/closure-library/closure/goog/proto2/pbliteserializer_test.html

https://github.com/illandril/box2dweb-closure · HTML · 267 lines · 226 code · 33 blank · 8 comment · 0 complexity · 39b8cc076fd99547a7cbb02aeb2de734 MD5 · raw file

  1. <!DOCTYPE html>
  2. <html>
  3. <!--
  4. Copyright 2008 The Closure Library Authors. All Rights Reserved.
  5. Use of this source code is governed by the Apache License, Version 2.0.
  6. See the COPYING file for details.
  7. -->
  8. <!--
  9. -->
  10. <head>
  11. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  12. <title>Closure Unit Tests - goog.proto2 - pbliteserializer.js</title>
  13. <script src="../base.js"></script>
  14. <script>
  15. goog.require('goog.proto2.PbLiteSerializer');
  16. goog.require('goog.testing.jsunit');
  17. goog.require('proto2.TestAllTypes');
  18. </script>
  19. </head>
  20. <body>
  21. <script>
  22. function testSerializationAndDeserialization() {
  23. var message = new proto2.TestAllTypes();
  24. // Set the fields.
  25. // Singular.
  26. message.setOptionalInt32(101);
  27. message.setOptionalInt64('102');
  28. message.setOptionalUint32(103);
  29. message.setOptionalUint64('104');
  30. message.setOptionalSint32(105);
  31. message.setOptionalSint64('106');
  32. message.setOptionalFixed32(107);
  33. message.setOptionalFixed64('108');
  34. message.setOptionalSfixed32(109);
  35. message.setOptionalSfixed64('110');
  36. message.setOptionalFloat(111.5);
  37. message.setOptionalDouble(112.5);
  38. message.setOptionalBool(true);
  39. message.setOptionalString('test');
  40. message.setOptionalBytes('abcd');
  41. var group = new proto2.TestAllTypes.OptionalGroup();
  42. group.setA(111);
  43. message.setOptionalgroup(group);
  44. var nestedMessage = new proto2.TestAllTypes.NestedMessage();
  45. nestedMessage.setB(112);
  46. message.setOptionalNestedMessage(nestedMessage);
  47. message.setOptionalNestedEnum(proto2.TestAllTypes.NestedEnum.FOO);
  48. // Repeated.
  49. message.addRepeatedInt32(201);
  50. message.addRepeatedInt32(202);
  51. // Skip a few repeated fields so we can test how null array values are
  52. // handled.
  53. message.addRepeatedString('foo');
  54. message.addRepeatedString('bar');
  55. // Serialize.
  56. var serializer = new goog.proto2.PbLiteSerializer();
  57. var pblite = serializer.serialize(message);
  58. assertTrue(goog.isArray(pblite));
  59. // Assert that everything serialized properly.
  60. assertEquals(101, pblite[1]);
  61. assertEquals('102', pblite[2]);
  62. assertEquals(103, pblite[3]);
  63. assertEquals('104', pblite[4]);
  64. assertEquals(105, pblite[5]);
  65. assertEquals('106', pblite[6]);
  66. assertEquals(107, pblite[7]);
  67. assertEquals('108', pblite[8]);
  68. assertEquals(109, pblite[9]);
  69. assertEquals('110', pblite[10]);
  70. assertEquals(111.5, pblite[11]);
  71. assertEquals(112.5, pblite[12]);
  72. assertEquals(1, pblite[13]); // true is serialized as 1
  73. assertEquals('test', pblite[14]);
  74. assertEquals('abcd', pblite[15]);
  75. assertEquals(111, pblite[16][17]);
  76. assertEquals(112, pblite[18][1]);
  77. assertTrue(pblite[19] === undefined);
  78. assertTrue(pblite[20] === undefined);
  79. assertEquals(proto2.TestAllTypes.NestedEnum.FOO, pblite[21]);
  80. assertEquals(201, pblite[31][0]);
  81. assertEquals(202, pblite[31][1]);
  82. assertEquals('foo', pblite[44][0]);
  83. assertEquals('bar', pblite[44][1]);
  84. var serializer = new goog.proto2.PbLiteSerializer();
  85. // Deserialize.
  86. var messageCopy =
  87. serializer.deserialize(proto2.TestAllTypes.getDescriptor(), pblite);
  88. assertNotEquals(messageCopy, message);
  89. assertDeserializationMatches(messageCopy);
  90. }
  91. function testDeserializationFromExternalSource() {
  92. // Test deserialization where the JSON array is initialized from something
  93. // outside the Closure proto2 library, such as the JsPbLite library, or
  94. // manually as in this test.
  95. var pblite = [
  96. , // 0
  97. 101, // 1
  98. '102', // 2
  99. 103, // 3
  100. '104', // 4
  101. 105, // 5
  102. '106', // 6
  103. 107, // 7
  104. '108', // 8
  105. 109, // 9
  106. '110', // 10
  107. 111.5, // 11
  108. 112.5, // 12
  109. 1, // 13
  110. 'test', // 14
  111. 'abcd', // 15
  112. [,,,,,,,,,,,,,,,,,111], // 16, note the 17 commas so value is index 17
  113. , // 17
  114. [,112], // 18
  115. ,, // 19-20
  116. proto2.TestAllTypes.NestedEnum.FOO, // 21
  117. ,,,,,,,,, // 22-30
  118. [201, 202], // 31
  119. ,,,,,,,,,,,, // 32-43
  120. ['foo', 'bar'], // 44
  121. ,,,, // 45-49
  122. ];
  123. var serializer = new goog.proto2.PbLiteSerializer();
  124. // Deserialize.
  125. var messageCopy =
  126. serializer.deserialize(proto2.TestAllTypes.getDescriptor(), pblite);
  127. assertDeserializationMatches(messageCopy);
  128. // http://b/issue?id=2928075
  129. assertFalse(messageCopy.hasRepeatedInt64());
  130. assertEquals(0, messageCopy.repeatedInt64Count());
  131. messageCopy.repeatedInt64Array();
  132. assertFalse(messageCopy.hasRepeatedInt64());
  133. assertEquals(0, messageCopy.repeatedInt64Count());
  134. }
  135. function assertDeserializationMatches(messageCopy) {
  136. assertNotNull(messageCopy);
  137. assertTrue(messageCopy.hasOptionalInt32());
  138. assertTrue(messageCopy.hasOptionalInt64());
  139. assertTrue(messageCopy.hasOptionalUint32());
  140. assertTrue(messageCopy.hasOptionalUint64());
  141. assertTrue(messageCopy.hasOptionalSint32());
  142. assertTrue(messageCopy.hasOptionalSint64());
  143. assertTrue(messageCopy.hasOptionalFixed32());
  144. assertTrue(messageCopy.hasOptionalFixed64());
  145. assertTrue(messageCopy.hasOptionalSfixed32());
  146. assertTrue(messageCopy.hasOptionalSfixed64());
  147. assertTrue(messageCopy.hasOptionalFloat());
  148. assertTrue(messageCopy.hasOptionalDouble());
  149. assertTrue(messageCopy.hasOptionalBool());
  150. assertTrue(messageCopy.hasOptionalString());
  151. assertTrue(messageCopy.hasOptionalBytes());
  152. assertTrue(messageCopy.hasOptionalgroup());
  153. assertTrue(messageCopy.hasOptionalNestedMessage());
  154. assertTrue(messageCopy.hasOptionalNestedEnum());
  155. assertTrue(messageCopy.hasRepeatedInt32());
  156. assertFalse(messageCopy.hasRepeatedInt64());
  157. assertFalse(messageCopy.hasRepeatedUint32());
  158. assertFalse(messageCopy.hasRepeatedUint64());
  159. assertFalse(messageCopy.hasRepeatedSint32());
  160. assertFalse(messageCopy.hasRepeatedSint64());
  161. assertFalse(messageCopy.hasRepeatedFixed32());
  162. assertFalse(messageCopy.hasRepeatedFixed64());
  163. assertFalse(messageCopy.hasRepeatedSfixed32());
  164. assertFalse(messageCopy.hasRepeatedSfixed64());
  165. assertFalse(messageCopy.hasRepeatedFloat());
  166. assertFalse(messageCopy.hasRepeatedDouble());
  167. assertFalse(messageCopy.hasRepeatedBool());
  168. assertTrue(messageCopy.hasRepeatedString());
  169. assertFalse(messageCopy.hasRepeatedBytes());
  170. assertFalse(messageCopy.hasRepeatedgroup());
  171. assertFalse(messageCopy.hasRepeatedNestedMessage());
  172. assertFalse(messageCopy.hasRepeatedNestedEnum());
  173. assertEquals(1, messageCopy.optionalInt32Count());
  174. assertEquals(1, messageCopy.optionalInt64Count());
  175. assertEquals(1, messageCopy.optionalUint32Count());
  176. assertEquals(1, messageCopy.optionalUint64Count());
  177. assertEquals(1, messageCopy.optionalSint32Count());
  178. assertEquals(1, messageCopy.optionalSint64Count());
  179. assertEquals(1, messageCopy.optionalFixed32Count());
  180. assertEquals(1, messageCopy.optionalFixed64Count());
  181. assertEquals(1, messageCopy.optionalSfixed32Count());
  182. assertEquals(1, messageCopy.optionalSfixed64Count());
  183. assertEquals(1, messageCopy.optionalFloatCount());
  184. assertEquals(1, messageCopy.optionalDoubleCount());
  185. assertEquals(1, messageCopy.optionalBoolCount());
  186. assertEquals(1, messageCopy.optionalStringCount());
  187. assertEquals(1, messageCopy.optionalBytesCount());
  188. assertEquals(1, messageCopy.optionalgroupCount());
  189. assertEquals(1, messageCopy.optionalNestedMessageCount());
  190. assertEquals(1, messageCopy.optionalNestedEnumCount());
  191. assertEquals(2, messageCopy.repeatedInt32Count());
  192. assertEquals(0, messageCopy.repeatedInt64Count());
  193. assertEquals(0, messageCopy.repeatedUint32Count());
  194. assertEquals(0, messageCopy.repeatedUint64Count());
  195. assertEquals(0, messageCopy.repeatedSint32Count());
  196. assertEquals(0, messageCopy.repeatedSint64Count());
  197. assertEquals(0, messageCopy.repeatedFixed32Count());
  198. assertEquals(0, messageCopy.repeatedFixed64Count());
  199. assertEquals(0, messageCopy.repeatedSfixed32Count());
  200. assertEquals(0, messageCopy.repeatedSfixed64Count());
  201. assertEquals(0, messageCopy.repeatedFloatCount());
  202. assertEquals(0, messageCopy.repeatedDoubleCount());
  203. assertEquals(0, messageCopy.repeatedBoolCount());
  204. assertEquals(2, messageCopy.repeatedStringCount());
  205. assertEquals(0, messageCopy.repeatedBytesCount());
  206. assertEquals(0, messageCopy.repeatedgroupCount());
  207. assertEquals(0, messageCopy.repeatedNestedMessageCount());
  208. assertEquals(0, messageCopy.repeatedNestedEnumCount());
  209. assertEquals(101, messageCopy.getOptionalInt32());
  210. assertEquals('102', messageCopy.getOptionalInt64());
  211. assertEquals(103, messageCopy.getOptionalUint32());
  212. assertEquals('104', messageCopy.getOptionalUint64());
  213. assertEquals(105, messageCopy.getOptionalSint32());
  214. assertEquals('106', messageCopy.getOptionalSint64());
  215. assertEquals(107, messageCopy.getOptionalFixed32());
  216. assertEquals('108', messageCopy.getOptionalFixed64());
  217. assertEquals(109, messageCopy.getOptionalSfixed32());
  218. assertEquals('110', messageCopy.getOptionalSfixed64());
  219. assertEquals(111.5, messageCopy.getOptionalFloat());
  220. assertEquals(112.5, messageCopy.getOptionalDouble());
  221. assertEquals(true, messageCopy.getOptionalBool());
  222. assertEquals('test', messageCopy.getOptionalString());
  223. assertEquals('abcd', messageCopy.getOptionalBytes());
  224. assertEquals(111, messageCopy.getOptionalgroup().getA());
  225. assertEquals(112, messageCopy.getOptionalNestedMessage().getB());
  226. assertEquals(proto2.TestAllTypes.NestedEnum.FOO,
  227. messageCopy.getOptionalNestedEnum());
  228. assertEquals(201, messageCopy.getRepeatedInt32(0));
  229. assertEquals(202, messageCopy.getRepeatedInt32(1));
  230. }
  231. </script>
  232. </body>
  233. </html>