|
|
|
@ -359,6 +359,58 @@ 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++) { |
|
|
|
|
byte = parseInt(hexString.substring(i * 3, i * 3 + 2), 16); |
|
|
|
|
bytes[i] = byte; |
|
|
|
|
} |
|
|
|
|
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. |
|
|
|
|
*/ |
|
|
|
|