forked from Reactive-Extensions/RxJS
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfromevent.js
More file actions
128 lines (99 loc) · 3.39 KB
/
Copy pathfromevent.js
File metadata and controls
128 lines (99 loc) · 3.39 KB
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
126
127
128
module('FromEvent');
var TestScheduler = Rx.TestScheduler,
Observable = Rx.Observable,
slice = Array.prototype.slice;
/** Fake DOM Element */
function FakeDOMStandardElement(nodeName) {
this.listeners = {};
this.nodeName = nodeName;
this.addEventListenerCalled = false;
this.removeEventListenerCalled = false;
}
FakeDOMStandardElement.prototype.addEventListener = function (eventName, handler, useCapture) {
this.listeners[eventName] = handler;
this.addEventListenerCalled = true;
};
FakeDOMStandardElement.prototype.removeEventListener = function (eventName, handler, useCapture) {
delete this.listeners[eventName];
this.removeEventListenerCalled = true;
};
FakeDOMStandardElement.prototype.trigger = function (eventName) {
var args = slice.call(arguments, 1);
if (eventName in this.listeners) {
this.listeners[eventName].apply(null, args);
}
};
test('Event_1', function () {
var element = new FakeDOMStandardElement('foo');
var d = Observable.fromEvent(element, 'someEvent')
.subscribe(function (x) {
equal(x, 42);
});
element.trigger('someEvent', 42);
equal(element.addEventListenerCalled, true);
equal(element.removeEventListenerCalled, false);
d.dispose();
equal(element.removeEventListenerCalled, true);
});
test('Event_2', function () {
var elements = [new FakeDOMStandardElement('foo')];
var d = Observable.fromEvent(elements, 'someEvent')
.subscribe(function (x) {
equal(x, 42);
});
elements[0].trigger('someEvent', 42);
equal(elements[0].addEventListenerCalled, true);
equal(elements[0].removeEventListenerCalled, false);
d.dispose();
equal(elements[0].removeEventListenerCalled, true);
});
/** Fake DOM Element */
function FakeEventEmitter() {
this.listeners = {};
this.addListenerCalled = false;
this.removeListenerCalled = false;
}
FakeEventEmitter.prototype.addEventListener = function (eventName, handler, useCapture) {
this.listeners[eventName] = handler;
this.addListenerCalled = true;
};
FakeEventEmitter.prototype.removeEventListener = function (eventName, handler, useCapture) {
delete this.listeners[eventName];
this.removeListenerCalled = true;
};
FakeEventEmitter.prototype.emit = function (eventName, eventData) {
if (eventName in this.listeners) {
this.listeners[eventName](eventData);
}
};
test('Event_3', function () {
var element = new FakeEventEmitter();
var d = Observable.fromEvent(element, 'someEvent')
.subscribe(function (x) {
equal(x, 42);
});
element.emit('someEvent', 42);
equal(element.addListenerCalled, true);
equal(element.removeListenerCalled, false);
d.dispose();
equal(element.removeListenerCalled, true);
});
test('Event_4', function () {
var element = new FakeDOMStandardElement('foo');
var d = Observable.fromEvent(
element,
'someEvent',
function (arr) {
return { foo: arr[0], bar: arr[1] };
}
)
.subscribe(function (x) {
equal(x.foo, 'baz');
equal(x.bar, 'quux');
});
element.trigger('someEvent', 'baz', 'quux');
equal(element.addEventListenerCalled, true);
equal(element.removeEventListenerCalled, false);
d.dispose();
equal(element.removeEventListenerCalled, true);
});