nbt
Version:
A parser and serializer for NBT archives
166 lines (147 loc) • 4.73 kB
JavaScript
'use strict';
var nbt = require('../nbt'),
expect = require('chai').expect;
describe('nbt.Reader', function() {
it('is constructed with a Uint8Array', function() {
nbt.Reader(new Uint8Array([1, 2, 3]));
});
it('reads 8-bit bytes', function() {
var reader = new nbt.Reader(new Uint8Array([0, 127, -127]));
expect(reader.byte()).to.equal(0);
expect(reader.byte()).to.equal(127);
expect(reader.byte()).to.equal(-127);
});
it('reads 8-bit unsigned bytes', function() {
var reader = new nbt.Reader(new Uint8Array([0, 127, 255]));
expect(reader.ubyte()).to.equal(0);
expect(reader.ubyte()).to.equal(127);
expect(reader.ubyte()).to.equal(255);
});
it('reads 16-bit shorts', function() {
var reader = new nbt.Reader(new Uint8Array([
0,0, 0,255, -127,255
]));
expect(reader.short()).to.equal(0);
expect(reader.short()).to.equal(255);
expect(reader.short()).to.equal((-127 << 8) | 255);
});
it('reads 32-bit ints', function() {
var reader = new nbt.Reader(new Uint8Array([
0,0,0,0,
0,0,0,255,
-127,0,0,0
]));
expect(reader.int()).to.equal(0);
expect(reader.int()).to.equal(255);
expect(reader.int()).to.equal(-127 << 24);
});
it('reads 64-bit longs', function() {
var reader = new nbt.Reader(new Uint8Array([
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,255,
-127,0,0,0,0,0,0,0
]));
expect(reader.long()).to.deep.equal([0, 0]);
expect(reader.long()).to.deep.equal([0, 255]);
expect(reader.long()).to.deep.equal([-127 << 24, 0]);
});
it('reads 32-bit floats', function() {
var reader = new nbt.Reader(new Uint8Array([
0x00,0x00,0x00,0x00,
0x3f,0x80,0x00,0x00
]));
expect(reader.float()).to.equal(0);
expect(reader.float()).to.equal(1);
});
it('reads 64-bit doubles', function() {
var reader = new nbt.Reader(new Uint8Array([
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x3f,0xf0,0x00,0x00,0x00,0x00,0x00,0x00
]));
expect(reader.double()).to.equal(0);
expect(reader.double()).to.equal(1);
});
it('reads 8-bit byte arrays', function() {
var reader = new nbt.Reader(new Uint8Array([
0,0,0,2, 1,2,
0,0,0,4, 3,4,5,6
]));
expect(reader.byteArray()).to.deep.equal([1, 2]);
expect(reader.byteArray()).to.deep.equal([3, 4, 5, 6]);
});
it('reads 32-bit int arrays', function() {
var reader = new nbt.Reader(new Uint8Array([
0,0,0,2, 0,0,0,1, 0,0,0,2,
0,0,0,4, 0,0,0,3, 0,0,0,4, 0,0,0,5, 0,0,0,6,
]));
expect(reader.intArray()).to.deep.equal([1, 2]);
expect(reader.intArray()).to.deep.equal([3, 4, 5, 6]);
});
it('reads 64-bit int arrays', function() {
var reader = new nbt.Reader(new Uint8Array([
0,0,0,1, 0,0,0,15, 0,0,0,1,
0,0,0,2, 16,16,16,16, 32,32,32,32, 1,2,3,4, 5,6,7,8,
]));
expect(reader.longArray()).to.deep.equal([[15, 1]]);
expect(reader.longArray()).to.deep.equal([[269488144, 538976288], [16909060, 84281096]]);
});
it('reads strings', function() {
var reader = new nbt.Reader(new Uint8Array([
0,6, 0x48,0x65,0x6C,0x6C,0x6F,0x21,
0,16, 0xE3,0x81,0x93,0xE3,0x82,0x93,0xE3,0x81,
0xAB,0xE3,0x81,0xA1,0xE3,0x81,0xAF,0x21
]));
expect(reader.string()).to.equal('Hello!');
expect(reader.string()).to.equal('こんにちは!');
});
it('reads lists', function() {
var reader = new nbt.Reader(new Uint8Array([
1, 0,0,0,3, 1, 2, 3,
8, 0,0,0,2, 0,5, 0x48,0x65,0x6C,0x6C,0x6F,
0,5, 0x57,0x6F,0x72,0x6C,0x64
]));
expect(reader.list()).to.deep.equal(
{ type: "byte", value: [1, 2, 3] });
expect(reader.list()).to.deep.equal(
{ type: "string", value: ['Hello', 'World'] });
});
it('reads compounds', function() {
var reader = new nbt.Reader(new Uint8Array([
1, 0,2, 0x61,0x61, 1,
9, 0,2, 0x62,0x62, 1, 0,0,0,3, 1, 2, 3,
0,
1, 0,2, 0x63,0x63, 2,
0
]));
expect(reader.compound()).to.deep.equal({
aa: { type: "byte", value: 1 },
bb: { type: "list", value: { type: "byte", value: [1, 2, 3] } }
});
expect(reader.compound()).to.deep.equal({
cc: { type: "byte", value: 2 }
});
});
it('tracks the cursor location', function() {
var reader = new nbt.Reader(new Uint8Array([
0, 0,0,0,0,0,0,0,0
]));
expect(reader.offset).to.equal(0);
reader.byte();
reader.long();
expect(reader.offset).to.equal(9);
});
it('can change the cursor location', function() {
var reader = new nbt.Reader(new Uint8Array([1, 2]));
expect(reader.byte()).to.equal(1);
reader.offset = 0;
expect(reader.byte()).to.equal(1);
});
if (typeof Buffer !== 'undefined') {
it('is supports Buffer input', function() {
var reader = new nbt.Reader(new Uint8Array([1, 2, 3]));
expect(reader.byte()).to.equal(1);
expect(reader.byte()).to.equal(2);
expect(reader.byte()).to.equal(3);
});
}
});