1 | describe("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 |