-
Notifications
You must be signed in to change notification settings - Fork 3k
/
multicast-spec.js
111 lines (85 loc) · 2.68 KB
/
multicast-spec.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
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
/* globals describe, it, expect */
var Rx = require('../../dist/cjs/Rx');
var Observable = Rx.Observable;
var Subject = Rx.Subject;
describe('Observable.prototype.multicast()', function () {
it('should accept Subjects', function (done) {
var expected = [1,2,3,4];
var connectable = Observable.of(1,2,3,4).multicast(new Subject());
connectable.subscribe(function (x) { expect(x).toBe(expected.shift()); },
done.throw,
done);
connectable.connect();
});
it('should accept Subject factory functions', function (done) {
var expected = [1,2,3,4];
var connectable = Observable.of(1,2,3,4).multicast(function () { return new Subject(); });
connectable.subscribe(function (x) { expect(x).toBe(expected.shift()); },
done.throw,
done);
connectable.connect();
});
it('should multicast one observable to multiple observers', function (done) {
var results1 = [];
var results2 = [];
var subscriptions = 0;
var source = new Observable(function (observer) {
subscriptions++;
observer.next(1);
observer.next(2);
observer.next(3);
observer.next(4);
observer.complete();
});
var connectable = source.multicast(function () {
return new Subject();
});
connectable.subscribe(function (x) {
results1.push(x);
});
connectable.subscribe(function (x) {
results2.push(x);
});
expect(results1).toEqual([]);
expect(results2).toEqual([]);
connectable.connect();
expect(results1).toEqual([1, 2, 3, 4]);
expect(results1).toEqual([1, 2, 3, 4]);
expect(subscriptions).toBe(1);
done();
});
it('should remove all subscribers from the subject when disconnected', function (done) {
var subject = new Subject();
var expected = [1, 2, 3, 4];
var i = 0;
var source = Observable.fromArray([1, 2, 3, 4]).multicast(function () {
//NOTE: This is done for testing only, NEVER do this in prod code, LOL
return subject;
});
source.subscribe(function (x) {
expect(x).toBe(expected[i++]);
}, null, function () {
expect(subject.isUnsubscribed).toBe(true);
done();
});
source.connect();
});
it('should allow you to reconnect by subscribing again', function (done) {
var expected = [1, 2, 3, 4];
var i = 0;
var source = Observable.of(1, 2, 3, 4).multicast(function () {
return new Subject();
});
source.subscribe(function (x) {
expect(x).toBe(expected[i++]);
}, null,
function () {
i = 0;
source.subscribe(function (x) {
expect(x).toBe(expected[i++]);
}, null, done);
source.connect();
});
source.connect();
});
});