This repository was archived by the owner on Oct 28, 2021. It is now read-only.
forked from TooTallNate/node-weak
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcallback.js
102 lines (83 loc) · 2.24 KB
/
callback.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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
var assert = require('assert')
var weak = require('../')
describe('weak()', function () {
afterEach(gc)
describe('garbage collection callback', function () {
it('should accept a function as second argument', function () {
var r = weak({}, function () {})
assert.equal(1, weak.callbacks(r).length)
})
it('should invoke the callback before the target is gc\'d', function () {
var called = false
weak({}, function () {
called = true
})
assert(!called)
gc()
assert(called)
})
it('should invoke *all* callbacks in the internal "callback" Array'
, function () {
var r = weak({})
, called1 = false
, called2 = false
weak.addCallback(r, function () {
called1 = true
})
weak.addCallback(r, function () {
called2 = true
})
gc()
assert(called1)
assert(called2)
})
it('should preempt code for GC callback but not nextTick callbacks'
, function(done) {
var calledGcCallback = false
, calledTickCallback = false
weak({}, function() {
calledGcCallback = true
})
process.nextTick(function() {
calledTickCallback = true
});
assert(!calledGcCallback)
assert(!calledTickCallback)
gc()
assert(calledGcCallback)
assert(!calledTickCallback)
setTimeout(function() {
assert(calledTickCallback);
done();
}, 0)
})
})
})
describe('callbacks()', function () {
it('should return the Weakref\'s "callback" Array', function () {
var r = weak({}, function() {})
, callbacks = weak.callbacks(r)
assert(Array.isArray(callbacks))
assert.equal(1, callbacks.length)
})
})
describe('removeCallback()', function() {
it('removed callbacks should not be called', function() {
var called = false
, fn = function() { called = true }
, r = weak({}, fn)
weak.removeCallback(r, fn)
gc()
assert(!called)
})
})
describe('removeCallbacks()', function() {
it('removed callbacks should not be called', function() {
var called = false
, fn = function() { called = true }
, r = weak({}, fn)
weak.removeCallbacks(r)
gc()
assert(!called)
})
})