proto_test.js 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588
  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. goog.require('proto.jspb.test.ExtendsWithMessage');
  33. goog.require('proto.jspb.test.ForeignEnum');
  34. goog.require('proto.jspb.test.ForeignMessage');
  35. goog.require('proto.jspb.test.TestAllTypes');
  36. goog.require('proto.jspb.test.TestExtendable');
  37. var suite = {};
  38. /**
  39. * Helper: fill all fields on a TestAllTypes message.
  40. * @param {proto.jspb.test.TestAllTypes} msg
  41. */
  42. function fillAllFields(msg) {
  43. msg.setOptionalInt32(-42);
  44. // can be exactly represented by JS number (64-bit double, i.e., 52-bit
  45. // mantissa).
  46. msg.setOptionalInt64(-0x7fffffff00000000);
  47. msg.setOptionalUint32(0x80000000);
  48. msg.setOptionalUint64(0xf000000000000000);
  49. msg.setOptionalSint32(-100);
  50. msg.setOptionalSint64(-0x8000000000000000);
  51. msg.setOptionalFixed32(1234);
  52. msg.setOptionalFixed64(0x1234567800000000);
  53. msg.setOptionalSfixed32(-1234);
  54. msg.setOptionalSfixed64(-0x1234567800000000);
  55. msg.setOptionalFloat(1.5);
  56. msg.setOptionalDouble(-1.5);
  57. msg.setOptionalBool(true);
  58. msg.setOptionalString('hello world');
  59. msg.setOptionalBytes('bytes');
  60. msg.setOptionalGroup(new proto.jspb.test.TestAllTypes.OptionalGroup());
  61. msg.getOptionalGroup().setA(100);
  62. var submsg = new proto.jspb.test.ForeignMessage();
  63. submsg.setC(16);
  64. msg.setOptionalForeignMessage(submsg);
  65. msg.setOptionalForeignEnum(proto.jspb.test.ForeignEnum.FOREIGN_FOO);
  66. msg.setOptionalInt32String('-12345');
  67. msg.setOptionalUint32String('12345');
  68. msg.setOptionalInt64String('-123456789012345');
  69. msg.setOptionalUint64String('987654321098765');
  70. msg.setOneofString('oneof');
  71. msg.setRepeatedInt32List([-42]);
  72. msg.setRepeatedInt64List([-0x7fffffff00000000]);
  73. msg.setRepeatedUint32List([0x80000000]);
  74. msg.setRepeatedUint64List([0xf000000000000000]);
  75. msg.setRepeatedSint32List([-100]);
  76. msg.setRepeatedSint64List([-0x8000000000000000]);
  77. msg.setRepeatedFixed32List([1234]);
  78. msg.setRepeatedFixed64List([0x1234567800000000]);
  79. msg.setRepeatedSfixed32List([-1234]);
  80. msg.setRepeatedSfixed64List([-0x1234567800000000]);
  81. msg.setRepeatedFloatList([1.5]);
  82. msg.setRepeatedDoubleList([-1.5]);
  83. msg.setRepeatedBoolList([true]);
  84. msg.setRepeatedStringList(['hello world']);
  85. msg.setRepeatedBytesList(['bytes']);
  86. msg.setRepeatedGroupList([new proto.jspb.test.TestAllTypes.RepeatedGroup()]);
  87. msg.getRepeatedGroupList()[0].setA(100);
  88. submsg = new proto.jspb.test.ForeignMessage();
  89. submsg.setC(1000);
  90. msg.setRepeatedForeignMessageList([submsg]);
  91. msg.setRepeatedForeignEnumList([proto.jspb.test.ForeignEnum.FOREIGN_FOO]);
  92. msg.setPackedRepeatedInt32List([-42]);
  93. msg.setPackedRepeatedInt64List([-0x7fffffff00000000]);
  94. msg.setPackedRepeatedUint32List([0x80000000]);
  95. msg.setPackedRepeatedUint64List([0xf000000000000000]);
  96. msg.setPackedRepeatedSint32List([-100]);
  97. msg.setPackedRepeatedSint64List([-0x8000000000000000]);
  98. msg.setPackedRepeatedFixed32List([1234]);
  99. msg.setPackedRepeatedFixed64List([0x1234567800000000]);
  100. msg.setPackedRepeatedSfixed32List([-1234]);
  101. msg.setPackedRepeatedSfixed64List([-0x1234567800000000]);
  102. msg.setPackedRepeatedFloatList([1.5]);
  103. msg.setPackedRepeatedDoubleList([-1.5]);
  104. msg.setPackedRepeatedBoolList([true]);
  105. msg.setRepeatedInt32StringList(['-12345']);
  106. msg.setRepeatedUint32StringList(['12345']);
  107. msg.setRepeatedInt64StringList(['-123456789012345']);
  108. msg.setRepeatedUint64StringList(['987654321098765']);
  109. msg.setPackedRepeatedInt32StringList(['-12345']);
  110. msg.setPackedRepeatedUint32StringList(['12345']);
  111. msg.setPackedRepeatedInt64StringList(['-123456789012345']);
  112. msg.setPackedRepeatedUint64StringList(['987654321098765']);
  113. }
  114. /**
  115. * Helper: compare a bytes field to a string with codepoints 0--255.
  116. * @param {Uint8Array|string} arr
  117. * @param {string} str
  118. * @return {boolean}
  119. */
  120. function bytesCompare(arr, str) {
  121. if (arr.length != str.length) {
  122. return false;
  123. }
  124. if (typeof arr == 'string') {
  125. for (var i = 0; i < arr.length; i++) {
  126. if (arr.charCodeAt(i) != str.charCodeAt(i)) {
  127. return false;
  128. }
  129. }
  130. return true;
  131. } else {
  132. for (var i = 0; i < arr.length; i++) {
  133. if (arr[i] != str.charCodeAt(i)) {
  134. return false;
  135. }
  136. }
  137. return true;
  138. }
  139. }
  140. /**
  141. * Helper: verify contents of given TestAllTypes message as set by
  142. * fillAllFields().
  143. * @param {proto.jspb.test.TestAllTypes} msg
  144. */
  145. function checkAllFields(msg) {
  146. assertEquals(msg.getOptionalInt32(), -42);
  147. assertEquals(msg.getOptionalInt64(), -0x7fffffff00000000);
  148. assertEquals(msg.getOptionalUint32(), 0x80000000);
  149. assertEquals(msg.getOptionalUint64(), 0xf000000000000000);
  150. assertEquals(msg.getOptionalSint32(), -100);
  151. assertEquals(msg.getOptionalSint64(), -0x8000000000000000);
  152. assertEquals(msg.getOptionalFixed32(), 1234);
  153. assertEquals(msg.getOptionalFixed64(), 0x1234567800000000);
  154. assertEquals(msg.getOptionalSfixed32(), -1234);
  155. assertEquals(msg.getOptionalSfixed64(), -0x1234567800000000);
  156. assertEquals(msg.getOptionalFloat(), 1.5);
  157. assertEquals(msg.getOptionalDouble(), -1.5);
  158. assertEquals(msg.getOptionalBool(), true);
  159. assertEquals(msg.getOptionalString(), 'hello world');
  160. assertEquals(true, bytesCompare(msg.getOptionalBytes(), 'bytes'));
  161. assertEquals(msg.getOptionalGroup().getA(), 100);
  162. assertEquals(msg.getOptionalForeignMessage().getC(), 16);
  163. assertEquals(msg.getOptionalForeignEnum(),
  164. proto.jspb.test.ForeignEnum.FOREIGN_FOO);
  165. assertEquals(msg.getOptionalInt32String(), '-12345');
  166. assertEquals(msg.getOptionalUint32String(), '12345');
  167. assertEquals(msg.getOptionalInt64String(), '-123456789012345');
  168. assertEquals(msg.getOptionalUint64String(), '987654321098765');
  169. assertEquals(msg.getOneofString(), 'oneof');
  170. assertEquals(msg.getOneofFieldCase(),
  171. proto.jspb.test.TestAllTypes.OneofFieldCase.ONEOF_STRING);
  172. assertElementsEquals(msg.getRepeatedInt32List(), [-42]);
  173. assertElementsEquals(msg.getRepeatedInt64List(), [-0x7fffffff00000000]);
  174. assertElementsEquals(msg.getRepeatedUint32List(), [0x80000000]);
  175. assertElementsEquals(msg.getRepeatedUint64List(), [0xf000000000000000]);
  176. assertElementsEquals(msg.getRepeatedSint32List(), [-100]);
  177. assertElementsEquals(msg.getRepeatedSint64List(), [-0x8000000000000000]);
  178. assertElementsEquals(msg.getRepeatedFixed32List(), [1234]);
  179. assertElementsEquals(msg.getRepeatedFixed64List(), [0x1234567800000000]);
  180. assertElementsEquals(msg.getRepeatedSfixed32List(), [-1234]);
  181. assertElementsEquals(msg.getRepeatedSfixed64List(), [-0x1234567800000000]);
  182. assertElementsEquals(msg.getRepeatedFloatList(), [1.5]);
  183. assertElementsEquals(msg.getRepeatedDoubleList(), [-1.5]);
  184. assertElementsEquals(msg.getRepeatedBoolList(), [true]);
  185. assertElementsEquals(msg.getRepeatedStringList(), ['hello world']);
  186. assertEquals(msg.getRepeatedBytesList().length, 1);
  187. assertEquals(true, bytesCompare(msg.getRepeatedBytesList()[0], 'bytes'));
  188. assertEquals(msg.getRepeatedGroupList().length, 1);
  189. assertEquals(msg.getRepeatedGroupList()[0].getA(), 100);
  190. assertEquals(msg.getRepeatedForeignMessageList().length, 1);
  191. assertEquals(msg.getRepeatedForeignMessageList()[0].getC(), 1000);
  192. assertElementsEquals(msg.getRepeatedForeignEnumList(),
  193. [proto.jspb.test.ForeignEnum.FOREIGN_FOO]);
  194. assertElementsEquals(msg.getPackedRepeatedInt32List(), [-42]);
  195. assertElementsEquals(msg.getPackedRepeatedInt64List(),
  196. [-0x7fffffff00000000]);
  197. assertElementsEquals(msg.getPackedRepeatedUint32List(), [0x80000000]);
  198. assertElementsEquals(msg.getPackedRepeatedUint64List(), [0xf000000000000000]);
  199. assertElementsEquals(msg.getPackedRepeatedSint32List(), [-100]);
  200. assertElementsEquals(msg.getPackedRepeatedSint64List(),
  201. [-0x8000000000000000]);
  202. assertElementsEquals(msg.getPackedRepeatedFixed32List(), [1234]);
  203. assertElementsEquals(msg.getPackedRepeatedFixed64List(),
  204. [0x1234567800000000]);
  205. assertElementsEquals(msg.getPackedRepeatedSfixed32List(), [-1234]);
  206. assertElementsEquals(msg.getPackedRepeatedSfixed64List(),
  207. [-0x1234567800000000]);
  208. assertElementsEquals(msg.getPackedRepeatedFloatList(), [1.5]);
  209. assertElementsEquals(msg.getPackedRepeatedDoubleList(), [-1.5]);
  210. assertElementsEquals(msg.getPackedRepeatedBoolList(), [true]);
  211. assertEquals(msg.getRepeatedInt32StringList().length, 1);
  212. assertElementsEquals(msg.getRepeatedInt32StringList(), ['-12345']);
  213. assertEquals(msg.getRepeatedUint32StringList().length, 1);
  214. assertElementsEquals(msg.getRepeatedUint32StringList(), ['12345']);
  215. assertEquals(msg.getRepeatedInt64StringList().length, 1);
  216. assertElementsEquals(msg.getRepeatedInt64StringList(), ['-123456789012345']);
  217. assertEquals(msg.getRepeatedUint64StringList().length, 1);
  218. assertElementsEquals(msg.getRepeatedUint64StringList(), ['987654321098765']);
  219. assertEquals(msg.getPackedRepeatedInt32StringList().length, 1);
  220. assertElementsEquals(msg.getPackedRepeatedInt32StringList(), ['-12345']);
  221. assertEquals(msg.getPackedRepeatedUint32StringList().length, 1);
  222. assertElementsEquals(msg.getPackedRepeatedUint32StringList(), ['12345']);
  223. assertEquals(msg.getPackedRepeatedInt64StringList().length, 1);
  224. assertElementsEquals(msg.getPackedRepeatedInt64StringList(),
  225. ['-123456789012345']);
  226. assertEquals(msg.getPackedRepeatedUint64StringList().length, 1);
  227. assertElementsEquals(msg.getPackedRepeatedUint64StringList(),
  228. ['987654321098765']);
  229. }
  230. /**
  231. * Helper: verify that all expected extensions are present.
  232. * @param {!proto.jspb.test.TestExtendable} msg
  233. */
  234. function checkExtensions(msg) {
  235. assertEquals(-42,
  236. msg.getExtension(proto.jspb.test.extendOptionalInt32));
  237. assertEquals(-0x7fffffff00000000,
  238. msg.getExtension(proto.jspb.test.extendOptionalInt64));
  239. assertEquals(0x80000000,
  240. msg.getExtension(proto.jspb.test.extendOptionalUint32));
  241. assertEquals(0xf000000000000000,
  242. msg.getExtension(proto.jspb.test.extendOptionalUint64));
  243. assertEquals(-100,
  244. msg.getExtension(proto.jspb.test.extendOptionalSint32));
  245. assertEquals(-0x8000000000000000,
  246. msg.getExtension(proto.jspb.test.extendOptionalSint64));
  247. assertEquals(1234,
  248. msg.getExtension(proto.jspb.test.extendOptionalFixed32));
  249. assertEquals(0x1234567800000000,
  250. msg.getExtension(proto.jspb.test.extendOptionalFixed64));
  251. assertEquals(-1234,
  252. msg.getExtension(proto.jspb.test.extendOptionalSfixed32));
  253. assertEquals(-0x1234567800000000,
  254. msg.getExtension(proto.jspb.test.extendOptionalSfixed64));
  255. assertEquals(1.5,
  256. msg.getExtension(proto.jspb.test.extendOptionalFloat));
  257. assertEquals(-1.5,
  258. msg.getExtension(proto.jspb.test.extendOptionalDouble));
  259. assertEquals(true,
  260. msg.getExtension(proto.jspb.test.extendOptionalBool));
  261. assertEquals('hello world',
  262. msg.getExtension(proto.jspb.test.extendOptionalString));
  263. assertEquals(true,
  264. bytesCompare(msg.getExtension(proto.jspb.test.extendOptionalBytes),
  265. 'bytes'));
  266. assertEquals(16,
  267. msg.getExtension(
  268. proto.jspb.test.ExtendsWithMessage.optionalExtension).getFoo());
  269. assertEquals(proto.jspb.test.ForeignEnum.FOREIGN_FOO,
  270. msg.getExtension(proto.jspb.test.extendOptionalForeignEnum));
  271. assertEquals('-12345',
  272. msg.getExtension(proto.jspb.test.extendOptionalInt32String));
  273. assertEquals('12345',
  274. msg.getExtension(proto.jspb.test.extendOptionalUint32String));
  275. assertEquals('-123456789012345',
  276. msg.getExtension(proto.jspb.test.extendOptionalInt64String));
  277. assertEquals('987654321098765',
  278. msg.getExtension(proto.jspb.test.extendOptionalUint64String));
  279. assertElementsEquals(
  280. msg.getExtension(proto.jspb.test.extendRepeatedInt32List),
  281. [-42]);
  282. assertElementsEquals(
  283. msg.getExtension(proto.jspb.test.extendRepeatedInt64List),
  284. [-0x7fffffff00000000]);
  285. assertElementsEquals(
  286. msg.getExtension(proto.jspb.test.extendRepeatedUint32List),
  287. [0x80000000]);
  288. assertElementsEquals(
  289. msg.getExtension(proto.jspb.test.extendRepeatedUint64List),
  290. [0xf000000000000000]);
  291. assertElementsEquals(
  292. msg.getExtension(proto.jspb.test.extendRepeatedSint32List),
  293. [-100]);
  294. assertElementsEquals(
  295. msg.getExtension(proto.jspb.test.extendRepeatedSint64List),
  296. [-0x8000000000000000]);
  297. assertElementsEquals(
  298. msg.getExtension(proto.jspb.test.extendRepeatedFixed32List),
  299. [1234]);
  300. assertElementsEquals(
  301. msg.getExtension(proto.jspb.test.extendRepeatedFixed64List),
  302. [0x1234567800000000]);
  303. assertElementsEquals(
  304. msg.getExtension(proto.jspb.test.extendRepeatedSfixed32List),
  305. [-1234]);
  306. assertElementsEquals(
  307. msg.getExtension(proto.jspb.test.extendRepeatedSfixed64List),
  308. [-0x1234567800000000]);
  309. assertElementsEquals(
  310. msg.getExtension(proto.jspb.test.extendRepeatedFloatList),
  311. [1.5]);
  312. assertElementsEquals(
  313. msg.getExtension(proto.jspb.test.extendRepeatedDoubleList),
  314. [-1.5]);
  315. assertElementsEquals(
  316. msg.getExtension(proto.jspb.test.extendRepeatedBoolList),
  317. [true]);
  318. assertElementsEquals(
  319. msg.getExtension(proto.jspb.test.extendRepeatedStringList),
  320. ['hello world']);
  321. assertEquals(true,
  322. bytesCompare(
  323. msg.getExtension(proto.jspb.test.extendRepeatedBytesList)[0],
  324. 'bytes'));
  325. assertEquals(1000,
  326. msg.getExtension(
  327. proto.jspb.test.ExtendsWithMessage.repeatedExtensionList)[0]
  328. .getFoo());
  329. assertElementsEquals(
  330. msg.getExtension(proto.jspb.test.extendRepeatedForeignEnumList),
  331. [proto.jspb.test.ForeignEnum.FOREIGN_FOO]);
  332. assertElementsEquals(
  333. msg.getExtension(proto.jspb.test.extendRepeatedInt32StringList),
  334. ['-12345']);
  335. assertElementsEquals(
  336. msg.getExtension(proto.jspb.test.extendRepeatedUint32StringList),
  337. ['12345']);
  338. assertElementsEquals(
  339. msg.getExtension(proto.jspb.test.extendRepeatedInt64StringList),
  340. ['-123456789012345']);
  341. assertElementsEquals(
  342. msg.getExtension(proto.jspb.test.extendRepeatedUint64StringList),
  343. ['987654321098765']);
  344. assertElementsEquals(
  345. msg.getExtension(proto.jspb.test.extendPackedRepeatedInt32List),
  346. [-42]);
  347. assertElementsEquals(
  348. msg.getExtension(proto.jspb.test.extendPackedRepeatedInt64List),
  349. [-0x7fffffff00000000]);
  350. assertElementsEquals(
  351. msg.getExtension(proto.jspb.test.extendPackedRepeatedUint32List),
  352. [0x80000000]);
  353. assertElementsEquals(
  354. msg.getExtension(proto.jspb.test.extendPackedRepeatedUint64List),
  355. [0xf000000000000000]);
  356. assertElementsEquals(
  357. msg.getExtension(proto.jspb.test.extendPackedRepeatedSint32List),
  358. [-100]);
  359. assertElementsEquals(
  360. msg.getExtension(proto.jspb.test.extendPackedRepeatedSint64List),
  361. [-0x8000000000000000]);
  362. assertElementsEquals(
  363. msg.getExtension(proto.jspb.test.extendPackedRepeatedFixed32List),
  364. [1234]);
  365. assertElementsEquals(
  366. msg.getExtension(proto.jspb.test.extendPackedRepeatedFixed64List),
  367. [0x1234567800000000]);
  368. assertElementsEquals(
  369. msg.getExtension(proto.jspb.test.extendPackedRepeatedSfixed32List),
  370. [-1234]);
  371. assertElementsEquals(
  372. msg.getExtension(proto.jspb.test.extendPackedRepeatedSfixed64List),
  373. [-0x1234567800000000]);
  374. assertElementsEquals(
  375. msg.getExtension(proto.jspb.test.extendPackedRepeatedFloatList),
  376. [1.5]);
  377. assertElementsEquals(
  378. msg.getExtension(proto.jspb.test.extendPackedRepeatedDoubleList),
  379. [-1.5]);
  380. assertElementsEquals(
  381. msg.getExtension(proto.jspb.test.extendPackedRepeatedBoolList),
  382. [true]);
  383. assertElementsEquals(
  384. msg.getExtension(proto.jspb.test.extendPackedRepeatedForeignEnumList),
  385. [proto.jspb.test.ForeignEnum.FOREIGN_FOO]);
  386. assertElementsEquals(
  387. msg.getExtension(proto.jspb.test.extendPackedRepeatedInt32StringList),
  388. ['-12345']);
  389. assertElementsEquals(
  390. msg.getExtension(proto.jspb.test.extendPackedRepeatedUint32StringList),
  391. ['12345']);
  392. assertElementsEquals(
  393. msg.getExtension(proto.jspb.test.extendPackedRepeatedInt64StringList),
  394. ['-123456789012345']);
  395. assertElementsEquals(
  396. msg.getExtension(proto.jspb.test.extendPackedRepeatedUint64StringList),
  397. ['987654321098765']);
  398. }
  399. describe('protoBinaryTest', function() {
  400. /**
  401. * Tests a basic serialization-deserializaton round-trip with all supported
  402. * field types (on the TestAllTypes message type).
  403. */
  404. it('testRoundTrip', function() {
  405. var msg = new proto.jspb.test.TestAllTypes();
  406. fillAllFields(msg);
  407. var encoded = msg.serializeBinary();
  408. var decoded = proto.jspb.test.TestAllTypes.deserializeBinary(encoded);
  409. checkAllFields(decoded);
  410. });
  411. /**
  412. * Helper: fill all extension values.
  413. * @param {proto.jspb.test.TestExtendable} msg
  414. */
  415. function fillExtensions(msg) {
  416. msg.setExtension(
  417. proto.jspb.test.extendOptionalInt32, -42);
  418. msg.setExtension(
  419. proto.jspb.test.extendOptionalInt64, -0x7fffffff00000000);
  420. msg.setExtension(
  421. proto.jspb.test.extendOptionalUint32, 0x80000000);
  422. msg.setExtension(
  423. proto.jspb.test.extendOptionalUint64, 0xf000000000000000);
  424. msg.setExtension(
  425. proto.jspb.test.extendOptionalSint32, -100);
  426. msg.setExtension(
  427. proto.jspb.test.extendOptionalSint64, -0x8000000000000000);
  428. msg.setExtension(
  429. proto.jspb.test.extendOptionalFixed32, 1234);
  430. msg.setExtension(
  431. proto.jspb.test.extendOptionalFixed64, 0x1234567800000000);
  432. msg.setExtension(
  433. proto.jspb.test.extendOptionalSfixed32, -1234);
  434. msg.setExtension(
  435. proto.jspb.test.extendOptionalSfixed64, -0x1234567800000000);
  436. msg.setExtension(
  437. proto.jspb.test.extendOptionalFloat, 1.5);
  438. msg.setExtension(
  439. proto.jspb.test.extendOptionalDouble, -1.5);
  440. msg.setExtension(
  441. proto.jspb.test.extendOptionalBool, true);
  442. msg.setExtension(
  443. proto.jspb.test.extendOptionalString, 'hello world');
  444. msg.setExtension(
  445. proto.jspb.test.extendOptionalBytes, 'bytes');
  446. var submsg = new proto.jspb.test.ExtendsWithMessage();
  447. submsg.setFoo(16);
  448. msg.setExtension(
  449. proto.jspb.test.ExtendsWithMessage.optionalExtension, submsg);
  450. msg.setExtension(
  451. proto.jspb.test.extendOptionalForeignEnum,
  452. proto.jspb.test.ForeignEnum.FOREIGN_FOO);
  453. msg.setExtension(
  454. proto.jspb.test.extendOptionalInt32String, '-12345');
  455. msg.setExtension(
  456. proto.jspb.test.extendOptionalUint32String, '12345');
  457. msg.setExtension(
  458. proto.jspb.test.extendOptionalInt64String, '-123456789012345');
  459. msg.setExtension(
  460. proto.jspb.test.extendOptionalUint64String, '987654321098765');
  461. msg.setExtension(
  462. proto.jspb.test.extendRepeatedInt32List, [-42]);
  463. msg.setExtension(
  464. proto.jspb.test.extendRepeatedInt64List, [-0x7fffffff00000000]);
  465. msg.setExtension(
  466. proto.jspb.test.extendRepeatedUint32List, [0x80000000]);
  467. msg.setExtension(
  468. proto.jspb.test.extendRepeatedUint64List, [0xf000000000000000]);
  469. msg.setExtension(
  470. proto.jspb.test.extendRepeatedSint32List, [-100]);
  471. msg.setExtension(
  472. proto.jspb.test.extendRepeatedSint64List, [-0x8000000000000000]);
  473. msg.setExtension(
  474. proto.jspb.test.extendRepeatedFixed32List, [1234]);
  475. msg.setExtension(
  476. proto.jspb.test.extendRepeatedFixed64List, [0x1234567800000000]);
  477. msg.setExtension(
  478. proto.jspb.test.extendRepeatedSfixed32List, [-1234]);
  479. msg.setExtension(
  480. proto.jspb.test.extendRepeatedSfixed64List, [-0x1234567800000000]);
  481. msg.setExtension(
  482. proto.jspb.test.extendRepeatedFloatList, [1.5]);
  483. msg.setExtension(
  484. proto.jspb.test.extendRepeatedDoubleList, [-1.5]);
  485. msg.setExtension(
  486. proto.jspb.test.extendRepeatedBoolList, [true]);
  487. msg.setExtension(
  488. proto.jspb.test.extendRepeatedStringList, ['hello world']);
  489. msg.setExtension(
  490. proto.jspb.test.extendRepeatedBytesList, ['bytes']);
  491. submsg = new proto.jspb.test.ExtendsWithMessage();
  492. submsg.setFoo(1000);
  493. msg.setExtension(
  494. proto.jspb.test.ExtendsWithMessage.repeatedExtensionList, [submsg]);
  495. msg.setExtension(proto.jspb.test.extendRepeatedForeignEnumList,
  496. [proto.jspb.test.ForeignEnum.FOREIGN_FOO]);
  497. msg.setExtension(
  498. proto.jspb.test.extendRepeatedInt32StringList, ['-12345']);
  499. msg.setExtension(
  500. proto.jspb.test.extendRepeatedUint32StringList, ['12345']);
  501. msg.setExtension(
  502. proto.jspb.test.extendRepeatedInt64StringList, ['-123456789012345']);
  503. msg.setExtension(
  504. proto.jspb.test.extendRepeatedUint64StringList, ['987654321098765']);
  505. msg.setExtension(
  506. proto.jspb.test.extendPackedRepeatedInt32List, [-42]);
  507. msg.setExtension(
  508. proto.jspb.test.extendPackedRepeatedInt64List, [-0x7fffffff00000000]);
  509. msg.setExtension(
  510. proto.jspb.test.extendPackedRepeatedUint32List, [0x80000000]);
  511. msg.setExtension(
  512. proto.jspb.test.extendPackedRepeatedUint64List, [0xf000000000000000]);
  513. msg.setExtension(
  514. proto.jspb.test.extendPackedRepeatedSint32List, [-100]);
  515. msg.setExtension(
  516. proto.jspb.test.extendPackedRepeatedSint64List, [-0x8000000000000000]);
  517. msg.setExtension(
  518. proto.jspb.test.extendPackedRepeatedFixed32List, [1234]);
  519. msg.setExtension(
  520. proto.jspb.test.extendPackedRepeatedFixed64List, [0x1234567800000000]);
  521. msg.setExtension(
  522. proto.jspb.test.extendPackedRepeatedSfixed32List, [-1234]);
  523. msg.setExtension(
  524. proto.jspb.test.extendPackedRepeatedSfixed64List,
  525. [-0x1234567800000000]);
  526. msg.setExtension(
  527. proto.jspb.test.extendPackedRepeatedFloatList, [1.5]);
  528. msg.setExtension(
  529. proto.jspb.test.extendPackedRepeatedDoubleList, [-1.5]);
  530. msg.setExtension(
  531. proto.jspb.test.extendPackedRepeatedBoolList, [true]);
  532. msg.setExtension(proto.jspb.test.extendPackedRepeatedForeignEnumList,
  533. [proto.jspb.test.ForeignEnum.FOREIGN_FOO]);
  534. msg.setExtension(
  535. proto.jspb.test.extendPackedRepeatedInt32StringList,
  536. ['-12345']);
  537. msg.setExtension(
  538. proto.jspb.test.extendPackedRepeatedUint32StringList,
  539. ['12345']);
  540. msg.setExtension(
  541. proto.jspb.test.extendPackedRepeatedInt64StringList,
  542. ['-123456789012345']);
  543. msg.setExtension(
  544. proto.jspb.test.extendPackedRepeatedUint64StringList,
  545. ['987654321098765']);
  546. }
  547. /**
  548. * Tests extension serialization and deserialization.
  549. */
  550. it('testExtensions', function() {
  551. var msg = new proto.jspb.test.TestExtendable();
  552. fillExtensions(msg);
  553. var encoded = msg.serializeBinary();
  554. var decoded = proto.jspb.test.TestExtendable.deserializeBinary(encoded);
  555. checkExtensions(decoded);
  556. });
  557. });