diff --git a/package.json b/package.json index b2bae50..67d8c43 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ }, "scripts": { "prepublish": "gulp", - "test": "mocha --require source-map-support/register --reporter spec" + "test": "mocha --recursive --require source-map-support/register --reporter spec" }, "keywords": [ "minecraft", @@ -29,6 +29,7 @@ "browser": "browser.js", "devDependencies": { "batch": "~0.3.1", + "chai": "^2.3.0", "gulp": "^3.8.11", "gulp-babel": "^5.1.0", "gulp-plumber": "^1.0.1", diff --git a/test/dataTypes/numeric.js b/test/dataTypes/numeric.js new file mode 100644 index 0000000..049bdd5 --- /dev/null +++ b/test/dataTypes/numeric.js @@ -0,0 +1,248 @@ +var expect = require('chai').expect; + +var numeric = require('../../dist/datatypes/numeric'); +var getReader = function(dataType) { return dataType[0]; }; +var getWriter = function(dataType) { return dataType[1]; }; +var getSizeOf = function(dataType) { return dataType[2]; }; +/*var getReader = require('../../lib/utils').getReader; +var getWriter = require('../../lib/utils').getWriter; +var getSizeOf = require('../../lib/utils').getSizeOf;*/ + +var testData = { + 'byte': { + 'readPos': { + 'buffer': new Buffer([0x3d]), + 'value': 61 + }, + 'readNeg': { + 'buffer': new Buffer([0x86]), + 'value': -122 + }, + 'writePos': { + 'buffer': new Buffer([0x00]), + 'value': 32, + 'bufferAfter': new Buffer([0x20]) + }, + 'writeNeg': { + 'buffer': new Buffer([0x00]), + 'value': -122, + 'bufferAfter': new Buffer([0x86]) + }, + 'sizeof': { + 'value': 0x2d, + 'size': 1, + } + }, + 'ubyte': { + 'readPos': { + 'buffer': new Buffer([0x3d]), + 'value': 61 + }, + 'readNeg': { + 'buffer': new Buffer([0x86]), + 'value': 134 + }, + 'writePos': { + 'buffer': new Buffer([0x00]), + 'value': 61, + 'bufferAfter': new Buffer([0x3d]) + }, + 'writeNeg': { + 'buffer': new Buffer([0x00]), + 'value': 134, + 'bufferAfter': new Buffer([0x86]) + }, + 'sizeof': { + 'value': 0x2d, + 'size': 1, + } + }, + 'short': { + 'readPos': { + 'buffer': new Buffer([0x30, 0x87]), + 'value': 12423 + }, + 'readNeg': { + 'buffer': new Buffer([0xef, 0x77]), + 'value': -4233 + }, + 'writePos': { + 'buffer': new Buffer([0x00, 0x00]), + 'value': 12423, + 'bufferAfter': new Buffer([0x30, 0x87]), + }, + 'writeNeg': { + 'buffer': new Buffer([0x00, 0x00]), + 'value': -4233, + 'bufferAfter': new Buffer([0xef, 0x77]) + }, + 'sizeof': { + 'value': 0x2d, + 'size': 2, + } + }, + 'ushort': { + 'readPos': { + 'buffer': new Buffer([0x30, 0x87]), + 'value': 12423 + }, + 'readNeg': { + 'buffer': new Buffer([0xef, 0x77]), + 'value': 61303 + }, + 'writePos': { + 'buffer': new Buffer([0x00, 0x00]), + 'value': 12423, + 'bufferAfter': new Buffer([0x30, 0x87]), + }, + 'writeNeg': { + 'buffer': new Buffer([0x00, 0x00]), + 'value': 61303, + 'bufferAfter': new Buffer([0xef, 0x77]) + }, + 'sizeof': { + 'value': 0x2d, + 'size': 2, + } + }, + 'int': { + 'readPos': { + 'buffer': new Buffer([0x00, 0x00, 0x00, 0xea]), + 'value': 234 + }, + 'readNeg': { + 'buffer': new Buffer([0xff, 0xff, 0xfc, 0x00]), + 'value': -1024 + }, + 'writePos': { + 'buffer': new Buffer([0x00, 0x00, 0x00, 0x00]), + 'value': 234, + 'bufferAfter': new Buffer([0x00, 0x00, 0x00, 0xea]) + }, + 'writeNeg': { + 'buffer': new Buffer([0x00, 0x00, 0x00, 0x00]), + 'value': -1024, + 'bufferAfter': new Buffer([0xff, 0xff, 0xfc, 0x00]) + }, + 'sizeof': { + 'value': 0x2d, + 'size': 4 + } + }, + 'uint': { + 'readPos': { + 'buffer': new Buffer([0x00, 0x00, 0x00, 0xea]), + 'value': 234 + }, + 'readNeg': { + 'buffer': new Buffer([0xff, 0xff, 0xfc, 0x00]), + 'value': 4294966272 + }, + 'writePos': { + 'buffer': new Buffer([0x00, 0x00, 0x00, 0x00]), + 'value': 234, + 'bufferAfter': new Buffer([0x00, 0x00, 0x00, 0xea]) + }, + 'writeNeg': { + 'buffer': new Buffer([0x00, 0x00, 0x00, 0x00]), + 'value': 4294966272, + 'bufferAfter': new Buffer([0xff, 0xff, 0xfc, 0x00]) + }, + 'sizeof': { + 'value': 0x2d, + 'size': 4 + } + }, + 'float': { + 'readPos': { + 'buffer': new Buffer([0x47, 0x05, 0xc3, 0x00]), + 'value': 34243 + }, + 'readNeg': { + 'buffer': new Buffer([0xc6, 0x42, 0x4c, 0x00]), + 'value': -12435 + }, + 'writePos': { + 'buffer': new Buffer([0x00, 0x00, 0x00, 0x00]), + 'value': 34243, + 'bufferAfter': new Buffer([0x47, 0x05, 0xc3, 0x00]) + }, + 'writeNeg': { + 'buffer': new Buffer([0x00, 0x00, 0x00, 0x00]), + 'value': -12435, + 'bufferAfter': new Buffer([0xc6, 0x42, 0x4c, 0x00]) + }, + 'sizeof': { + 'value': 0x2d, + 'size': 4 + } + }, + 'double': { + 'readPos': { + 'buffer': new Buffer([0x40, 0xe0, 0xb8, 0x60, 0x00, 0x00, 0x00, 0x00]), + 'value': 34243 + }, + 'readNeg': { + 'buffer': new Buffer([0xc0, 0xc8, 0x49, 0x80, 0x00, 0x00, 0x00, 0x00]), + 'value': -12435 + }, + 'writePos': { + 'buffer': new Buffer([0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]), + 'value': 34243, + 'bufferAfter': new Buffer([0x40, 0xe0, 0xb8, 0x60, 0x00, 0x00, 0x00, 0x00]), + }, + 'writeNeg': { + 'buffer': new Buffer([0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]), + 'value': -12435, + 'bufferAfter': new Buffer([0xc0, 0xc8, 0x49, 0x80, 0x00, 0x00, 0x00, 0x00]), + }, + 'sizeof': { + 'value': 0x2d, + 'size': 8 + } + } +}; + +describe('Numeric', function() { + for (var key in testData) { + if (testData.hasOwnProperty(key) && numeric.hasOwnProperty(key)) { + var value = testData[key]; + describe('.' + key, function() { + var reader; + var writer; + var sizeof; + before(function() { + reader = getReader(numeric[key]); + writer = getWriter(numeric[key]); + sizeof = getSizeOf(numeric[key]); + }); + it('Returns null if not enough data is provided', function() { + expect(reader(new Buffer(0), 0)).to.eql(null); + }); + it('Reads positive values', function() { + expect(reader(value.readPos.buffer, 0).value).to.deep.eql(value.readPos.value); + }); + it('Reads big/negative values', function() { + expect(reader(value.readNeg.buffer, 0).value).to.deep.eql(value.readNeg.value); + }); + it('Writes positive values', function() { + writer(value.writePos.value, value.writePos.buffer, 0); + expect(value.writePos.buffer).to.deep.eql(value.writePos.bufferAfter); + }); + it('Writes negative values', function() { + writer(value.writeNeg.value, value.writeNeg.buffer, 0); + expect(value.writeNeg.buffer).to.deep.eql(value.writeNeg.bufferAfter); + }); + it('Calculates size', function() { + var size; + if (typeof sizeof === "function") { + size = sizeof(value.sizeof.value); + } else { + size = sizeof; + } + expect(size).to.eql(value.sizeof.size); + }); + }); + } + } +});