-
Notifications
You must be signed in to change notification settings - Fork 3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
test(timeoutWith): add subscription assertions
Add subscription assertions on timeoutWith tests. The source observable must be unsubscribed when the 'withObservable' is subscribed to. This is aligned to the behavior of timeout(With) in RxJS 4.
- Loading branch information
Showing
1 changed file
with
180 additions
and
39 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,119 +1,260 @@ | ||
/* globals describe, it, expect, expectObservable, hot, cold, rxTestScheduler */ | ||
/* globals describe, it, expect, expectObservable, expectSubscriptions, hot, cold, rxTestScheduler */ | ||
var Rx = require('../../dist/cjs/Rx'); | ||
var Observable = Rx.Observable; | ||
|
||
describe('Observable.prototype.timeoutWith()', function () { | ||
it('should timeout after a specified period then subscribe to the passed observable', function () { | ||
var e1 = Observable.never(); | ||
var e2 = cold('--x--y--z--|'); | ||
var e1 = cold('-'); | ||
var e1subs = '^ ! '; | ||
var e2 = cold('--x--y--z--|'); | ||
var e2subs = ' ^ !'; | ||
var expected = '-------x--y--z--|'; | ||
|
||
expectObservable(e1.timeoutWith(50, e2, rxTestScheduler)).toBe(expected); | ||
var result = e1.timeoutWith(50, e2, rxTestScheduler); | ||
|
||
expectObservable(result).toBe(expected); | ||
expectSubscriptions(e1.subscriptions).toBe(e1subs); | ||
expectSubscriptions(e2.subscriptions).toBe(e2subs); | ||
}); | ||
|
||
it('should timeout at a specified date then subscribe to the passed observable', function () { | ||
var e1 = Observable.never(); | ||
var e2 = cold('--x--y--z--|'); | ||
var e1 = cold('-'); | ||
var e1subs = '^ ! '; | ||
var e2 = cold( '--x--y--z--|'); | ||
var e2subs = ' ^ !'; | ||
var expected = '------------x--y--z--|'; | ||
|
||
expectObservable(e1.timeoutWith(new Date(rxTestScheduler.now() + 100), e2, rxTestScheduler)).toBe(expected); | ||
var result = e1.timeoutWith(new Date(rxTestScheduler.now() + 100), e2, rxTestScheduler); | ||
|
||
expectObservable(result).toBe(expected); | ||
expectSubscriptions(e1.subscriptions).toBe(e1subs); | ||
expectSubscriptions(e2.subscriptions).toBe(e2subs); | ||
}); | ||
|
||
it('should timeout after a specified period between emit then subscribe to the passed observable when source emits', function () { | ||
it('should timeout after a specified period between emit then subscribe ' + | ||
'to the passed observable when source emits', function () { | ||
var e1 = hot('---a---b------c---|'); | ||
var e2 = cold('-x-y-|'); | ||
var expected = '---a---b----x-y-|'; | ||
var e1subs = '^ ! '; | ||
var e2 = cold( '-x-y-| '); | ||
var e2subs = ' ^ ! '; | ||
var expected = '---a---b----x-y-| '; | ||
|
||
expectObservable(e1.timeoutWith(40, e2, rxTestScheduler)).toBe(expected); | ||
var result = e1.timeoutWith(40, e2, rxTestScheduler); | ||
|
||
expectObservable(result).toBe(expected); | ||
expectSubscriptions(e1.subscriptions).toBe(e1subs); | ||
expectSubscriptions(e2.subscriptions).toBe(e2subs); | ||
}); | ||
|
||
it('should timeout after a specified period then subscribe to the passed observable when source is empty', function () { | ||
var e1 = hot('-------------|'); | ||
var e2 = cold('----x----|'); | ||
it('should allow unsubscribing explicitly and early', function () { | ||
var e1 = hot('---a---b-----c----|'); | ||
var e1subs = '^ ! '; | ||
var e2 = cold( '-x---y| '); | ||
var e2subs = ' ^ ! '; | ||
var expected = '---a---b----x-- '; | ||
var unsub = ' ! '; | ||
|
||
var result = e1.timeoutWith(40, e2, rxTestScheduler); | ||
|
||
expectObservable(result, unsub).toBe(expected); | ||
expectSubscriptions(e1.subscriptions).toBe(e1subs); | ||
expectSubscriptions(e2.subscriptions).toBe(e2subs); | ||
}); | ||
|
||
it('should not break unsubscription chain when unsubscribed explicitly', function () { | ||
var e1 = hot('---a---b-----c----|'); | ||
var e1subs = '^ ! '; | ||
var e2 = cold( '-x---y| '); | ||
var e2subs = ' ^ ! '; | ||
var expected = '---a---b----x-- '; | ||
var unsub = ' ! '; | ||
|
||
var result = e1 | ||
.mergeMap(function (x) { return Observable.of(x); }) | ||
.timeoutWith(40, e2, rxTestScheduler) | ||
.mergeMap(function (x) { return Observable.of(x); }); | ||
|
||
expectObservable(result, unsub).toBe(expected); | ||
expectSubscriptions(e1.subscriptions).toBe(e1subs); | ||
expectSubscriptions(e2.subscriptions).toBe(e2subs); | ||
}); | ||
|
||
it('should not subscribe to withObservable after explicit unsubscription', function () { | ||
var e1 = cold('---a------b------'); | ||
var e1subs = '^ ! '; | ||
var e2 = cold( 'i---j---|'); | ||
var e2subs = []; | ||
var expected = '---a-- '; | ||
var unsub = ' ! '; | ||
|
||
var result = e1 | ||
.mergeMap(function (x) { return Observable.of(x); }) | ||
.timeoutWith(50, e2, rxTestScheduler) | ||
.mergeMap(function (x) { return Observable.of(x); }); | ||
|
||
expectObservable(result, unsub).toBe(expected); | ||
expectSubscriptions(e1.subscriptions).toBe(e1subs); | ||
expectSubscriptions(e2.subscriptions).toBe(e2subs); | ||
}); | ||
|
||
it('should timeout after a specified period then subscribe to the ' + | ||
'passed observable when source is empty', function () { | ||
var e1 = hot('-------------| '); | ||
var e1subs = '^ ! '; | ||
var e2 = cold( '----x----|'); | ||
var e2subs = ' ^ !'; | ||
var expected = '--------------x----|'; | ||
|
||
expectObservable(e1.timeoutWith(100, e2, rxTestScheduler)).toBe(expected); | ||
var result = e1.timeoutWith(100, e2, rxTestScheduler); | ||
|
||
expectObservable(result).toBe(expected); | ||
expectSubscriptions(e1.subscriptions).toBe(e1subs); | ||
expectSubscriptions(e2.subscriptions).toBe(e2subs); | ||
}); | ||
|
||
it('should timeout after a specified period between emit then never completes if other source does not complete', function () { | ||
it('should timeout after a specified period between emit then never completes ' + | ||
'if other source does not complete', function () { | ||
var e1 = hot('--a--b--------c--d--|'); | ||
var e1subs = '^ ! '; | ||
var e2 = cold('-'); | ||
var expected = '--a--b----'; | ||
var e2subs = ' ^ '; | ||
var expected = '--a--b---- '; | ||
|
||
expectObservable(e1.timeoutWith(40, e2, rxTestScheduler)).toBe(expected); | ||
var result = e1.timeoutWith(40, e2, rxTestScheduler); | ||
|
||
expectObservable(result).toBe(expected); | ||
expectSubscriptions(e1.subscriptions).toBe(e1subs); | ||
expectSubscriptions(e2.subscriptions).toBe(e2subs); | ||
}); | ||
|
||
it('should timeout after a specified period then subscribe to the passed observable when source raises error after timeout', function () { | ||
var e1 = hot('-------------#'); | ||
var e2 = cold('----x----|'); | ||
it('should timeout after a specified period then subscribe to the ' + | ||
'passed observable when source raises error after timeout', function () { | ||
var e1 = hot('-------------# '); | ||
var e1subs = '^ ! '; | ||
var e2 = cold( '----x----|'); | ||
var e2subs = ' ^ !'; | ||
var expected = '--------------x----|'; | ||
|
||
expectObservable(e1.timeoutWith(100, e2, rxTestScheduler)).toBe(expected); | ||
var result = e1.timeoutWith(100, e2, rxTestScheduler); | ||
|
||
expectObservable(result).toBe(expected); | ||
expectSubscriptions(e1.subscriptions).toBe(e1subs); | ||
expectSubscriptions(e2.subscriptions).toBe(e2subs); | ||
}); | ||
|
||
it('should timeout after a specified period between emit then never completes if other source emits but not complete', function () { | ||
var e1 = hot('-------------|'); | ||
var e2 = cold('----x----'); | ||
it('should timeout after a specified period between emit then never completes ' + | ||
'if other source emits but not complete', function () { | ||
var e1 = hot('-------------| '); | ||
var e1subs = '^ ! '; | ||
var e2 = cold('----x----'); | ||
var e2subs = ' ^ '; | ||
var expected = '--------------x----'; | ||
|
||
expectObservable(e1.timeoutWith(100, e2, rxTestScheduler)).toBe(expected); | ||
var result = e1.timeoutWith(100, e2, rxTestScheduler); | ||
|
||
expectObservable(result).toBe(expected); | ||
expectSubscriptions(e1.subscriptions).toBe(e1subs); | ||
expectSubscriptions(e2.subscriptions).toBe(e2subs); | ||
}); | ||
|
||
it('should not timeout if source completes within timeout period', function () { | ||
var e1 = hot('-----|'); | ||
var e2 = cold('----x----'); | ||
var e1subs = '^ !'; | ||
var e2 = cold( '----x----'); | ||
var e2subs = []; | ||
var expected = '-----|'; | ||
|
||
expectObservable(e1.timeoutWith(100, e2, rxTestScheduler)).toBe(expected); | ||
var result = e1.timeoutWith(100, e2, rxTestScheduler); | ||
|
||
expectObservable(result).toBe(expected); | ||
expectSubscriptions(e1.subscriptions).toBe(e1subs); | ||
expectSubscriptions(e2.subscriptions).toBe(e2subs); | ||
}); | ||
|
||
it('should not timeout if source raises error within timeout period', function () { | ||
var e1 = hot('-----#'); | ||
var e2 = cold('----x----|'); | ||
var e1subs = '^ !'; | ||
var e2 = cold( '----x----|'); | ||
var e2subs = []; | ||
var expected = '-----#'; | ||
|
||
expectObservable(e1.timeoutWith(100, e2, rxTestScheduler)).toBe(expected); | ||
var result = e1.timeoutWith(100, e2, rxTestScheduler); | ||
|
||
expectObservable(result).toBe(expected); | ||
expectSubscriptions(e1.subscriptions).toBe(e1subs); | ||
expectSubscriptions(e2.subscriptions).toBe(e2subs); | ||
}); | ||
|
||
it('should not timeout if source emits within timeout period', function () { | ||
var e1 = hot('--a--b--c--d--e--|'); | ||
var e1subs = '^ !'; | ||
var e2 = cold('----x----|'); | ||
var e2subs = []; | ||
var expected = '--a--b--c--d--e--|'; | ||
|
||
expectObservable(e1.timeoutWith(50, e2, rxTestScheduler)).toBe(expected); | ||
var result = e1.timeoutWith(50, e2, rxTestScheduler); | ||
|
||
expectObservable(result).toBe(expected); | ||
expectSubscriptions(e1.subscriptions).toBe(e1subs); | ||
expectSubscriptions(e2.subscriptions).toBe(e2subs); | ||
}); | ||
|
||
it('should timeout after specified Date then subscribe to the passed observable', function () { | ||
var e1 = hot('--a--b--c--d--e--|'); | ||
var e2 = cold('--z--|'); | ||
var expected = '--a--b---z--|'; | ||
var e1subs = '^ ! '; | ||
var e2 = cold( '--z--| '); | ||
var e2subs = ' ^ ! '; | ||
var expected = '--a--b---z--| '; | ||
|
||
var result = e1.timeoutWith(new Date(rxTestScheduler.now() + 70), e2, rxTestScheduler); | ||
|
||
expectObservable(e1.timeoutWith(new Date(rxTestScheduler.now() + 70), e2, rxTestScheduler)).toBe(expected); | ||
expectObservable(result).toBe(expected); | ||
expectSubscriptions(e1.subscriptions).toBe(e1subs); | ||
expectSubscriptions(e2.subscriptions).toBe(e2subs); | ||
}); | ||
|
||
it('should not timeout if source completes within specified Date', function () { | ||
var e1 = hot('--a--b--c--d--e--|'); | ||
var e1subs = '^ !'; | ||
var e2 = cold('--x--|'); | ||
var e2subs = []; | ||
var expected = '--a--b--c--d--e--|'; | ||
|
||
var timeoutValue = new Date(Date.now() + (expected.length + 2) * 10); | ||
|
||
expectObservable(e1.timeoutWith(timeoutValue, e2, rxTestScheduler)).toBe(expected); | ||
var result = e1.timeoutWith(timeoutValue, e2, rxTestScheduler); | ||
|
||
expectObservable(result).toBe(expected); | ||
expectSubscriptions(e1.subscriptions).toBe(e1subs); | ||
expectSubscriptions(e2.subscriptions).toBe(e2subs); | ||
}); | ||
|
||
it('should not timeout if source raises error within specified Date', function () { | ||
var e1 = hot('---a---#'); | ||
var e1subs = '^ !'; | ||
var e2 = cold('--x--|'); | ||
var e2subs = []; | ||
var expected = '---a---#'; | ||
|
||
expectObservable(e1.timeoutWith(new Date(Date.now() + 100), e2, rxTestScheduler)).toBe(expected); | ||
var result = e1.timeoutWith(new Date(Date.now() + 100), e2, rxTestScheduler); | ||
|
||
expectObservable(result).toBe(expected); | ||
expectSubscriptions(e1.subscriptions).toBe(e1subs); | ||
expectSubscriptions(e2.subscriptions).toBe(e2subs); | ||
}); | ||
|
||
it('should timeout specified Date after specified Date then never completes if other source does not complete', function () { | ||
it('should timeout specified Date after specified Date then never completes ' + | ||
'if other source does not complete', function () { | ||
var e1 = hot('---a---b---c---d---e---|'); | ||
var e1subs = '^ ! '; | ||
var e2 = cold('-'); | ||
var expected = '---a---b--'; | ||
var e2subs = ' ^ '; | ||
var expected = '---a---b--- '; | ||
|
||
var result = e1.timeoutWith(new Date(rxTestScheduler.now() + 100), e2, rxTestScheduler); | ||
|
||
expectObservable(e1.timeoutWith(new Date(rxTestScheduler.now() + 100), e2, rxTestScheduler)).toBe(expected); | ||
expectObservable(result).toBe(expected); | ||
expectSubscriptions(e1.subscriptions).toBe(e1subs); | ||
expectSubscriptions(e2.subscriptions).toBe(e2subs); | ||
}); | ||
}); |