-
Notifications
You must be signed in to change notification settings - Fork 140
/
Copy pathref-deref.js
61 lines (51 loc) · 1.72 KB
/
ref-deref.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
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())
})
})