Skip to content
This repository was archived by the owner on Apr 20, 2018. It is now read-only.

Commit 78d72eb

Browse files
Fixing fromEvent tests
1 parent 97a77aa commit 78d72eb

1 file changed

Lines changed: 151 additions & 38 deletions

File tree

tests/observable/fromevent.js

Lines changed: 151 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
(function () {
2+
'use strict';
23
/* jshint undef: true, unused: true */
34
/* globals QUnit, test, Rx, equal */
45
var Observable = Rx.Observable,
56
slice = Array.prototype.slice,
6-
onNext = Rx.ReactiveTest.onNext;
7+
onNext = Rx.ReactiveTest.onNext,
8+
onError = Rx.ReactiveTest.onError;
79

810
QUnit.module('FromEvent', {
911
setup : function() {
1012
this.scheduler = new Rx.TestScheduler();
1113
}
1214
});
1315

14-
15-
1616
/** Fake DOM Element */
1717
function FakeDOMStandardElement(nodeName) {
1818
this.listeners = {};
@@ -38,7 +38,7 @@
3838
}
3939
};
4040

41-
test('Event_1', function () {
41+
test('Event DOM Element', function () {
4242
var element = new FakeDOMStandardElement('foo');
4343

4444
this.scheduler.scheduleFuture(null, 210, function() {
@@ -59,31 +59,91 @@
5959
equal(element.removeEventListenerCalled, true);
6060
});
6161

62-
/** Fake DOM Element */
62+
test('Event DOM Element selector', function () {
63+
var element = new FakeDOMStandardElement('foo');
64+
65+
this.scheduler.scheduleFuture(null, 210, function() {
66+
equal(element.addEventListenerCalled, true);
67+
equal(element.removeEventListenerCalled, false);
68+
});
69+
70+
this.scheduler.scheduleFuture(null, 220, function() {
71+
element.trigger('someEvent', 'baz', 'quux');
72+
});
73+
74+
var result = this.scheduler.startScheduler(function() {
75+
return Observable.fromEvent(
76+
element,
77+
'someEvent',
78+
function (baz, quux) {
79+
return { foo: baz, bar: quux };
80+
}
81+
);
82+
});
83+
84+
result.messages.assertEqual(
85+
onNext(220, {foo: 'baz', bar: 'quux'})
86+
);
87+
88+
equal(element.removeEventListenerCalled, true);
89+
});
90+
91+
test('Event DOM Element selector throws', function () {
92+
var error = new Error();
93+
94+
var element = new FakeDOMStandardElement('foo');
95+
96+
this.scheduler.scheduleFuture(null, 210, function() {
97+
equal(element.addEventListenerCalled, true);
98+
equal(element.removeEventListenerCalled, false);
99+
});
100+
101+
this.scheduler.scheduleFuture(null, 220, function() {
102+
element.trigger('someEvent', 'baz', 'quux');
103+
});
104+
105+
var result = this.scheduler.startScheduler(function() {
106+
return Observable.fromEvent(
107+
element,
108+
'someEvent',
109+
function () {
110+
throw error;
111+
}
112+
);
113+
});
114+
115+
result.messages.assertEqual(
116+
onError(220, error)
117+
);
118+
119+
equal(element.removeEventListenerCalled, true);
120+
});
121+
122+
/** Fake Node EventEmitter */
63123
function FakeEventEmitter() {
64124
this.listeners = {};
65125
this.addListenerCalled = false;
66126
this.removeListenerCalled = false;
67127
}
68128

69-
FakeEventEmitter.prototype.addEventListener = function (eventName, handler, useCapture) {
129+
FakeEventEmitter.prototype.addListener = function (eventName, handler, useCapture) {
70130
this.listeners[eventName] = handler;
71131
this.addListenerCalled = true;
72132
};
73133

74-
FakeEventEmitter.prototype.removeEventListener = function (eventName, handler, useCapture) {
134+
FakeEventEmitter.prototype.removeListener = function (eventName, handler, useCapture) {
75135
delete this.listeners[eventName];
76136
this.removeListenerCalled = true;
77137
};
78138

79139
FakeEventEmitter.prototype.emit = function (eventName, eventData) {
140+
var args = slice.call(arguments, 1);
80141
if (eventName in this.listeners) {
81-
this.listeners[eventName](eventData);
142+
this.listeners[eventName].apply(null, args);
82143
}
83144
};
84145

85-
test('Event_3', function () {
86-
146+
test('Event EventEmitter', function () {
87147
var element = new FakeEventEmitter();
88148

89149
this.scheduler.scheduleFuture(null, 210, function() {
@@ -103,20 +163,19 @@
103163
equal(element.removeListenerCalled, true);
104164
});
105165

106-
test('Event_4', function () {
107-
var scheduler = new Rx.TestScheduler();
108-
var element = new FakeDOMStandardElement('foo');
166+
test('Event EventEmitter selector', function () {
167+
var element = new FakeEventEmitter();
109168

110-
scheduler.scheduleFuture(null, 210, function() {
111-
equal(element.addEventListenerCalled, true);
112-
equal(element.removeEventListenerCalled, false);
169+
this.scheduler.scheduleFuture(null, 210, function() {
170+
equal(element.addListenerCalled, true);
171+
equal(element.removeListenerCalled, false);
113172
});
114173

115-
scheduler.scheduleFuture(null, 220, function() {
116-
element.trigger('someEvent', 'baz', 'quux');
174+
this.scheduler.scheduleFuture(null, 220, function() {
175+
element.emit('someEvent', 'baz', 'quux');
117176
});
118177

119-
var result = scheduler.startScheduler(function() {
178+
var result = this.scheduler.startScheduler(function() {
120179
return Observable.fromEvent(
121180
element,
122181
'someEvent',
@@ -127,17 +186,44 @@
127186
});
128187

129188
result.messages.assertEqual(
130-
onNext(220, function(x) {
131-
equal(x.value.foo, 'baz');
132-
equal(x.value.bar, 'quux');
133-
return true;
134-
})
189+
onNext(220, {foo: 'baz', bar: 'quux'})
135190
);
136191

137-
equal(element.removeEventListenerCalled, true);
192+
equal(element.removeListenerCalled, true);
138193
});
139194

140-
/** Fake DOM Element */
195+
test('Event EventEmitter selector throws', function () {
196+
var error = new Error();
197+
198+
var element = new FakeEventEmitter();
199+
200+
this.scheduler.scheduleFuture(null, 210, function() {
201+
equal(element.addListenerCalled, true);
202+
equal(element.removeListenerCalled, false);
203+
});
204+
205+
this.scheduler.scheduleFuture(null, 220, function() {
206+
element.emit('someEvent', 'baz', 'quux');
207+
});
208+
209+
var result = this.scheduler.startScheduler(function() {
210+
return Observable.fromEvent(
211+
element,
212+
'someEvent',
213+
function () {
214+
throw error;
215+
}
216+
);
217+
});
218+
219+
result.messages.assertEqual(
220+
onError(220, error)
221+
);
222+
223+
equal(element.removeListenerCalled, true);
224+
});
225+
226+
/** Fake jQuery/Angular/Ember Element */
141227
function FakeJQueryElement(nodeName) {
142228
this.listeners = {};
143229
this.nodeName = nodeName;
@@ -162,10 +248,10 @@
162248
}
163249
};
164250

165-
test('Event_5', function () {
251+
test('Event jQuery/Angular/Ember Element', function () {
166252
var element = new FakeJQueryElement('foo');
167253

168-
this.scheduler.scheduleFuture(null, 210, function() {
254+
this.scheduler.scheduleFuture(null, 210, function(){
169255
equal(element.onCalled, true);
170256
equal(element.offCalled, false);
171257
});
@@ -185,34 +271,61 @@
185271
equal(element.offCalled, true);
186272
});
187273

188-
test('Event_6', function () {
274+
test('Event jQuery/Angular/Ember Element selector', function () {
189275
var element = new FakeJQueryElement('foo');
190276

191-
this.scheduler.scheduleFuture(null, 210, function() {
277+
this.scheduler.scheduleFuture(null, 210, function(){
278+
equal(element.onCalled, true);
279+
equal(element.offCalled, false);
280+
});
281+
282+
this.scheduler.scheduleFuture(null, 220, function() {
192283
element.trigger('someEvent', 'baz', 'quux');
193284
});
194285

195-
this.scheduler.scheduleFuture(null, 220, function(){
286+
var result = this.scheduler.startScheduler(function(){
287+
return Observable.fromEvent(
288+
element,
289+
'someEvent',
290+
function (baz, quux) {
291+
return { foo: baz, bar: quux };
292+
}
293+
);
294+
});
295+
296+
result.messages.assertEqual(
297+
onNext(220, {foo: 'baz', bar: 'quux'})
298+
);
299+
300+
equal(element.offCalled, true);
301+
});
302+
303+
test('Event jQuery/Angular/Ember Element selector throws', function () {
304+
var error = new Error();
305+
306+
var element = new FakeJQueryElement('foo');
307+
308+
this.scheduler.scheduleFuture(null, 210, function(){
196309
equal(element.onCalled, true);
197310
equal(element.offCalled, false);
198311
});
199312

313+
this.scheduler.scheduleFuture(null, 220, function() {
314+
element.trigger('someEvent', 'baz', 'quux');
315+
});
316+
200317
var result = this.scheduler.startScheduler(function(){
201318
return Observable.fromEvent(
202319
element,
203320
'someEvent',
204-
function (baz, quux) {
205-
return { foo: baz, bar: quux };
321+
function () {
322+
throw error;
206323
}
207324
);
208325
});
209326

210327
result.messages.assertEqual(
211-
onNext(210, function(x) {
212-
equal(x.value.foo, 'baz');
213-
equal(x.value.bar, 'quux');
214-
return true;
215-
})
328+
onError(220, error)
216329
);
217330

218331
equal(element.offCalled, true);

0 commit comments

Comments
 (0)