writer_test.js 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  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. /**
  31. * @fileoverview Test cases for jspb's binary protocol buffer writer. In
  32. * practice BinaryWriter is used to drive the Decoder and Reader test cases,
  33. * so only writer-specific tests are here.
  34. *
  35. * Test suite is written using Jasmine -- see http://jasmine.github.io/
  36. *
  37. * @author aappleby@google.com (Austin Appleby)
  38. */
  39. goog.require('goog.crypt');
  40. goog.require('goog.testing.asserts');
  41. goog.require('jspb.BinaryWriter');
  42. goog.requireType('jspb.BinaryMessage');
  43. /**
  44. * @param {function()} func This function should throw an error when run.
  45. */
  46. function assertFails(func) {
  47. var e = assertThrows(func);
  48. // assertNotNull(e.toString().match(/Error/));
  49. }
  50. describe('binaryWriterTest', function() {
  51. /**
  52. * Verifies that misuse of the writer class triggers assertions.
  53. */
  54. it('testWriteErrors', function() {
  55. // Submessages with invalid field indices should assert.
  56. var writer = new jspb.BinaryWriter();
  57. var dummyMessage = /** @type {!jspb.BinaryMessage} */ ({});
  58. assertFails(function() {
  59. writer.writeMessage(-1, dummyMessage, goog.nullFunction);
  60. });
  61. // Writing invalid field indices should assert.
  62. writer = new jspb.BinaryWriter();
  63. assertFails(function() {
  64. writer.writeUint64(-1, 1);
  65. });
  66. // Writing out-of-range field values should assert.
  67. writer = new jspb.BinaryWriter();
  68. assertFails(function() {
  69. writer.writeInt32(1, -Infinity);
  70. });
  71. assertFails(function() {
  72. writer.writeInt32(1, Infinity);
  73. });
  74. assertFails(function() {
  75. writer.writeInt64(1, -Infinity);
  76. });
  77. assertFails(function() {
  78. writer.writeInt64(1, Infinity);
  79. });
  80. assertFails(function() {
  81. writer.writeUint32(1, -1);
  82. });
  83. assertFails(function() {
  84. writer.writeUint32(1, Infinity);
  85. });
  86. assertFails(function() {
  87. writer.writeUint64(1, -1);
  88. });
  89. assertFails(function() {
  90. writer.writeUint64(1, Infinity);
  91. });
  92. assertFails(function() {
  93. writer.writeSint32(1, -Infinity);
  94. });
  95. assertFails(function() {
  96. writer.writeSint32(1, Infinity);
  97. });
  98. assertFails(function() {
  99. writer.writeSint64(1, -Infinity);
  100. });
  101. assertFails(function() {
  102. writer.writeSint64(1, Infinity);
  103. });
  104. assertFails(function() {
  105. writer.writeFixed32(1, -1);
  106. });
  107. assertFails(function() {
  108. writer.writeFixed32(1, Infinity);
  109. });
  110. assertFails(function() {
  111. writer.writeFixed64(1, -1);
  112. });
  113. assertFails(function() {
  114. writer.writeFixed64(1, Infinity);
  115. });
  116. assertFails(function() {
  117. writer.writeSfixed32(1, -Infinity);
  118. });
  119. assertFails(function() {
  120. writer.writeSfixed32(1, Infinity);
  121. });
  122. assertFails(function() {
  123. writer.writeSfixed64(1, -Infinity);
  124. });
  125. assertFails(function() {
  126. writer.writeSfixed64(1, Infinity);
  127. });
  128. });
  129. /**
  130. * Basic test of retrieving the result as a Uint8Array buffer
  131. */
  132. it('testGetResultBuffer', function() {
  133. var expected = '0864120b48656c6c6f20776f726c641a0301020320c801';
  134. var writer = new jspb.BinaryWriter();
  135. writer.writeUint32(1, 100);
  136. writer.writeString(2, 'Hello world');
  137. writer.writeBytes(3, new Uint8Array([1, 2, 3]));
  138. writer.writeUint32(4, 200);
  139. var buffer = writer.getResultBuffer();
  140. assertEquals(expected, goog.crypt.byteArrayToHex(buffer));
  141. });
  142. });