Haha-Yes/node_modules/ref/test/object.js
2018-09-09 21:20:36 +02:00

74 lines
1.9 KiB
JavaScript

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)
})
})
})