ref-deref.js 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. var assert = require('assert')
  2. var ref = require('../')
  3. describe('ref(), deref()', function () {
  4. beforeEach(gc)
  5. it('should work 1 layer deep', function () {
  6. var test = new Buffer('one layer deep')
  7. var one = ref.ref(test)
  8. var _test = ref.deref(one)
  9. assert.equal(test.length, _test.length)
  10. assert.equal(test.toString(), _test.toString())
  11. })
  12. it('should work 2 layers deep', function () {
  13. var test = new Buffer('two layers deep')
  14. var one = ref.ref(test)
  15. var two = ref.ref(one)
  16. var _one = ref.deref(two)
  17. var _test = ref.deref(_one)
  18. assert.equal(ref.address(one), ref.address(_one))
  19. assert.equal(ref.address(test), ref.address(_test))
  20. assert.equal(one.length, _one.length)
  21. assert.equal(test.length, _test.length)
  22. assert.equal(test.toString(), _test.toString())
  23. })
  24. it('should throw when derefing a Buffer with no "type"', function () {
  25. var test = new Buffer('???')
  26. assert.throws(function () {
  27. ref.deref(test)
  28. }, /unknown "type"/)
  29. })
  30. it('should throw when derefing a Buffer with no "type" 2', function () {
  31. var test = new Buffer('???')
  32. var r = ref.ref(test)
  33. var _test = ref.deref(r)
  34. assert.equal(ref.address(test), ref.address(_test))
  35. assert.throws(function () {
  36. ref.deref(_test)
  37. }, /unknown "type"/)
  38. })
  39. it('should deref() a "char" type properly', function () {
  40. var test = new Buffer(ref.sizeof.char)
  41. test.type = ref.types.char
  42. test[0] = 50
  43. assert.equal(50, ref.deref(test))
  44. test[0] = 127
  45. assert.equal(127, ref.deref(test))
  46. })
  47. it('should not throw when calling ref()/deref() on a `void` type', function () {
  48. var test = ref.alloc(ref.types.void)
  49. assert.strictEqual(null, test.deref())
  50. })
  51. })