forked from jacomyal/sigma.js
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathunit.dispatcher.js
98 lines (81 loc) · 3.41 KB
/
unit.dispatcher.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
module('sigma.classes.dispatcher');
test('Basics', function() {
// 1. Basics
var dispatched = 0,
instance = new sigma.classes.dispatcher(),
listener = function() { dispatched++; };
instance.dispatchEvent('myEvent');
strictEqual(dispatched, 0, 'Dispatching an event with no listener does nothing.');
instance.bind('myEvent', listener);
instance.dispatchEvent('myEvent');
strictEqual(dispatched, 1, 'Dispatching an event with a listener executes the listener.');
instance.unbind('myEvent', listener);
instance.dispatchEvent('myEvent');
strictEqual(dispatched, 1, 'Dispatching an event with a listener than has been unbound does nothing.');
});
test('API', function() {
// 1. "unbind" polymorphism
var dispatched = 0,
instance = new sigma.classes.dispatcher(),
listener = function() { dispatched++; };
instance.bind('myEvent', listener);
instance.unbind('myEvent', listener);
instance.dispatchEvent('myEvent');
strictEqual(dispatched, 0, 'unbind(event, handler) works.');
instance.bind('myEvent', listener);
instance.unbind('myEvent anotherEvent', listener);
instance.dispatchEvent('myEvent');
strictEqual(dispatched, 0, 'unbind("event1 event2", handler) works.');
instance.bind('myEvent', listener);
instance.unbind(' myEvent anotherEvent ', listener);
instance.dispatchEvent('myEvent');
strictEqual(dispatched, 0, 'unbind(" event1 event2 ", handler) works.');
instance.bind('myEvent', listener);
instance.unbind(['myEvent', 'anotherEvent'], listener);
instance.dispatchEvent('myEvent');
strictEqual(dispatched, 0, 'unbind(event, handler) works.');
instance.bind('myEvent', listener);
instance.unbind('myEvent');
instance.dispatchEvent('myEvent');
strictEqual(dispatched, 0, 'unbind(event) works.');
instance.bind('myEvent', listener);
instance.unbind();
instance.dispatchEvent('myEvent');
strictEqual(dispatched, 0, 'unbind() works.');
// 2. "bind" polymorphism
var dispatched1 = 0,
dispatched2 = 0,
instance = new sigma.classes.dispatcher(),
listener1 = function() { dispatched1++; },
listener2 = function() { dispatched2++; };
instance.bind('myEvent1', listener1);
instance.dispatchEvent('myEvent1');
strictEqual(dispatched1, 1, 'bind(event, handler) works.');
instance.unbind('myEvent1');
dispatched1 = 0;
instance.bind('myEvent1 myEvent2', listener1);
instance.dispatchEvent('myEvent1');
instance.dispatchEvent('myEvent2');
strictEqual(dispatched1, 2, 'bind("event1 event2", handler) works.');
instance.unbind('myEvent1 myEvent2');
dispatched1 = 0;
instance.bind(' myEvent1 myEvent2 ', listener1);
instance.dispatchEvent('myEvent1');
instance.dispatchEvent('myEvent2');
strictEqual(dispatched1, 2, 'bind(" event1 event2 ", handler) works.');
instance.unbind('myEvent1 myEvent2');
dispatched1 = 0;
instance.bind(['myEvent1', 'myEvent2'], listener1);
instance.dispatchEvent('myEvent1');
instance.dispatchEvent('myEvent2');
strictEqual(dispatched1, 2, 'bind(["event1", "event2"], handler) works.');
instance.unbind('myEvent1 myEvent2');
dispatched1 = 0;
instance.bind({ myEvent1: listener1, myEvent2: listener2 });
instance.dispatchEvent('myEvent1');
instance.dispatchEvent('myEvent2');
deepEqual([dispatched1, dispatched2], [1, 1], 'bind({ event1: listener1, event2: listener2, }, handler) works.');
instance.unbind('myEvent1 myEvent2');
dispatched1 = 0;
dispatched2 = 0;
});