Index: third_party/protobuf/js/binary/reader_test.js |
diff --git a/third_party/protobuf/js/binary/reader_test.js b/third_party/protobuf/js/binary/reader_test.js |
index 6f7e5d4567d12aef9508f3dcb03332ad73f9cb06..957113859e5d2e765717d7cd8d2455d37a542537 100644 |
--- a/third_party/protobuf/js/binary/reader_test.js |
+++ b/third_party/protobuf/js/binary/reader_test.js |
@@ -52,9 +52,8 @@ goog.require('jspb.BinaryWriter'); |
describe('binaryReaderTest', function() { |
/** |
* Tests the reader instance cache. |
- * @suppress {visibility} |
*/ |
- it('testInstanceCaches', function() { |
+ it('testInstanceCaches', /** @suppress {visibility} */ function() { |
var writer = new jspb.BinaryWriter(); |
var dummyMessage = /** @type {!jspb.BinaryMessage} */({}); |
writer.writeMessage(1, dummyMessage, goog.nullFunction); |
@@ -131,9 +130,8 @@ describe('binaryReaderTest', function() { |
/** |
* Verifies that misuse of the reader class triggers assertions. |
- * @suppress {checkTypes|visibility} |
*/ |
- it('testReadErrors', function() { |
+ it('testReadErrors', /** @suppress {checkTypes|visibility} */ function() { |
// Calling readMessage on a non-delimited field should trigger an |
// assertion. |
var reader = jspb.BinaryReader.alloc([8, 1]); |
@@ -200,7 +198,7 @@ describe('binaryReaderTest', function() { |
* @private |
* @suppress {missingProperties} |
*/ |
- function doTestUnsignedField_(readField, |
+ var doTestUnsignedField_ = function(readField, |
writeField, epsilon, upperLimit, filter) { |
assertNotNull(readField); |
assertNotNull(writeField); |
@@ -252,7 +250,7 @@ describe('binaryReaderTest', function() { |
* @private |
* @suppress {missingProperties} |
*/ |
- function doTestSignedField_(readField, |
+ var doTestSignedField_ = function(readField, |
writeField, epsilon, lowerLimit, upperLimit, filter) { |
var writer = new jspb.BinaryWriter(); |
@@ -321,12 +319,12 @@ describe('binaryReaderTest', function() { |
* Tests fields that use varint encoding. |
*/ |
it('testVarintFields', function() { |
- assertNotNull(jspb.BinaryReader.prototype.readUint32); |
- assertNotNull(jspb.BinaryReader.prototype.writeUint32); |
- assertNotNull(jspb.BinaryReader.prototype.readUint64); |
- assertNotNull(jspb.BinaryReader.prototype.writeUint64); |
- assertNotNull(jspb.BinaryReader.prototype.readBool); |
- assertNotNull(jspb.BinaryReader.prototype.writeBool); |
+ assertNotUndefined(jspb.BinaryReader.prototype.readUint32); |
+ assertNotUndefined(jspb.BinaryWriter.prototype.writeUint32); |
+ assertNotUndefined(jspb.BinaryReader.prototype.readUint64); |
+ assertNotUndefined(jspb.BinaryWriter.prototype.writeUint64); |
+ assertNotUndefined(jspb.BinaryReader.prototype.readBool); |
+ assertNotUndefined(jspb.BinaryWriter.prototype.writeBool); |
doTestUnsignedField_( |
jspb.BinaryReader.prototype.readUint32, |
jspb.BinaryWriter.prototype.writeUint32, |
@@ -360,6 +358,57 @@ describe('binaryReaderTest', function() { |
/** |
+ * Tests reading a field from hexadecimal string (format: '08 BE EF'). |
+ * @param {Function} readField |
+ * @param {number} expected |
+ * @param {string} hexString |
+ */ |
+ function doTestHexStringVarint_(readField, expected, hexString) { |
+ var bytesCount = (hexString.length + 1) / 3; |
+ var bytes = new Uint8Array(bytesCount); |
+ for (var i = 0; i < bytesCount; i++) { |
+ bytes[i] = parseInt(hexString.substring(i * 3, i * 3 + 2), 16); |
+ } |
+ var reader = jspb.BinaryReader.alloc(bytes); |
+ reader.nextField(); |
+ assertEquals(expected, readField.call(reader)); |
+ } |
+ |
+ |
+ /** |
+ * Tests non-canonical redundant varint decoding. |
+ */ |
+ it('testRedundantVarintFields', function() { |
+ assertNotNull(jspb.BinaryReader.prototype.readUint32); |
+ assertNotNull(jspb.BinaryReader.prototype.readUint64); |
+ assertNotNull(jspb.BinaryReader.prototype.readSint32); |
+ assertNotNull(jspb.BinaryReader.prototype.readSint64); |
+ |
+ // uint32 and sint32 take no more than 5 bytes |
+ // 08 - field prefix (type = 0 means varint) |
+ doTestHexStringVarint_( |
+ jspb.BinaryReader.prototype.readUint32, |
+ 12, '08 8C 80 80 80 00'); |
+ |
+ // 11 stands for -6 in zigzag encoding |
+ doTestHexStringVarint_( |
+ jspb.BinaryReader.prototype.readSint32, |
+ -6, '08 8B 80 80 80 00'); |
+ |
+ // uint64 and sint64 take no more than 10 bytes |
+ // 08 - field prefix (type = 0 means varint) |
+ doTestHexStringVarint_( |
+ jspb.BinaryReader.prototype.readUint64, |
+ 12, '08 8C 80 80 80 80 80 80 80 80 00'); |
+ |
+ // 11 stands for -6 in zigzag encoding |
+ doTestHexStringVarint_( |
+ jspb.BinaryReader.prototype.readSint64, |
+ -6, '08 8B 80 80 80 80 80 80 80 80 00'); |
+ }); |
+ |
+ |
+ /** |
* Tests 64-bit fields that are handled as strings. |
*/ |
it('testStringInt64Fields', function() { |