-
Notifications
You must be signed in to change notification settings - Fork 266
/
Copy pathcallbacks-test.js
executable file
·125 lines (95 loc) · 3.45 KB
/
callbacks-test.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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
import test from 'ava';
import { callbackMap, storeCallback, getCallbacks, removeCallback, shiftCallbacks, swapCallbacks } from '../src/lib/callbacks';
test('storeCallback adds the callback when the name doesn’t exist', (t) => {
const player = {
element: {}
};
const cb = () => {};
storeCallback(player, 'test', cb);
t.true('test' in callbackMap.get(player.element));
t.true(Array.isArray(callbackMap.get(player.element).test));
t.true(callbackMap.get(player.element).test[0] === cb);
});
test('storeCallback adds the callback when the name already exists', (t) => {
const player = {
element: {}
};
const cb = () => {};
const cb2 = () => {};
storeCallback(player, 'test', cb);
storeCallback(player, 'test', cb2);
t.true(callbackMap.get(player.element).test.length === 2);
t.true(callbackMap.get(player.element).test[1] === cb2);
});
test('getCallbacks returns an empty array when there are no callbacks', (t) => {
t.deepEqual(getCallbacks({ element: {} }, 'test'), []);
});
test('getCallbacks returns the callbacks', (t) => {
const player = {
element: {}
};
const cb = () => {};
callbackMap.set(player.element, { test: [cb] });
t.deepEqual(getCallbacks(player, 'test'), [cb]);
});
test('removeCallback does nothing if there are no callbacks', (t) => {
t.true(removeCallback({ element: {} }, 'test'));
});
test('removeCallback removes all callbacks without a callback arg', (t) => {
const player = {
element: {}
};
const cb = () => {};
const cb2 = () => {};
callbackMap.set(player.element, { test: [cb, cb2] });
t.true(removeCallback(player, 'test'));
t.deepEqual(callbackMap.get(player.element), { test: [] });
});
test('removeCallback removes just the callback specified', (t) => {
const player = {
element: {}
};
const cb = () => {};
const cb2 = () => {};
callbackMap.set(player.element, { test: [cb, cb2] });
t.true(removeCallback(player, 'test', cb2) === false);
t.deepEqual(callbackMap.get(player.element), { test: [cb] });
});
test('removeCallback does nothing if the callback passed isn’t in the map', (t) => {
const player = {
element: {}
};
const cb = () => {};
const cb2 = () => {};
callbackMap.set(player.element, { test: [cb] });
t.true(removeCallback(player, 'test', cb2) === false);
t.deepEqual(callbackMap.get(player.element), { test: [cb] });
});
test('shiftCallbacks shifts a single callback from the callback array', (t) => {
const player = {
element: {}
};
const cb = () => {};
const cb2 = () => {};
callbackMap.set(player.element, { test: [cb, cb2] });
t.true(shiftCallbacks(player, 'test') === cb);
const callbacks = getCallbacks(player, 'test');
t.true(callbacks.length === 1);
t.true(callbacks[0] === cb2);
});
test('shiftCallbacks returns false when there are no callbacks', (t) => {
const player = {
element: {}
};
callbackMap.set(player.element, { test: [] });
t.true(shiftCallbacks(player, 'test') === false);
});
test('swapCallbacks moves the callbacks from one key to another', (t) => {
const oldElement = {};
const newElement = {};
const cb = () => {};
callbackMap.set(oldElement, { test: [cb] });
swapCallbacks(oldElement, newElement);
t.true(callbackMap.get(oldElement) === undefined);
t.deepEqual(callbackMap.get(newElement), { test: [cb] });
});