You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
91 lines
3.0 KiB
91 lines
3.0 KiB
#!/usr/bin/env mocha -R spec |
|
|
|
var assert = require("assert"); |
|
var msgpackJS = "../index"; |
|
var isBrowser = ("undefined" !== typeof window); |
|
var msgpack = isBrowser && window.msgpack || require(msgpackJS); |
|
var TITLE = __filename.replace(/^.*\//, ""); |
|
var HAS_UINT8ARRAY = ("undefined" !== typeof Uint8Array); |
|
|
|
var TESTS = [0, 1, 31, 32, 255, 256, 65535, 65536]; |
|
|
|
function toArray(array) { |
|
if (array instanceof ArrayBuffer) array = new Uint8Array(array); |
|
return Array.prototype.slice.call(array); |
|
} |
|
|
|
// run this test when Uint8Array is available |
|
var describeSkip = HAS_UINT8ARRAY ? describe : describe.skip; |
|
|
|
describeSkip(TITLE, function() { |
|
var options; |
|
|
|
it("binarraybuffer (decode)", function() { |
|
var decoded; |
|
options = {codec: msgpack.createCodec({binarraybuffer: true, preset: true})}; |
|
|
|
// bin (Buffer) |
|
decoded = msgpack.decode(new Buffer([0xc4, 2, 65, 66]), options); |
|
assert.ok(decoded instanceof ArrayBuffer); |
|
assert.ok(!Buffer.isBuffer(decoded)); |
|
assert.deepEqual(toArray(decoded), [65, 66]); |
|
|
|
// bin (Uint8Array) |
|
decoded = msgpack.decode(new Uint8Array([0xc4, 2, 97, 98]), options); |
|
assert.ok(decoded instanceof ArrayBuffer); |
|
assert.ok(!Buffer.isBuffer(decoded)); |
|
assert.deepEqual(toArray(decoded), [97, 98]); |
|
|
|
// bin (Array) |
|
decoded = msgpack.decode([0xc4, 2, 65, 66], options); |
|
assert.ok(decoded instanceof ArrayBuffer); |
|
assert.ok(!Buffer.isBuffer(decoded)); |
|
assert.deepEqual(toArray(decoded), [65, 66]); |
|
}); |
|
|
|
it("binarraybuffer (encode)", function() { |
|
// bin (ArrayBuffer) |
|
var encoded = msgpack.encode(new Uint8Array([65, 66]).buffer, options); |
|
assert.deepEqual(toArray(encoded), [0xc4, 2, 65, 66]); |
|
}); |
|
|
|
it("binarraybuffer (large)", function() { |
|
TESTS.forEach(test); |
|
|
|
function test(length) { |
|
var source = new Uint8Array(length); |
|
for (var i = 0; i < length; i++) { |
|
source[i] = 65; // "A" |
|
} |
|
|
|
var encoded = msgpack.encode(source.buffer, options); |
|
assert.ok(encoded.length); |
|
|
|
var decoded = msgpack.decode(encoded, options); |
|
assert.ok(decoded instanceof ArrayBuffer); |
|
assert.ok(!Buffer.isBuffer(decoded)); |
|
decoded = new Uint8Array(decoded); |
|
assert.equal(decoded.length, length); |
|
if (length) assert.equal(decoded[0], 65); |
|
} |
|
}); |
|
|
|
// addExtPacker() and getExtPacker() methods need a valid constructor name. |
|
// IE10 and iOS7 Safari may give another constructor name than Buffer. |
|
// At those cases, below will be encoded as Uint8Array: [0xd5, 0x12, 97, 98] |
|
var b = new Buffer(1); |
|
var c = b.constructor; |
|
var d = (c && c.name === "Buffer") ? it : it.skip; |
|
d("encode Buffer ext format 0x1B", function() { |
|
// fixext 2 (Buffer) |
|
var encoded = msgpack.encode(new Buffer([97, 98]), options); |
|
assert.deepEqual(toArray(encoded), [0xd5, 0x1b, 97, 98]); |
|
}); |
|
|
|
it("decode Buffer ext format 0x1B", function() { |
|
// fixext 2 (Buffer) |
|
var decoded = msgpack.decode([0xd5, 0x1b, 65, 66], options); |
|
assert.ok(Buffer.isBuffer(decoded)); |
|
assert.deepEqual(toArray(decoded), [65, 66]); |
|
}); |
|
});
|
|
|