mirror of
https://github.com/musix-org/musix-oss
synced 2025-06-17 04:26:00 +00:00
Modules
This commit is contained in:
52
node_modules/ref/test/address.js
generated
vendored
Normal file
52
node_modules/ref/test/address.js
generated
vendored
Normal file
@ -0,0 +1,52 @@
|
||||
var ref = require('../')
|
||||
var assert = require('assert')
|
||||
var inspect = require('util').inspect
|
||||
|
||||
describe('address', function () {
|
||||
|
||||
var buf = new Buffer('hello')
|
||||
|
||||
it('should return 0 for the NULL pointer', function () {
|
||||
assert.strictEqual(0, ref.address(ref.NULL))
|
||||
})
|
||||
|
||||
it('should give a positive value for any other Buffer', function () {
|
||||
var address = ref.address(buf)
|
||||
assert.equal(typeof address, 'number')
|
||||
assert(isFinite(address))
|
||||
assert(address > 0)
|
||||
})
|
||||
|
||||
it('should accept an offset value for the 2nd argument', function () {
|
||||
var address = ref.address(buf)
|
||||
assert.equal(address + 0, ref.address(buf, 0))
|
||||
assert.equal(address + 1, ref.address(buf, 1))
|
||||
assert.equal(address + 2, ref.address(buf, 2))
|
||||
assert.equal(address + 3, ref.address(buf, 3))
|
||||
assert.equal(address + 4, ref.address(buf, 4))
|
||||
assert.equal(address + 5, ref.address(buf, 5))
|
||||
})
|
||||
|
||||
it('should accept a negative offset value for the 2nd argument', function () {
|
||||
var address = ref.address(buf)
|
||||
assert.equal(address - 0, ref.address(buf, -0))
|
||||
assert.equal(address - 1, ref.address(buf, -1))
|
||||
assert.equal(address - 2, ref.address(buf, -2))
|
||||
assert.equal(address - 3, ref.address(buf, -3))
|
||||
assert.equal(address - 4, ref.address(buf, -4))
|
||||
assert.equal(address - 5, ref.address(buf, -5))
|
||||
})
|
||||
|
||||
it('should have an offset of zero when none is given', function () {
|
||||
assert.equal(ref.address(buf), ref.address(buf, 0))
|
||||
})
|
||||
|
||||
describe('inspect()', function () {
|
||||
|
||||
it('should overwrite the default Buffer#inspect() to print the memory address', function () {
|
||||
assert(inspect(buf).indexOf(buf.hexAddress()) !== -1)
|
||||
})
|
||||
|
||||
})
|
||||
|
||||
})
|
17
node_modules/ref/test/alloc.js
generated
vendored
Normal file
17
node_modules/ref/test/alloc.js
generated
vendored
Normal file
@ -0,0 +1,17 @@
|
||||
|
||||
var assert = require('assert')
|
||||
var ref = require('../')
|
||||
|
||||
describe('alloc()', function () {
|
||||
|
||||
it('should return a new Buffer of "bool" size', function () {
|
||||
var buf = ref.alloc(ref.types.bool)
|
||||
assert.equal(ref.sizeof.bool, buf.length)
|
||||
})
|
||||
|
||||
it('should coerce string type names', function () {
|
||||
var buf = ref.alloc('bool')
|
||||
assert.strictEqual(ref.types.bool, buf.type)
|
||||
})
|
||||
|
||||
})
|
36
node_modules/ref/test/bool.js
generated
vendored
Normal file
36
node_modules/ref/test/bool.js
generated
vendored
Normal file
@ -0,0 +1,36 @@
|
||||
|
||||
var assert = require('assert')
|
||||
var ref = require('../')
|
||||
|
||||
describe('bool', function () {
|
||||
|
||||
var buf = ref.alloc('bool')
|
||||
|
||||
it('should return JS "false" for a value of 0', function () {
|
||||
buf[0] = 0
|
||||
assert.strictEqual(false, ref.get(buf))
|
||||
})
|
||||
|
||||
it('should return JS "true" for a value of 1', function () {
|
||||
buf[0] = 1
|
||||
assert.strictEqual(true, ref.get(buf))
|
||||
})
|
||||
|
||||
it('should write a JS "false" value as 0', function () {
|
||||
ref.set(buf, 0, false)
|
||||
assert.strictEqual(0, buf[0])
|
||||
})
|
||||
|
||||
it('should write a JS "true" value as 1', function () {
|
||||
ref.set(buf, 0, true)
|
||||
assert.strictEqual(1, buf[0])
|
||||
})
|
||||
|
||||
it('should allow uint8 number values to be written to it', function () {
|
||||
var val = 255
|
||||
ref.set(buf, 0, val)
|
||||
assert.strictEqual(true, ref.get(buf))
|
||||
assert.strictEqual(val, buf[0])
|
||||
})
|
||||
|
||||
})
|
17
node_modules/ref/test/char.js
generated
vendored
Normal file
17
node_modules/ref/test/char.js
generated
vendored
Normal file
@ -0,0 +1,17 @@
|
||||
|
||||
var assert = require('assert')
|
||||
var ref = require('../')
|
||||
|
||||
describe('char', function () {
|
||||
|
||||
it('should accept a JS String, and write the first char\'s code', function () {
|
||||
var val = 'a'
|
||||
|
||||
var buf = ref.alloc('char', val)
|
||||
assert.strictEqual(val.charCodeAt(0), buf.deref())
|
||||
|
||||
buf = ref.alloc('uchar', val)
|
||||
assert.strictEqual(val.charCodeAt(0), buf.deref())
|
||||
})
|
||||
|
||||
})
|
48
node_modules/ref/test/coerce.js
generated
vendored
Normal file
48
node_modules/ref/test/coerce.js
generated
vendored
Normal file
@ -0,0 +1,48 @@
|
||||
|
||||
var assert = require('assert')
|
||||
var ref = require('../')
|
||||
|
||||
describe('coerce', function () {
|
||||
|
||||
it('should return `ref.types.void` for "void"', function () {
|
||||
var type = ref.coerceType('void')
|
||||
assert.strictEqual(ref.types.void, type)
|
||||
})
|
||||
|
||||
it('should return a ref type when a "*" is present', function () {
|
||||
var type = ref.coerceType('void *')
|
||||
assert(type !== ref.types.void)
|
||||
assert.equal(type.indirection, ref.types.void.indirection + 1)
|
||||
})
|
||||
|
||||
it('should coerce the "type" property of a Buffer', function () {
|
||||
var buf = new Buffer(ref.sizeof.int)
|
||||
buf.type = 'int'
|
||||
var type = ref.getType(buf)
|
||||
assert.strictEqual(ref.types.int, type)
|
||||
assert.strictEqual('int', buf.type)
|
||||
})
|
||||
|
||||
it('should coerce "Object" to `ref.types.Object`', function () {
|
||||
assert.strictEqual(ref.types.Object, ref.coerceType('Object'))
|
||||
})
|
||||
|
||||
it('should coerce the optional type in `ref.get()`', function () {
|
||||
var b = new Buffer(ref.sizeof.int8)
|
||||
b[0] = 5
|
||||
assert.strictEqual(5, ref.get(b, 0, 'int8'))
|
||||
})
|
||||
|
||||
it('should coerce the optional type in `ref.set()`', function () {
|
||||
var b = new Buffer(ref.sizeof.int8)
|
||||
ref.set(b, 0, 5, 'int8')
|
||||
assert.strictEqual(5, b[0])
|
||||
})
|
||||
|
||||
it('should throw a TypeError if a "type" can not be inferred', function () {
|
||||
assert.throws(function () {
|
||||
ref.coerceType({ })
|
||||
}, /could not determine a proper \"type\"/)
|
||||
})
|
||||
|
||||
})
|
170
node_modules/ref/test/int64.js
generated
vendored
Normal file
170
node_modules/ref/test/int64.js
generated
vendored
Normal file
@ -0,0 +1,170 @@
|
||||
var assert = require('assert')
|
||||
var ref = require('../')
|
||||
|
||||
describe('int64', function () {
|
||||
|
||||
var JS_MAX_INT = +9007199254740992
|
||||
var JS_MIN_INT = -9007199254740992
|
||||
|
||||
it('should allow simple ints to be written and read', function () {
|
||||
var buf = new Buffer(ref.sizeof.int64)
|
||||
var val = 123456789
|
||||
ref.writeInt64(buf, 0, val)
|
||||
var rtn = ref.readInt64(buf, 0)
|
||||
assert.equal(val, rtn)
|
||||
})
|
||||
|
||||
it('should allow INT64_MAX to be written and read', function () {
|
||||
var buf = new Buffer(ref.sizeof.int64)
|
||||
var val = '9223372036854775807'
|
||||
ref.writeInt64(buf, 0, val)
|
||||
var rtn = ref.readInt64(buf, 0)
|
||||
assert.equal(val, rtn)
|
||||
})
|
||||
|
||||
it('should allow a hex String to be input (signed)', function () {
|
||||
var buf = new Buffer(ref.sizeof.int64)
|
||||
var val = '-0x1234567890'
|
||||
ref.writeInt64(buf, 0, val)
|
||||
var rtn = ref.readInt64(buf, 0)
|
||||
assert.equal(parseInt(val, 16), rtn)
|
||||
})
|
||||
|
||||
it('should allow an octal String to be input (signed)', function () {
|
||||
var buf = new Buffer(ref.sizeof.int64)
|
||||
var val = '-0777'
|
||||
ref.writeInt64(buf, 0, val)
|
||||
var rtn = ref.readInt64(buf, 0)
|
||||
assert.equal(parseInt(val, 8), rtn)
|
||||
})
|
||||
|
||||
it('should allow a hex String to be input (unsigned)', function () {
|
||||
var buf = new Buffer(ref.sizeof.uint64)
|
||||
var val = '0x1234567890'
|
||||
ref.writeUInt64(buf, 0, val)
|
||||
var rtn = ref.readUInt64(buf, 0)
|
||||
assert.equal(parseInt(val, 16), rtn)
|
||||
})
|
||||
|
||||
it('should allow an octal String to be input (unsigned)', function () {
|
||||
var buf = new Buffer(ref.sizeof.uint64)
|
||||
var val = '0777'
|
||||
ref.writeUInt64(buf, 0, val)
|
||||
var rtn = ref.readUInt64(buf, 0)
|
||||
assert.equal(parseInt(val, 8), rtn)
|
||||
})
|
||||
|
||||
it('should return a Number when reading JS_MIN_INT', function () {
|
||||
var buf = new Buffer(ref.sizeof.int64)
|
||||
ref.writeInt64(buf, 0, JS_MIN_INT)
|
||||
var rtn = ref.readInt64(buf, 0)
|
||||
assert.equal('number', typeof rtn)
|
||||
assert.equal(JS_MIN_INT, rtn)
|
||||
})
|
||||
|
||||
it('should return a Number when reading JS_MAX_INT', function () {
|
||||
var buf = new Buffer(ref.sizeof.int64)
|
||||
ref.writeInt64(buf, 0, JS_MAX_INT)
|
||||
var rtn = ref.readInt64(buf, 0)
|
||||
assert.equal('number', typeof rtn)
|
||||
assert.equal(JS_MAX_INT, rtn)
|
||||
})
|
||||
|
||||
it('should return a String when reading JS_MAX_INT+1', function () {
|
||||
var buf = new Buffer(ref.sizeof.int64)
|
||||
var plus_one = '9007199254740993'
|
||||
ref.writeInt64(buf, 0, plus_one)
|
||||
var rtn = ref.readInt64(buf, 0)
|
||||
assert.equal('string', typeof rtn)
|
||||
assert.equal(plus_one, rtn)
|
||||
})
|
||||
|
||||
it('should return a String when reading JS_MIN_INT-1', function () {
|
||||
var buf = new Buffer(ref.sizeof.int64)
|
||||
var minus_one = '-9007199254740993'
|
||||
ref.writeInt64(buf, 0, minus_one)
|
||||
var rtn = ref.readInt64(buf, 0)
|
||||
assert.equal('string', typeof rtn)
|
||||
assert.equal(minus_one, rtn)
|
||||
})
|
||||
|
||||
it('should return a Number when reading 0, even when written as a String', function () {
|
||||
var buf = new Buffer(ref.sizeof.int64)
|
||||
var zero = '0'
|
||||
ref.writeInt64(buf, 0, zero)
|
||||
var rtn = ref.readInt64(buf, 0)
|
||||
assert.equal('number', typeof rtn)
|
||||
assert.equal(0, rtn)
|
||||
})
|
||||
|
||||
it('should throw a "no digits" Error when writing an invalid String (signed)', function () {
|
||||
assert.throws(function () {
|
||||
var buf = new Buffer(ref.sizeof.int64)
|
||||
ref.writeInt64(buf, 0, 'foo')
|
||||
}, /no digits we found in input String/)
|
||||
})
|
||||
|
||||
it('should throw a "no digits" Error when writing an invalid String (unsigned)', function () {
|
||||
assert.throws(function () {
|
||||
var buf = new Buffer(ref.sizeof.uint64)
|
||||
ref.writeUInt64(buf, 0, 'foo')
|
||||
}, /no digits we found in input String/)
|
||||
})
|
||||
|
||||
it('should throw an "out of range" Error when writing an invalid String (signed)', function () {
|
||||
var e;
|
||||
try {
|
||||
var buf = new Buffer(ref.sizeof.int64)
|
||||
ref.writeInt64(buf, 0, '10000000000000000000000000')
|
||||
} catch (_e) {
|
||||
e = _e;
|
||||
}
|
||||
assert(/input String numerical value out of range/.test(e.message));
|
||||
})
|
||||
|
||||
it('should throw an "out of range" Error when writing an invalid String (unsigned)', function () {
|
||||
var e;
|
||||
try {
|
||||
var buf = new Buffer(ref.sizeof.uint64)
|
||||
ref.writeUInt64(buf, 0, '10000000000000000000000000')
|
||||
} catch (_e) {
|
||||
e = _e;
|
||||
}
|
||||
assert(/input String numerical value out of range/.test(e.message));
|
||||
})
|
||||
|
||||
it('should throw an Error when reading an int64_t from the NULL pointer', function () {
|
||||
assert.throws(function () {
|
||||
ref.readInt64(ref.NULL)
|
||||
})
|
||||
})
|
||||
|
||||
it('should throw an Error when reading an uint64_t from the NULL pointer', function () {
|
||||
assert.throws(function () {
|
||||
ref.readUInt64(ref.NULL)
|
||||
})
|
||||
})
|
||||
|
||||
;['LE', 'BE'].forEach(function (endianness) {
|
||||
|
||||
describe(endianness, function () {
|
||||
|
||||
it('should read and write a signed ' + endianness + ' 64-bit integer', function () {
|
||||
var val = -123456789
|
||||
var buf = new Buffer(ref.sizeof.int64)
|
||||
ref['writeInt64' + endianness](buf, 0, val)
|
||||
assert.equal(val, ref['readInt64' + endianness](buf, 0))
|
||||
})
|
||||
|
||||
it('should read and write an unsigned ' + endianness + ' 64-bit integer', function () {
|
||||
var val = 123456789
|
||||
var buf = new Buffer(ref.sizeof.uint64)
|
||||
ref['writeUInt64' + endianness](buf, 0, val)
|
||||
assert.equal(val, ref['readUInt64' + endianness](buf, 0))
|
||||
})
|
||||
|
||||
})
|
||||
|
||||
})
|
||||
|
||||
})
|
24
node_modules/ref/test/iojs3issue.js
generated
vendored
Normal file
24
node_modules/ref/test/iojs3issue.js
generated
vendored
Normal file
@ -0,0 +1,24 @@
|
||||
var assert = require('assert')
|
||||
var ref = require('../')
|
||||
|
||||
// This will check if the new Buffer implementation behaves like the pre io.js 3.0 one did:
|
||||
describe('iojs3issue', function () {
|
||||
it('should not crash', function() {
|
||||
for (var i = 0; i < 10; i++) {
|
||||
gc()
|
||||
var buf = new Buffer(8)
|
||||
buf.fill(0)
|
||||
var buf2 = ref.ref(buf)
|
||||
var buf3 = ref.deref(buf2)
|
||||
}
|
||||
})
|
||||
it('should not crash too', function() {
|
||||
for (var i = 0; i < 10; i++) {
|
||||
gc()
|
||||
var buf = new Buffer(7)
|
||||
buf.fill(0)
|
||||
var buf2 = ref.ref(buf)
|
||||
var buf3 = ref.deref(buf2)
|
||||
}
|
||||
})
|
||||
})
|
16
node_modules/ref/test/isNull.js
generated
vendored
Normal file
16
node_modules/ref/test/isNull.js
generated
vendored
Normal file
@ -0,0 +1,16 @@
|
||||
|
||||
var assert = require('assert')
|
||||
var ref = require('../')
|
||||
|
||||
describe('isNull', function () {
|
||||
|
||||
it('should return "true" for the NULL pointer', function () {
|
||||
assert.strictEqual(true, ref.isNull(ref.NULL))
|
||||
})
|
||||
|
||||
it('should return "false" for a valid Buffer', function () {
|
||||
var buf = new Buffer('hello')
|
||||
assert.strictEqual(false, ref.isNull(buf))
|
||||
})
|
||||
|
||||
})
|
74
node_modules/ref/test/object.js
generated
vendored
Normal file
74
node_modules/ref/test/object.js
generated
vendored
Normal file
@ -0,0 +1,74 @@
|
||||
|
||||
var assert = require('assert')
|
||||
var weak = require('weak')
|
||||
var ref = require('../')
|
||||
|
||||
describe('Object', function () {
|
||||
|
||||
var obj = {
|
||||
foo: 'bar'
|
||||
, test: Math.random()
|
||||
, now: new Date()
|
||||
}
|
||||
|
||||
beforeEach(gc)
|
||||
|
||||
it('should write and read back an Object in a Buffer', function () {
|
||||
var buf = new Buffer(ref.sizeof.Object)
|
||||
ref.writeObject(buf, 0, obj)
|
||||
var out = ref.readObject(buf)
|
||||
assert.strictEqual(obj, out)
|
||||
assert.deepEqual(obj, out)
|
||||
})
|
||||
|
||||
it('should retain references to written Objects', function (done) {
|
||||
var o_gc = false
|
||||
var buf_gc = false
|
||||
var o = { foo: 'bar' }
|
||||
var buf = new Buffer(ref.sizeof.Object)
|
||||
|
||||
weak(o, function () { o_gc = true })
|
||||
weak(buf, function () { buf_gc = true })
|
||||
ref.writeObject(buf, 0, o)
|
||||
assert(!o_gc, '"o" has been garbage collected too soon')
|
||||
assert(!buf_gc, '"buf" has been garbage collected too soon')
|
||||
|
||||
// try to GC `o`
|
||||
o = null
|
||||
gc()
|
||||
assert(!o_gc, '"o" has been garbage collected too soon')
|
||||
assert(!buf_gc, '"buf" has been garbage collected too soon')
|
||||
|
||||
// now GC `buf`
|
||||
buf = null
|
||||
setImmediate(function () {
|
||||
gc()
|
||||
assert(buf_gc, '"buf" has not been garbage collected')
|
||||
assert(o_gc, '"o" has not been garbage collected')
|
||||
done()
|
||||
});
|
||||
})
|
||||
|
||||
it('should throw an Error when reading an Object from the NULL pointer', function () {
|
||||
assert.throws(function () {
|
||||
ref.NULL.readObject()
|
||||
})
|
||||
})
|
||||
|
||||
describe('offset', function () {
|
||||
|
||||
it('should read two Objects next to each other in memory', function () {
|
||||
var buf = new Buffer(ref.sizeof.pointer * 2)
|
||||
var a = {}
|
||||
var b = {}
|
||||
buf.writeObject(a, 0 * ref.sizeof.pointer)
|
||||
buf.writeObject(b, 1 * ref.sizeof.pointer)
|
||||
var _a = buf.readObject(0 * ref.sizeof.pointer)
|
||||
var _b = buf.readObject(1 * ref.sizeof.pointer)
|
||||
assert.strictEqual(a, _a)
|
||||
assert.strictEqual(b, _b)
|
||||
})
|
||||
|
||||
})
|
||||
|
||||
})
|
80
node_modules/ref/test/pointer.js
generated
vendored
Normal file
80
node_modules/ref/test/pointer.js
generated
vendored
Normal file
@ -0,0 +1,80 @@
|
||||
|
||||
var assert = require('assert')
|
||||
var weak = require('weak')
|
||||
var ref = require('../')
|
||||
|
||||
describe('pointer', function () {
|
||||
|
||||
var test = new Buffer('hello world')
|
||||
|
||||
beforeEach(gc)
|
||||
|
||||
it('should write and read back a pointer (Buffer) in a Buffer', function () {
|
||||
var buf = new Buffer(ref.sizeof.pointer)
|
||||
ref.writePointer(buf, 0, test)
|
||||
var out = ref.readPointer(buf, 0, test.length)
|
||||
assert.strictEqual(out.length, test.length)
|
||||
for (var i = 0, l = out.length; i < l; i++) {
|
||||
assert.strictEqual(out[i], test[i])
|
||||
}
|
||||
assert.strictEqual(ref.address(out), ref.address(test))
|
||||
})
|
||||
|
||||
it('should retain references to a written pointer in a Buffer', function (done) {
|
||||
var child_gc = false
|
||||
var parent_gc = false
|
||||
var child = new Buffer('a pointer holding some data...')
|
||||
var parent = new Buffer(ref.sizeof.pointer)
|
||||
|
||||
weak(child, function () { child_gc = true })
|
||||
weak(parent, function () { parent_gc = true })
|
||||
ref.writePointer(parent, 0, child)
|
||||
assert(!child_gc, '"child" has been garbage collected too soon')
|
||||
assert(!parent_gc, '"parent" has been garbage collected too soon')
|
||||
|
||||
// try to GC `child`
|
||||
child = null
|
||||
gc()
|
||||
assert(!child_gc, '"child" has been garbage collected too soon')
|
||||
assert(!parent_gc, '"parent" has been garbage collected too soon')
|
||||
|
||||
// now GC `parent`
|
||||
parent = null
|
||||
setImmediate(function () {
|
||||
gc()
|
||||
assert(parent_gc, '"parent" has not been garbage collected')
|
||||
assert(child_gc, '"child" has not been garbage collected')
|
||||
done()
|
||||
});
|
||||
})
|
||||
|
||||
it('should throw an Error when reading from the NULL pointer', function () {
|
||||
assert.throws(function () {
|
||||
ref.NULL.readPointer()
|
||||
})
|
||||
})
|
||||
|
||||
it('should return a 0-length Buffer when reading a NULL pointer', function () {
|
||||
var buf = new Buffer(ref.sizeof.pointer)
|
||||
ref.writePointer(buf, 0, ref.NULL)
|
||||
var out = ref.readPointer(buf, 0, 100)
|
||||
assert.strictEqual(out.length, 0)
|
||||
})
|
||||
|
||||
describe('offset', function () {
|
||||
|
||||
it('should read two pointers next to each other in memory', function () {
|
||||
var buf = new Buffer(ref.sizeof.pointer * 2)
|
||||
var a = new Buffer('hello')
|
||||
var b = new Buffer('world')
|
||||
buf.writePointer(a, 0 * ref.sizeof.pointer)
|
||||
buf.writePointer(b, 1 * ref.sizeof.pointer)
|
||||
var _a = buf.readPointer(0 * ref.sizeof.pointer)
|
||||
var _b = buf.readPointer(1 * ref.sizeof.pointer)
|
||||
assert.equal(a.address(), _a.address())
|
||||
assert.equal(b.address(), _b.address())
|
||||
})
|
||||
|
||||
})
|
||||
|
||||
})
|
61
node_modules/ref/test/ref-deref.js
generated
vendored
Normal file
61
node_modules/ref/test/ref-deref.js
generated
vendored
Normal file
@ -0,0 +1,61 @@
|
||||
|
||||
var assert = require('assert')
|
||||
var ref = require('../')
|
||||
|
||||
describe('ref(), deref()', function () {
|
||||
|
||||
beforeEach(gc)
|
||||
|
||||
it('should work 1 layer deep', function () {
|
||||
var test = new Buffer('one layer deep')
|
||||
var one = ref.ref(test)
|
||||
var _test = ref.deref(one)
|
||||
assert.equal(test.length, _test.length)
|
||||
assert.equal(test.toString(), _test.toString())
|
||||
})
|
||||
|
||||
it('should work 2 layers deep', function () {
|
||||
var test = new Buffer('two layers deep')
|
||||
var one = ref.ref(test)
|
||||
var two = ref.ref(one)
|
||||
var _one = ref.deref(two)
|
||||
var _test = ref.deref(_one)
|
||||
assert.equal(ref.address(one), ref.address(_one))
|
||||
assert.equal(ref.address(test), ref.address(_test))
|
||||
assert.equal(one.length, _one.length)
|
||||
assert.equal(test.length, _test.length)
|
||||
assert.equal(test.toString(), _test.toString())
|
||||
})
|
||||
|
||||
it('should throw when derefing a Buffer with no "type"', function () {
|
||||
var test = new Buffer('???')
|
||||
assert.throws(function () {
|
||||
ref.deref(test)
|
||||
}, /unknown "type"/)
|
||||
})
|
||||
|
||||
it('should throw when derefing a Buffer with no "type" 2', function () {
|
||||
var test = new Buffer('???')
|
||||
var r = ref.ref(test)
|
||||
var _test = ref.deref(r)
|
||||
assert.equal(ref.address(test), ref.address(_test))
|
||||
assert.throws(function () {
|
||||
ref.deref(_test)
|
||||
}, /unknown "type"/)
|
||||
})
|
||||
|
||||
it('should deref() a "char" type properly', function () {
|
||||
var test = new Buffer(ref.sizeof.char)
|
||||
test.type = ref.types.char
|
||||
test[0] = 50
|
||||
assert.equal(50, ref.deref(test))
|
||||
test[0] = 127
|
||||
assert.equal(127, ref.deref(test))
|
||||
})
|
||||
|
||||
it('should not throw when calling ref()/deref() on a `void` type', function () {
|
||||
var test = ref.alloc(ref.types.void)
|
||||
assert.strictEqual(null, test.deref())
|
||||
})
|
||||
|
||||
})
|
57
node_modules/ref/test/reinterpret.js
generated
vendored
Normal file
57
node_modules/ref/test/reinterpret.js
generated
vendored
Normal file
@ -0,0 +1,57 @@
|
||||
|
||||
var assert = require('assert')
|
||||
var weak = require('weak')
|
||||
var ref = require('../')
|
||||
|
||||
describe('reinterpret()', function () {
|
||||
|
||||
beforeEach(gc)
|
||||
|
||||
it('should return a new Buffer instance at the same address', function () {
|
||||
var buf = new Buffer('hello world')
|
||||
var small = buf.slice(0, 0)
|
||||
assert.strictEqual(0, small.length)
|
||||
assert.strictEqual(buf.address(), small.address())
|
||||
var reinterpreted = small.reinterpret(buf.length)
|
||||
assert.strictEqual(buf.address(), reinterpreted.address())
|
||||
assert.strictEqual(buf.length, reinterpreted.length)
|
||||
assert.strictEqual(buf.toString(), reinterpreted.toString())
|
||||
})
|
||||
|
||||
it('should return a new Buffer instance starting at the offset address', function () {
|
||||
var buf = new Buffer('hello world')
|
||||
var offset = 3
|
||||
var small = buf.slice(offset, buf.length)
|
||||
assert.strictEqual(buf.length - offset, small.length)
|
||||
assert.strictEqual(buf.address() + offset, small.address())
|
||||
var reinterpreted = buf.reinterpret(small.length, offset)
|
||||
assert.strictEqual(small.address(), reinterpreted.address())
|
||||
assert.strictEqual(small.length, reinterpreted.length)
|
||||
assert.strictEqual(small.toString(), reinterpreted.toString())
|
||||
})
|
||||
|
||||
it('should retain a reference to the original Buffer when reinterpreted', function () {
|
||||
var origGCd = false
|
||||
var otherGCd = false
|
||||
var buf = new Buffer(1)
|
||||
weak(buf, function () { origGCd = true })
|
||||
var other = buf.reinterpret(0)
|
||||
weak(other, function () { otherGCd = true })
|
||||
|
||||
assert(!origGCd, '"buf" has been garbage collected too soon')
|
||||
assert(!otherGCd, '"other" has been garbage collected too soon')
|
||||
|
||||
// try to GC `buf`
|
||||
buf = null
|
||||
gc()
|
||||
assert(!origGCd, '"buf" has been garbage collected too soon')
|
||||
assert(!otherGCd, '"other" has been garbage collected too soon')
|
||||
|
||||
// now GC `other`
|
||||
other = null
|
||||
gc()
|
||||
assert(otherGCd, '"other" has not been garbage collected')
|
||||
assert(origGCd, '"buf" has not been garbage collected')
|
||||
})
|
||||
|
||||
})
|
45
node_modules/ref/test/reinterpretUntilZeros.js
generated
vendored
Normal file
45
node_modules/ref/test/reinterpretUntilZeros.js
generated
vendored
Normal file
@ -0,0 +1,45 @@
|
||||
|
||||
var fs = require('fs')
|
||||
var assert = require('assert')
|
||||
var weak = require('weak')
|
||||
var ref = require('../')
|
||||
|
||||
describe('reinterpretUntilZeros()', function () {
|
||||
|
||||
beforeEach(gc)
|
||||
|
||||
it('should return a new Buffer instance up until the first 0', function () {
|
||||
var buf = new Buffer('hello\0world')
|
||||
var buf2 = buf.reinterpretUntilZeros(1)
|
||||
assert.equal(buf2.length, 'hello'.length)
|
||||
assert.equal(buf2.toString(), 'hello')
|
||||
})
|
||||
|
||||
it('should return a new Buffer instance up until the first 0 starting from offset', function () {
|
||||
var buf = new Buffer('hello\0world')
|
||||
var buf2 = buf.reinterpretUntilZeros(1, 3)
|
||||
assert.equal(buf2.length, 'lo'.length)
|
||||
assert.equal(buf2.toString(), 'lo')
|
||||
})
|
||||
|
||||
it('should return a new Buffer instance up until the first 2-byte sequence of 0s', function () {
|
||||
var str = 'hello world'
|
||||
var buf = new Buffer(50)
|
||||
var len = buf.write(str, 'ucs2')
|
||||
buf.writeInt16LE(0, len) // NULL terminate the string
|
||||
|
||||
var buf2 = buf.reinterpretUntilZeros(2)
|
||||
assert.equal(str.length, buf2.length / 2)
|
||||
assert.equal(buf2.toString('ucs2'), str)
|
||||
})
|
||||
|
||||
it('should return a large Buffer instance > 10,000 bytes with UTF16-LE char bytes', function () {
|
||||
var data = fs.readFileSync(__dirname + '/utf16le.bin');
|
||||
var strBuf = ref.reinterpretUntilZeros(data, 2);
|
||||
assert(strBuf.length > 10000);
|
||||
var str = strBuf.toString('ucs2');
|
||||
// the data in `utf16le.bin` should be a JSON parsable string
|
||||
assert(JSON.parse(str));
|
||||
})
|
||||
|
||||
})
|
98
node_modules/ref/test/string.js
generated
vendored
Normal file
98
node_modules/ref/test/string.js
generated
vendored
Normal file
@ -0,0 +1,98 @@
|
||||
|
||||
var assert = require('assert')
|
||||
var ref = require('../')
|
||||
|
||||
describe('C string', function () {
|
||||
|
||||
describe('readCString()', function () {
|
||||
|
||||
it('should return "" for a Buffer containing "\\0"', function () {
|
||||
var buf = new Buffer('\0')
|
||||
assert.strictEqual('', buf.readCString(0))
|
||||
})
|
||||
|
||||
it('should return "hello" for a Buffer containing "hello\\0world"', function () {
|
||||
var buf = new Buffer('hello\0world')
|
||||
assert.strictEqual('hello', buf.readCString(0))
|
||||
})
|
||||
|
||||
it('should throw an Error when reading from the NULL pointer', function () {
|
||||
assert.throws(function () {
|
||||
ref.NULL.readCString()
|
||||
})
|
||||
})
|
||||
|
||||
})
|
||||
|
||||
describe('writeCString()', function () {
|
||||
|
||||
it('should write a C string (NULL terminated) to a Buffer', function () {
|
||||
var buf = new Buffer(20)
|
||||
var str = 'hello world'
|
||||
buf.writeCString(str)
|
||||
for (var i = 0; i < str.length; i++) {
|
||||
assert.equal(str.charCodeAt(i), buf[i])
|
||||
}
|
||||
assert.equal(0, buf[str.length])
|
||||
})
|
||||
|
||||
})
|
||||
|
||||
describe('allocCString()', function () {
|
||||
|
||||
it('should return a new Buffer containing the given string', function () {
|
||||
var buf = ref.allocCString('hello world')
|
||||
assert.strictEqual('hello world', buf.readCString())
|
||||
})
|
||||
|
||||
it('should return the NULL pointer for `null` values', function () {
|
||||
var buf = ref.allocCString(null)
|
||||
assert(buf.isNull())
|
||||
assert.strictEqual(0, buf.address())
|
||||
})
|
||||
|
||||
it('should return the NULL pointer for `undefined` values', function () {
|
||||
var buf = ref.allocCString(undefined)
|
||||
assert(buf.isNull())
|
||||
assert.strictEqual(0, buf.address())
|
||||
})
|
||||
|
||||
it('should return the NULL pointer for a NULL pointer Buffer', function () {
|
||||
var buf = ref.allocCString(ref.NULL)
|
||||
assert(buf.isNull())
|
||||
assert.strictEqual(0, buf.address())
|
||||
})
|
||||
|
||||
})
|
||||
|
||||
describe('CString', function () {
|
||||
|
||||
it('should return JS `null` when given a pointer pointing to NULL', function () {
|
||||
var buf = ref.alloc(ref.types.CString)
|
||||
buf.writePointer(ref.NULL)
|
||||
assert.strictEqual(null, buf.deref())
|
||||
|
||||
// another version of the same test
|
||||
assert.strictEqual(null, ref.get(ref.NULL_POINTER, 0, ref.types.CString))
|
||||
})
|
||||
|
||||
it('should read a utf8 string from a Buffer', function () {
|
||||
var str = 'hello world'
|
||||
var buf = ref.alloc(ref.types.CString)
|
||||
buf.writePointer(new Buffer(str + '\0'))
|
||||
assert.strictEqual(str, buf.deref())
|
||||
})
|
||||
|
||||
// https://github.com/node-ffi/node-ffi/issues/169
|
||||
it('should set a Buffer as backing store', function () {
|
||||
var str = 'hey!'
|
||||
var store = new Buffer(str + '\0')
|
||||
var buf = ref.alloc(ref.types.CString)
|
||||
ref.set(buf, 0, store)
|
||||
|
||||
assert.equal(str, ref.get(buf, 0))
|
||||
})
|
||||
|
||||
})
|
||||
|
||||
})
|
86
node_modules/ref/test/types.js
generated
vendored
Normal file
86
node_modules/ref/test/types.js
generated
vendored
Normal file
@ -0,0 +1,86 @@
|
||||
|
||||
var assert = require('assert')
|
||||
var ref = require('../')
|
||||
|
||||
describe('types', function () {
|
||||
|
||||
describe('refType()', function () {
|
||||
|
||||
it('should return a new "type" with its `indirection` level increased by 1', function () {
|
||||
var int = ref.types.int
|
||||
var intPtr = ref.refType(int)
|
||||
assert.equal(int.size, intPtr.size)
|
||||
assert.equal(int.indirection + 1, intPtr.indirection)
|
||||
})
|
||||
|
||||
it('should coerce string types', function () {
|
||||
var intPtr = ref.refType('int')
|
||||
assert.equal(2, intPtr.indirection)
|
||||
assert.equal(intPtr.size, ref.types.int.size)
|
||||
})
|
||||
|
||||
it('should override and update a read-only name property', function () {
|
||||
// a type similar to ref-struct's StructType
|
||||
// used for types refType name property test
|
||||
function StructType() {}
|
||||
StructType.size = 0
|
||||
StructType.indirection = 0
|
||||
|
||||
// read-only name property
|
||||
assert.equal(StructType.name, 'StructType')
|
||||
try {
|
||||
StructType.name = 'foo'
|
||||
} catch (err) {
|
||||
// ignore
|
||||
}
|
||||
assert.equal(StructType.name, 'StructType')
|
||||
|
||||
// name property should be writable and updated
|
||||
var newObj = ref.refType(StructType)
|
||||
var newProp = Object.getOwnPropertyDescriptor(newObj, 'name')
|
||||
assert.equal(newProp.writable, true)
|
||||
assert.equal(newObj.name, 'StructType*')
|
||||
})
|
||||
})
|
||||
|
||||
describe('derefType()', function () {
|
||||
|
||||
it('should return a new "type" with its `indirection` level decreased by 1', function () {
|
||||
var intPtr = Object.create(ref.types.int)
|
||||
intPtr.indirection++
|
||||
var int = ref.derefType(intPtr)
|
||||
assert.equal(intPtr.size, intPtr.size)
|
||||
assert.equal(intPtr.indirection - 1, int.indirection)
|
||||
})
|
||||
|
||||
it('should throw an Error when given a "type" with its `indirection` level already at 1', function () {
|
||||
assert.throws(function () {
|
||||
ref.derefType(ref.types.int)
|
||||
})
|
||||
})
|
||||
|
||||
})
|
||||
|
||||
describe('size', function () {
|
||||
Object.keys(ref.types).forEach(function (name) {
|
||||
if (name === 'void') return
|
||||
it('sizeof(' + name + ') should be >= 1', function () {
|
||||
var type = ref.types[name]
|
||||
assert.equal('number', typeof type.size)
|
||||
assert(type.size >= 1)
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
describe('alignment', function () {
|
||||
Object.keys(ref.types).forEach(function (name) {
|
||||
if (name === 'void') return
|
||||
it('alignof(' + name + ') should be >= 1', function () {
|
||||
var type = ref.types[name]
|
||||
assert.equal('number', typeof type.alignment)
|
||||
assert(type.alignment >= 1)
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
})
|
BIN
node_modules/ref/test/utf16le.bin
generated
vendored
Normal file
BIN
node_modules/ref/test/utf16le.bin
generated
vendored
Normal file
Binary file not shown.
Reference in New Issue
Block a user