proto_test.js 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489
  1. // Protocol Buffers - Google's data interchange format
  2. // Copyright 2008 Google Inc. All rights reserved.
  3. // https://developers.google.com/protocol-buffers/
  4. //
  5. // Redistribution and use in source and binary forms, with or without
  6. // modification, are permitted provided that the following conditions are
  7. // met:
  8. //
  9. // * Redistributions of source code must retain the above copyright
  10. // notice, this list of conditions and the following disclaimer.
  11. // * Redistributions in binary form must reproduce the above
  12. // copyright notice, this list of conditions and the following disclaimer
  13. // in the documentation and/or other materials provided with the
  14. // distribution.
  15. // * Neither the name of Google Inc. nor the names of its
  16. // contributors may be used to endorse or promote products derived from
  17. // this software without specific prior written permission.
  18. //
  19. // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  20. // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  21. // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  22. // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  23. // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  24. // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  25. // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  26. // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  27. // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  28. // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  29. // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  30. // Test suite is written using Jasmine -- see http://jasmine.github.io/
  31. goog.require('goog.testing.asserts');
  32. // CommonJS-LoadFromFile: testbinary_pb
  33. goog.require('proto.jspb.test.ExtendsWithMessage');
  34. goog.require('proto.jspb.test.ForeignEnum');
  35. goog.require('proto.jspb.test.ForeignMessage');
  36. goog.require('proto.jspb.test.TestAllTypes');
  37. goog.require('proto.jspb.test.TestExtendable');
  38. var suite = {};
  39. /**
  40. * Helper: fill all fields on a TestAllTypes message.
  41. * @param {proto.jspb.test.TestAllTypes} msg
  42. */
  43. function fillAllFields(msg) {
  44. msg.setOptionalInt32(-42);
  45. // can be exactly represented by JS number (64-bit double, i.e., 52-bit
  46. // mantissa).
  47. msg.setOptionalInt64(-0x7fffffff00000000);
  48. msg.setOptionalUint32(0x80000000);
  49. msg.setOptionalUint64(0xf000000000000000);
  50. msg.setOptionalSint32(-100);
  51. msg.setOptionalSint64(-0x8000000000000000);
  52. msg.setOptionalFixed32(1234);
  53. msg.setOptionalFixed64(0x1234567800000000);
  54. msg.setOptionalSfixed32(-1234);
  55. msg.setOptionalSfixed64(-0x1234567800000000);
  56. msg.setOptionalFloat(1.5);
  57. msg.setOptionalDouble(-1.5);
  58. msg.setOptionalBool(true);
  59. msg.setOptionalString('hello world');
  60. msg.setOptionalBytes('bytes');
  61. msg.setOptionalGroup(new proto.jspb.test.TestAllTypes.OptionalGroup());
  62. msg.getOptionalGroup().setA(100);
  63. var submsg = new proto.jspb.test.ForeignMessage();
  64. submsg.setC(16);
  65. msg.setOptionalForeignMessage(submsg);
  66. msg.setOptionalForeignEnum(proto.jspb.test.ForeignEnum.FOREIGN_FOO);
  67. msg.setOneofString('oneof');
  68. msg.setRepeatedInt32List([-42]);
  69. msg.setRepeatedInt64List([-0x7fffffff00000000]);
  70. msg.setRepeatedUint32List([0x80000000]);
  71. msg.setRepeatedUint64List([0xf000000000000000]);
  72. msg.setRepeatedSint32List([-100]);
  73. msg.setRepeatedSint64List([-0x8000000000000000]);
  74. msg.setRepeatedFixed32List([1234]);
  75. msg.setRepeatedFixed64List([0x1234567800000000]);
  76. msg.setRepeatedSfixed32List([-1234]);
  77. msg.setRepeatedSfixed64List([-0x1234567800000000]);
  78. msg.setRepeatedFloatList([1.5]);
  79. msg.setRepeatedDoubleList([-1.5]);
  80. msg.setRepeatedBoolList([true]);
  81. msg.setRepeatedStringList(['hello world']);
  82. msg.setRepeatedBytesList(['bytes']);
  83. msg.setRepeatedGroupList([new proto.jspb.test.TestAllTypes.RepeatedGroup()]);
  84. msg.getRepeatedGroupList()[0].setA(100);
  85. submsg = new proto.jspb.test.ForeignMessage();
  86. submsg.setC(1000);
  87. msg.setRepeatedForeignMessageList([submsg]);
  88. msg.setRepeatedForeignEnumList([proto.jspb.test.ForeignEnum.FOREIGN_FOO]);
  89. msg.setPackedRepeatedInt32List([-42]);
  90. msg.setPackedRepeatedInt64List([-0x7fffffff00000000]);
  91. msg.setPackedRepeatedUint32List([0x80000000]);
  92. msg.setPackedRepeatedUint64List([0xf000000000000000]);
  93. msg.setPackedRepeatedSint32List([-100]);
  94. msg.setPackedRepeatedSint64List([-0x8000000000000000]);
  95. msg.setPackedRepeatedFixed32List([1234]);
  96. msg.setPackedRepeatedFixed64List([0x1234567800000000]);
  97. msg.setPackedRepeatedSfixed32List([-1234]);
  98. msg.setPackedRepeatedSfixed64List([-0x1234567800000000]);
  99. msg.setPackedRepeatedFloatList([1.5]);
  100. msg.setPackedRepeatedDoubleList([-1.5]);
  101. msg.setPackedRepeatedBoolList([true]);
  102. }
  103. /**
  104. * Helper: compare a bytes field to a string with codepoints 0--255.
  105. * @param {Uint8Array|string} arr
  106. * @param {string} str
  107. * @return {boolean}
  108. */
  109. function bytesCompare(arr, str) {
  110. if (arr.length != str.length) {
  111. return false;
  112. }
  113. if (typeof arr == 'string') {
  114. for (var i = 0; i < arr.length; i++) {
  115. if (arr.charCodeAt(i) != str.charCodeAt(i)) {
  116. return false;
  117. }
  118. }
  119. return true;
  120. } else {
  121. for (var i = 0; i < arr.length; i++) {
  122. if (arr[i] != str.charCodeAt(i)) {
  123. return false;
  124. }
  125. }
  126. return true;
  127. }
  128. }
  129. /**
  130. * Helper: verify contents of given TestAllTypes message as set by
  131. * fillAllFields().
  132. * @param {proto.jspb.test.TestAllTypes} msg
  133. */
  134. function checkAllFields(msg) {
  135. assertEquals(msg.getOptionalInt32(), -42);
  136. assertEquals(msg.getOptionalInt64(), -0x7fffffff00000000);
  137. assertEquals(msg.getOptionalUint32(), 0x80000000);
  138. assertEquals(msg.getOptionalUint64(), 0xf000000000000000);
  139. assertEquals(msg.getOptionalSint32(), -100);
  140. assertEquals(msg.getOptionalSint64(), -0x8000000000000000);
  141. assertEquals(msg.getOptionalFixed32(), 1234);
  142. assertEquals(msg.getOptionalFixed64(), 0x1234567800000000);
  143. assertEquals(msg.getOptionalSfixed32(), -1234);
  144. assertEquals(msg.getOptionalSfixed64(), -0x1234567800000000);
  145. assertEquals(msg.getOptionalFloat(), 1.5);
  146. assertEquals(msg.getOptionalDouble(), -1.5);
  147. assertEquals(msg.getOptionalBool(), true);
  148. assertEquals(msg.getOptionalString(), 'hello world');
  149. assertEquals(true, bytesCompare(msg.getOptionalBytes(), 'bytes'));
  150. assertEquals(msg.getOptionalGroup().getA(), 100);
  151. assertEquals(msg.getOptionalForeignMessage().getC(), 16);
  152. assertEquals(msg.getOptionalForeignEnum(),
  153. proto.jspb.test.ForeignEnum.FOREIGN_FOO);
  154. assertEquals(msg.getOneofString(), 'oneof');
  155. assertEquals(msg.getOneofFieldCase(),
  156. proto.jspb.test.TestAllTypes.OneofFieldCase.ONEOF_STRING);
  157. assertElementsEquals(msg.getRepeatedInt32List(), [-42]);
  158. assertElementsEquals(msg.getRepeatedInt64List(), [-0x7fffffff00000000]);
  159. assertElementsEquals(msg.getRepeatedUint32List(), [0x80000000]);
  160. assertElementsEquals(msg.getRepeatedUint64List(), [0xf000000000000000]);
  161. assertElementsEquals(msg.getRepeatedSint32List(), [-100]);
  162. assertElementsEquals(msg.getRepeatedSint64List(), [-0x8000000000000000]);
  163. assertElementsEquals(msg.getRepeatedFixed32List(), [1234]);
  164. assertElementsEquals(msg.getRepeatedFixed64List(), [0x1234567800000000]);
  165. assertElementsEquals(msg.getRepeatedSfixed32List(), [-1234]);
  166. assertElementsEquals(msg.getRepeatedSfixed64List(), [-0x1234567800000000]);
  167. assertElementsEquals(msg.getRepeatedFloatList(), [1.5]);
  168. assertElementsEquals(msg.getRepeatedDoubleList(), [-1.5]);
  169. assertElementsEquals(msg.getRepeatedBoolList(), [true]);
  170. assertElementsEquals(msg.getRepeatedStringList(), ['hello world']);
  171. assertEquals(msg.getRepeatedBytesList().length, 1);
  172. assertEquals(true, bytesCompare(msg.getRepeatedBytesList()[0], 'bytes'));
  173. assertEquals(msg.getRepeatedGroupList().length, 1);
  174. assertEquals(msg.getRepeatedGroupList()[0].getA(), 100);
  175. assertEquals(msg.getRepeatedForeignMessageList().length, 1);
  176. assertEquals(msg.getRepeatedForeignMessageList()[0].getC(), 1000);
  177. assertElementsEquals(msg.getRepeatedForeignEnumList(),
  178. [proto.jspb.test.ForeignEnum.FOREIGN_FOO]);
  179. assertElementsEquals(msg.getPackedRepeatedInt32List(), [-42]);
  180. assertElementsEquals(msg.getPackedRepeatedInt64List(),
  181. [-0x7fffffff00000000]);
  182. assertElementsEquals(msg.getPackedRepeatedUint32List(), [0x80000000]);
  183. assertElementsEquals(msg.getPackedRepeatedUint64List(), [0xf000000000000000]);
  184. assertElementsEquals(msg.getPackedRepeatedSint32List(), [-100]);
  185. assertElementsEquals(msg.getPackedRepeatedSint64List(),
  186. [-0x8000000000000000]);
  187. assertElementsEquals(msg.getPackedRepeatedFixed32List(), [1234]);
  188. assertElementsEquals(msg.getPackedRepeatedFixed64List(),
  189. [0x1234567800000000]);
  190. assertElementsEquals(msg.getPackedRepeatedSfixed32List(), [-1234]);
  191. assertElementsEquals(msg.getPackedRepeatedSfixed64List(),
  192. [-0x1234567800000000]);
  193. assertElementsEquals(msg.getPackedRepeatedFloatList(), [1.5]);
  194. assertElementsEquals(msg.getPackedRepeatedDoubleList(), [-1.5]);
  195. assertElementsEquals(msg.getPackedRepeatedBoolList(), [true]);
  196. }
  197. /**
  198. * Helper: verify that all expected extensions are present.
  199. * @param {!proto.jspb.test.TestExtendable} msg
  200. */
  201. function checkExtensions(msg) {
  202. assertEquals(-42,
  203. msg.getExtension(proto.jspb.test.extendOptionalInt32));
  204. assertEquals(-0x7fffffff00000000,
  205. msg.getExtension(proto.jspb.test.extendOptionalInt64));
  206. assertEquals(0x80000000,
  207. msg.getExtension(proto.jspb.test.extendOptionalUint32));
  208. assertEquals(0xf000000000000000,
  209. msg.getExtension(proto.jspb.test.extendOptionalUint64));
  210. assertEquals(-100,
  211. msg.getExtension(proto.jspb.test.extendOptionalSint32));
  212. assertEquals(-0x8000000000000000,
  213. msg.getExtension(proto.jspb.test.extendOptionalSint64));
  214. assertEquals(1234,
  215. msg.getExtension(proto.jspb.test.extendOptionalFixed32));
  216. assertEquals(0x1234567800000000,
  217. msg.getExtension(proto.jspb.test.extendOptionalFixed64));
  218. assertEquals(-1234,
  219. msg.getExtension(proto.jspb.test.extendOptionalSfixed32));
  220. assertEquals(-0x1234567800000000,
  221. msg.getExtension(proto.jspb.test.extendOptionalSfixed64));
  222. assertEquals(1.5,
  223. msg.getExtension(proto.jspb.test.extendOptionalFloat));
  224. assertEquals(-1.5,
  225. msg.getExtension(proto.jspb.test.extendOptionalDouble));
  226. assertEquals(true,
  227. msg.getExtension(proto.jspb.test.extendOptionalBool));
  228. assertEquals('hello world',
  229. msg.getExtension(proto.jspb.test.extendOptionalString));
  230. assertEquals(true,
  231. bytesCompare(msg.getExtension(proto.jspb.test.extendOptionalBytes),
  232. 'bytes'));
  233. assertEquals(16,
  234. msg.getExtension(
  235. proto.jspb.test.ExtendsWithMessage.optionalExtension).getFoo());
  236. assertEquals(proto.jspb.test.ForeignEnum.FOREIGN_FOO,
  237. msg.getExtension(proto.jspb.test.extendOptionalForeignEnum));
  238. assertElementsEquals(
  239. msg.getExtension(proto.jspb.test.extendRepeatedInt32List),
  240. [-42]);
  241. assertElementsEquals(
  242. msg.getExtension(proto.jspb.test.extendRepeatedInt64List),
  243. [-0x7fffffff00000000]);
  244. assertElementsEquals(
  245. msg.getExtension(proto.jspb.test.extendRepeatedUint32List),
  246. [0x80000000]);
  247. assertElementsEquals(
  248. msg.getExtension(proto.jspb.test.extendRepeatedUint64List),
  249. [0xf000000000000000]);
  250. assertElementsEquals(
  251. msg.getExtension(proto.jspb.test.extendRepeatedSint32List),
  252. [-100]);
  253. assertElementsEquals(
  254. msg.getExtension(proto.jspb.test.extendRepeatedSint64List),
  255. [-0x8000000000000000]);
  256. assertElementsEquals(
  257. msg.getExtension(proto.jspb.test.extendRepeatedFixed32List),
  258. [1234]);
  259. assertElementsEquals(
  260. msg.getExtension(proto.jspb.test.extendRepeatedFixed64List),
  261. [0x1234567800000000]);
  262. assertElementsEquals(
  263. msg.getExtension(proto.jspb.test.extendRepeatedSfixed32List),
  264. [-1234]);
  265. assertElementsEquals(
  266. msg.getExtension(proto.jspb.test.extendRepeatedSfixed64List),
  267. [-0x1234567800000000]);
  268. assertElementsEquals(
  269. msg.getExtension(proto.jspb.test.extendRepeatedFloatList),
  270. [1.5]);
  271. assertElementsEquals(
  272. msg.getExtension(proto.jspb.test.extendRepeatedDoubleList),
  273. [-1.5]);
  274. assertElementsEquals(
  275. msg.getExtension(proto.jspb.test.extendRepeatedBoolList),
  276. [true]);
  277. assertElementsEquals(
  278. msg.getExtension(proto.jspb.test.extendRepeatedStringList),
  279. ['hello world']);
  280. assertEquals(true,
  281. bytesCompare(
  282. msg.getExtension(proto.jspb.test.extendRepeatedBytesList)[0],
  283. 'bytes'));
  284. assertEquals(1000,
  285. msg.getExtension(
  286. proto.jspb.test.ExtendsWithMessage.repeatedExtensionList)[0]
  287. .getFoo());
  288. assertElementsEquals(
  289. msg.getExtension(proto.jspb.test.extendRepeatedForeignEnumList),
  290. [proto.jspb.test.ForeignEnum.FOREIGN_FOO]);
  291. assertElementsEquals(
  292. msg.getExtension(proto.jspb.test.extendPackedRepeatedInt32List),
  293. [-42]);
  294. assertElementsEquals(
  295. msg.getExtension(proto.jspb.test.extendPackedRepeatedInt64List),
  296. [-0x7fffffff00000000]);
  297. assertElementsEquals(
  298. msg.getExtension(proto.jspb.test.extendPackedRepeatedUint32List),
  299. [0x80000000]);
  300. assertElementsEquals(
  301. msg.getExtension(proto.jspb.test.extendPackedRepeatedUint64List),
  302. [0xf000000000000000]);
  303. assertElementsEquals(
  304. msg.getExtension(proto.jspb.test.extendPackedRepeatedSint32List),
  305. [-100]);
  306. assertElementsEquals(
  307. msg.getExtension(proto.jspb.test.extendPackedRepeatedSint64List),
  308. [-0x8000000000000000]);
  309. assertElementsEquals(
  310. msg.getExtension(proto.jspb.test.extendPackedRepeatedFixed32List),
  311. [1234]);
  312. assertElementsEquals(
  313. msg.getExtension(proto.jspb.test.extendPackedRepeatedFixed64List),
  314. [0x1234567800000000]);
  315. assertElementsEquals(
  316. msg.getExtension(proto.jspb.test.extendPackedRepeatedSfixed32List),
  317. [-1234]);
  318. assertElementsEquals(
  319. msg.getExtension(proto.jspb.test.extendPackedRepeatedSfixed64List),
  320. [-0x1234567800000000]);
  321. assertElementsEquals(
  322. msg.getExtension(proto.jspb.test.extendPackedRepeatedFloatList),
  323. [1.5]);
  324. assertElementsEquals(
  325. msg.getExtension(proto.jspb.test.extendPackedRepeatedDoubleList),
  326. [-1.5]);
  327. assertElementsEquals(
  328. msg.getExtension(proto.jspb.test.extendPackedRepeatedBoolList),
  329. [true]);
  330. assertElementsEquals(
  331. msg.getExtension(proto.jspb.test.extendPackedRepeatedForeignEnumList),
  332. [proto.jspb.test.ForeignEnum.FOREIGN_FOO]);
  333. }
  334. describe('protoBinaryTest', function() {
  335. /**
  336. * Tests a basic serialization-deserializaton round-trip with all supported
  337. * field types (on the TestAllTypes message type).
  338. */
  339. it('testRoundTrip', function() {
  340. var msg = new proto.jspb.test.TestAllTypes();
  341. fillAllFields(msg);
  342. var encoded = msg.serializeBinary();
  343. var decoded = proto.jspb.test.TestAllTypes.deserializeBinary(encoded);
  344. checkAllFields(decoded);
  345. });
  346. /**
  347. * Helper: fill all extension values.
  348. * @param {proto.jspb.test.TestExtendable} msg
  349. */
  350. function fillExtensions(msg) {
  351. msg.setExtension(
  352. proto.jspb.test.extendOptionalInt32, -42);
  353. msg.setExtension(
  354. proto.jspb.test.extendOptionalInt64, -0x7fffffff00000000);
  355. msg.setExtension(
  356. proto.jspb.test.extendOptionalUint32, 0x80000000);
  357. msg.setExtension(
  358. proto.jspb.test.extendOptionalUint64, 0xf000000000000000);
  359. msg.setExtension(
  360. proto.jspb.test.extendOptionalSint32, -100);
  361. msg.setExtension(
  362. proto.jspb.test.extendOptionalSint64, -0x8000000000000000);
  363. msg.setExtension(
  364. proto.jspb.test.extendOptionalFixed32, 1234);
  365. msg.setExtension(
  366. proto.jspb.test.extendOptionalFixed64, 0x1234567800000000);
  367. msg.setExtension(
  368. proto.jspb.test.extendOptionalSfixed32, -1234);
  369. msg.setExtension(
  370. proto.jspb.test.extendOptionalSfixed64, -0x1234567800000000);
  371. msg.setExtension(
  372. proto.jspb.test.extendOptionalFloat, 1.5);
  373. msg.setExtension(
  374. proto.jspb.test.extendOptionalDouble, -1.5);
  375. msg.setExtension(
  376. proto.jspb.test.extendOptionalBool, true);
  377. msg.setExtension(
  378. proto.jspb.test.extendOptionalString, 'hello world');
  379. msg.setExtension(
  380. proto.jspb.test.extendOptionalBytes, 'bytes');
  381. var submsg = new proto.jspb.test.ExtendsWithMessage();
  382. submsg.setFoo(16);
  383. msg.setExtension(
  384. proto.jspb.test.ExtendsWithMessage.optionalExtension, submsg);
  385. msg.setExtension(
  386. proto.jspb.test.extendOptionalForeignEnum,
  387. proto.jspb.test.ForeignEnum.FOREIGN_FOO);
  388. msg.setExtension(
  389. proto.jspb.test.extendRepeatedInt32List, [-42]);
  390. msg.setExtension(
  391. proto.jspb.test.extendRepeatedInt64List, [-0x7fffffff00000000]);
  392. msg.setExtension(
  393. proto.jspb.test.extendRepeatedUint32List, [0x80000000]);
  394. msg.setExtension(
  395. proto.jspb.test.extendRepeatedUint64List, [0xf000000000000000]);
  396. msg.setExtension(
  397. proto.jspb.test.extendRepeatedSint32List, [-100]);
  398. msg.setExtension(
  399. proto.jspb.test.extendRepeatedSint64List, [-0x8000000000000000]);
  400. msg.setExtension(
  401. proto.jspb.test.extendRepeatedFixed32List, [1234]);
  402. msg.setExtension(
  403. proto.jspb.test.extendRepeatedFixed64List, [0x1234567800000000]);
  404. msg.setExtension(
  405. proto.jspb.test.extendRepeatedSfixed32List, [-1234]);
  406. msg.setExtension(
  407. proto.jspb.test.extendRepeatedSfixed64List, [-0x1234567800000000]);
  408. msg.setExtension(
  409. proto.jspb.test.extendRepeatedFloatList, [1.5]);
  410. msg.setExtension(
  411. proto.jspb.test.extendRepeatedDoubleList, [-1.5]);
  412. msg.setExtension(
  413. proto.jspb.test.extendRepeatedBoolList, [true]);
  414. msg.setExtension(
  415. proto.jspb.test.extendRepeatedStringList, ['hello world']);
  416. msg.setExtension(
  417. proto.jspb.test.extendRepeatedBytesList, ['bytes']);
  418. submsg = new proto.jspb.test.ExtendsWithMessage();
  419. submsg.setFoo(1000);
  420. msg.setExtension(
  421. proto.jspb.test.ExtendsWithMessage.repeatedExtensionList, [submsg]);
  422. msg.setExtension(proto.jspb.test.extendRepeatedForeignEnumList,
  423. [proto.jspb.test.ForeignEnum.FOREIGN_FOO]);
  424. msg.setExtension(
  425. proto.jspb.test.extendPackedRepeatedInt32List, [-42]);
  426. msg.setExtension(
  427. proto.jspb.test.extendPackedRepeatedInt64List, [-0x7fffffff00000000]);
  428. msg.setExtension(
  429. proto.jspb.test.extendPackedRepeatedUint32List, [0x80000000]);
  430. msg.setExtension(
  431. proto.jspb.test.extendPackedRepeatedUint64List, [0xf000000000000000]);
  432. msg.setExtension(
  433. proto.jspb.test.extendPackedRepeatedSint32List, [-100]);
  434. msg.setExtension(
  435. proto.jspb.test.extendPackedRepeatedSint64List, [-0x8000000000000000]);
  436. msg.setExtension(
  437. proto.jspb.test.extendPackedRepeatedFixed32List, [1234]);
  438. msg.setExtension(
  439. proto.jspb.test.extendPackedRepeatedFixed64List, [0x1234567800000000]);
  440. msg.setExtension(
  441. proto.jspb.test.extendPackedRepeatedSfixed32List, [-1234]);
  442. msg.setExtension(
  443. proto.jspb.test.extendPackedRepeatedSfixed64List,
  444. [-0x1234567800000000]);
  445. msg.setExtension(
  446. proto.jspb.test.extendPackedRepeatedFloatList, [1.5]);
  447. msg.setExtension(
  448. proto.jspb.test.extendPackedRepeatedDoubleList, [-1.5]);
  449. msg.setExtension(
  450. proto.jspb.test.extendPackedRepeatedBoolList, [true]);
  451. msg.setExtension(proto.jspb.test.extendPackedRepeatedForeignEnumList,
  452. [proto.jspb.test.ForeignEnum.FOREIGN_FOO]);
  453. }
  454. /**
  455. * Tests extension serialization and deserialization.
  456. */
  457. it('testExtensions', function() {
  458. var msg = new proto.jspb.test.TestExtendable();
  459. fillExtensions(msg);
  460. var encoded = msg.serializeBinary();
  461. var decoded = proto.jspb.test.TestExtendable.deserializeBinary(encoded);
  462. checkExtensions(decoded);
  463. });
  464. });