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.
64 lines
1.7 KiB
64 lines
1.7 KiB
'use strict' |
|
|
|
var Buffer = require('safe-buffer').Buffer |
|
var test = require('tape').test |
|
var msgpack = require('../') |
|
|
|
test('encode/decode ext with a custom object check', function (t) { |
|
var encoder = msgpack() |
|
var all = [] |
|
|
|
function MyType (data) { |
|
this.data = data |
|
} |
|
|
|
function checkForMyType (obj) { |
|
return obj instanceof MyType |
|
} |
|
|
|
function mytypeEncode (obj) { |
|
var buf = Buffer.allocUnsafe(2) |
|
buf.writeUInt8(0x42, 0) |
|
buf.writeUInt8(obj.data, 1) |
|
return buf |
|
} |
|
|
|
function mytypeDecode (data) { |
|
return new MyType(data.readUInt8(0)) |
|
} |
|
|
|
encoder.registerEncoder(checkForMyType, mytypeEncode) |
|
encoder.registerDecoder(0x42, mytypeDecode) |
|
|
|
all.push(new MyType(0)) |
|
all.push(new MyType(1)) |
|
all.push(new MyType(42)) |
|
|
|
all.forEach(function (orig) { |
|
t.test('encoding a custom obj encoded as ' + orig.data, function (t) { |
|
var buf = encoder.encode(orig) |
|
t.equal(buf.length, 3, 'must have the right length') |
|
t.equal(buf.readUInt8(0), 0xd4, 'must have the fixext header') |
|
t.equal(buf.readUInt8(1), 0x42, 'must include the custom type id') |
|
t.equal(buf.readUInt8(2), orig.data, 'must decode correctly') |
|
t.end() |
|
}) |
|
|
|
t.test('decoding a custom obj encoded as ' + orig.data, function (t) { |
|
var buf = Buffer.allocUnsafe(3) |
|
buf[0] = 0xd4 |
|
buf[1] = 0x42 |
|
buf.writeUInt8(orig.data, 2) |
|
t.deepEqual(encoder.decode(buf), orig, 'must decode correctly') |
|
t.ok(encoder.decode(buf) instanceof MyType, 'must have the correct prototype') |
|
t.end() |
|
}) |
|
|
|
t.test('mirror test with a custom obj containing ' + orig.data, function (t) { |
|
t.deepEqual(encoder.decode(encoder.encode(orig)), orig, 'must stay the same') |
|
t.end() |
|
}) |
|
}) |
|
|
|
t.end() |
|
})
|
|
|