This repository was archived by the owner on Apr 20, 2018. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 99
/
Copy pathtests.mutationobserver.js
85 lines (64 loc) · 2.31 KB
/
tests.mutationobserver.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
(function () {
'use strict';
/* jshint undef: true, unused: true */
/* globals QUnit, test, equal, Rx, window */
var original, mutationObserver;
function MockMutationObserver(next) {
this._next = next;
this._connected = false;
mutationObserver = this;
}
MockMutationObserver.prototype.observe = function (target, options) {
this._target = target;
this._options = options;
this._connected = true;
};
MockMutationObserver.prototype.disconnect = function () {
this._connected = false;
};
MockMutationObserver.prototype.trigger = function (data) {
this._next(data);
};
QUnit.module('Websocket', {
beforeEach: function(){
// mock WebSocket
original = window.MutationObserver;
},
afterEach: function(){
window.MutationObserver = original;
}
});
var DOM = Rx.DOM,
Observer = Rx.Observer,
TestScheduler = Rx.TestScheduler,
onNext = Rx.ReactiveTest.onNext;
test('MutationObserver not created until subscribe', function () {
window.MutationObserver = MockMutationObserver;
var source = Rx.DOM.fromMutationObserver('foo', 'bar');
equal(mutationObserver, undefined);
var d = source.subscribe(Observer.create());
equal(mutationObserver._target, 'foo');
equal(mutationObserver._options, 'bar');
equal(mutationObserver._connected, true);
d.dispose();
equal(mutationObserver._connected, false);
});
test('MutationObserver fires values on change', function () {
window.MutationObserver = MockMutationObserver;
var scheduler = new TestScheduler();
var source, subscription;
var results = scheduler.createObserver();
scheduler.scheduleAbsolute(null, 100, function () { source = DOM.fromMutationObserver('foo'); });
scheduler.scheduleAbsolute(null, 200, function () { subscription = source.subscribe(results); });
scheduler.scheduleAbsolute(null, 1000, function () { subscription.dispose(); });
scheduler.scheduleAbsolute(null, 300, function () { mutationObserver.trigger(1); });
scheduler.scheduleAbsolute(null, 400, function () { mutationObserver.trigger(2); });
scheduler.scheduleAbsolute(null, 500, function () { mutationObserver.trigger(3); });
scheduler.start();
results.messages.assertEqual(
onNext(300, 1),
onNext(400, 2),
onNext(500, 3)
);
});
}());