object.js 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. var assert = require('assert')
  2. var weak = require('weak')
  3. var ref = require('../')
  4. describe('Object', function () {
  5. var obj = {
  6. foo: 'bar'
  7. , test: Math.random()
  8. , now: new Date()
  9. }
  10. beforeEach(gc)
  11. it('should write and read back an Object in a Buffer', function () {
  12. var buf = new Buffer(ref.sizeof.Object)
  13. ref.writeObject(buf, 0, obj)
  14. var out = ref.readObject(buf)
  15. assert.strictEqual(obj, out)
  16. assert.deepEqual(obj, out)
  17. })
  18. it('should retain references to written Objects', function (done) {
  19. var o_gc = false
  20. var buf_gc = false
  21. var o = { foo: 'bar' }
  22. var buf = new Buffer(ref.sizeof.Object)
  23. weak(o, function () { o_gc = true })
  24. weak(buf, function () { buf_gc = true })
  25. ref.writeObject(buf, 0, o)
  26. assert(!o_gc, '"o" has been garbage collected too soon')
  27. assert(!buf_gc, '"buf" has been garbage collected too soon')
  28. // try to GC `o`
  29. o = null
  30. gc()
  31. assert(!o_gc, '"o" has been garbage collected too soon')
  32. assert(!buf_gc, '"buf" has been garbage collected too soon')
  33. // now GC `buf`
  34. buf = null
  35. setImmediate(function () {
  36. gc()
  37. assert(buf_gc, '"buf" has not been garbage collected')
  38. assert(o_gc, '"o" has not been garbage collected')
  39. done()
  40. });
  41. })
  42. it('should throw an Error when reading an Object from the NULL pointer', function () {
  43. assert.throws(function () {
  44. ref.NULL.readObject()
  45. })
  46. })
  47. describe('offset', function () {
  48. it('should read two Objects next to each other in memory', function () {
  49. var buf = new Buffer(ref.sizeof.pointer * 2)
  50. var a = {}
  51. var b = {}
  52. buf.writeObject(a, 0 * ref.sizeof.pointer)
  53. buf.writeObject(b, 1 * ref.sizeof.pointer)
  54. var _a = buf.readObject(0 * ref.sizeof.pointer)
  55. var _b = buf.readObject(1 * ref.sizeof.pointer)
  56. assert.strictEqual(a, _a)
  57. assert.strictEqual(b, _b)
  58. })
  59. })
  60. })