UNPKG

6.74 kBJavaScriptView Raw
1describe("EventDispatcher", function () {
2
3 var eventDispatcher;
4
5 beforeEach(function () {
6 eventDispatcher = new EventDispatcher();
7 });
8
9 it("EventDispatcher should be defined", function () {
10 expect(eventDispatcher).toBeDefined();
11 });
12
13 it("Has listener is false when event dispatcher is created", function () {
14 expect(eventDispatcher.hasEventListener('click')).toBeFalsy();
15 });
16
17 it("Adding the same event listener twice is not allowed", function () {
18 var eventType = 'click',
19 eventFunction = function () {};
20
21 expect(eventDispatcher.addEventListener(eventType, eventFunction)).toBeTruthy();
22 expect(eventDispatcher.addEventListener(eventType, eventFunction)).toBeFalsy();
23 });
24
25 it("has listener is true when adding an event", function () {
26 var eventType = 'click';
27
28 expect(eventDispatcher.hasEventListener(eventType)).toBeFalsy();
29
30 eventDispatcher.addEventListener(eventType, function () {});
31
32 expect(eventDispatcher.hasEventListener(eventType)).toBeTruthy();
33 });
34
35 it("Adding 2 events each has listener should be true", function () {
36 var clickEvent = 'click',
37 completeEvent = 'complete';
38
39 eventDispatcher.addEventListener(clickEvent, function () {});
40 eventDispatcher.addEventListener(completeEvent, function () {});
41
42 expect(eventDispatcher.hasEventListener(clickEvent)).toBeTruthy();
43 expect(eventDispatcher.hasEventListener(completeEvent)).toBeTruthy();
44 });
45
46 it("Removing an event throws an error if params are not correct", function () {
47 var clickEvent = 'click',
48 clickListener = function () {};
49
50 eventDispatcher.addEventListener(clickEvent, clickListener);
51
52 expect(function () {
53 eventDispatcher.removeEventListener(clickEvent, 'Not a function');
54 }).toThrow(new TypeError(EventDispatcher.TYPE_ERROR));
55 });
56
57 it("Removing an event hasEventListener equals false", function () {
58 var clickEvent = 'click',
59 clickListener = function () {};
60
61 eventDispatcher.addEventListener(clickEvent, clickListener);
62 eventDispatcher.removeEventListener(clickEvent, clickListener);
63
64 expect(eventDispatcher.hasEventListener(clickEvent)).toBeFalsy();
65 });
66
67 it("when removing one of several events", function () {
68 var clickEvent = 'click',
69 completeEvent = 'complete',
70 clickListener = function () {},
71 completeListener = function () {};
72
73 eventDispatcher.addEventListener(clickEvent, clickListener);
74 eventDispatcher.addEventListener(completeEvent, completeListener);
75
76 eventDispatcher.removeEventListener(clickEvent, clickListener);
77
78 expect(eventDispatcher.hasEventListener(clickEvent)).toBeFalsy();
79 expect(eventDispatcher.hasEventListener(completeEvent)).toBeTruthy();
80 });
81
82 it("Dispatching an event", function () {
83 var completeListener = jasmine.createSpy('completeListener'),
84 completeEvent = 'complete',
85 eventObj = {type: completeEvent};
86
87 eventDispatcher.addEventListener(completeEvent, completeListener);
88 eventDispatcher.dispatchEvent(eventObj);
89
90 expect(completeListener).toHaveBeenCalledWith(eventObj);
91 });
92
93 it("Dispatching one of two events", function () {
94 var clickListener = jasmine.createSpy('clickListener'),
95 clickEvent = 'click',
96 completeListener = jasmine.createSpy('completeListener'),
97 completeEvent = 'complete',
98 eventObj = {type: clickEvent};
99
100 eventDispatcher.addEventListener(clickEvent, clickListener);
101 eventDispatcher.addEventListener(completeEvent, completeListener);
102 eventDispatcher.dispatchEvent(eventObj);
103
104 expect(clickListener).toHaveBeenCalledWith(eventObj);
105 expect(completeListener).not.toHaveBeenCalled();
106 });
107
108 it("Dispatching two events", function () {
109 var clickListener = jasmine.createSpy('clickListener'),
110 clickEvent = 'click',
111 completeListener = jasmine.createSpy('completeListener'),
112 completeEvent = 'complete',
113 clickEventObj = {type: clickEvent},
114 completeEventObj = {type: completeEvent};
115
116 eventDispatcher.addEventListener(clickEvent, clickListener);
117 eventDispatcher.addEventListener(completeEvent, completeListener);
118 eventDispatcher.dispatchEvent(clickEventObj);
119 eventDispatcher.dispatchEvent(completeEventObj);
120
121 expect(clickListener).toHaveBeenCalledWith(clickEventObj);
122 expect(completeListener).toHaveBeenCalledWith(completeEventObj);
123 });
124
125 it("Extending EventDispatcher that event dispatches", function () {
126 var myCompany,
127 addListener = jasmine.createSpy('addListener'),
128 addEmployee = 'addEmployee',
129 employee = {name: 'Ricky'},
130 Work = function () {
131 this.addEmployee = function (employee) {
132 this.dispatchEvent({type: addEmployee, employee: employee});
133 };
134 };
135 Work.extend(EventDispatcher);
136
137 myCompany = new Work();
138 myCompany.addEventListener(addEmployee, addListener, myCompany);
139 myCompany.addEmployee(employee);
140
141 expect(addListener).toHaveBeenCalled();
142 expect(addListener.calls[0].args[0].employee).toBe(employee);
143 });
144
145 it("extending EventDispatcher with 2 instances that the same event is unique to the instance", function () {
146 var myCompany,
147 otherCompany,
148 addMyListener = jasmine.createSpy('addMyListener'),
149 addMarkListener = jasmine.createSpy('addMarkListener'),
150 addEmployee = 'addEmployee',
151 employeeRick = {name: 'Ricky'},
152 employeeMark = {name: 'Mark'},
153 Work = function () {
154 this.addEmployee = function (employee) {
155 this.dispatchEvent({type: addEmployee, employee: employee});
156 };
157 };
158 Work.extend(EventDispatcher);
159
160 myCompany = new Work();
161 myCompany.addEventListener(addEmployee, addMyListener, myCompany);
162 myCompany.addEmployee(employeeRick);
163
164 otherCompany = new Work();
165 otherCompany.addEventListener(addEmployee, addMarkListener, otherCompany);
166 otherCompany.addEmployee(employeeMark);
167
168 expect(addMyListener).toHaveBeenCalled();
169 expect(addMyListener.calls[0].args[0].employee).toBe(employeeRick);
170
171 expect(addMarkListener).toHaveBeenCalled();
172 expect(addMarkListener.calls[0].args[0].employee).toBe(employeeMark);
173 });
174});
\No newline at end of file