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