1+ /* globals describe, it, expect, expectObservable, expectSubscriptions, cold, hot, rxTestScheduler */
2+ var Rx = require ( '../../dist/cjs/Rx.KitchenSink' ) ;
3+ var Observable = Rx . Observable ;
4+
5+ describe ( 'Observable.prototype.sampleTime' , function ( ) {
6+ it ( 'should get samples on a delay' , function ( ) {
7+ var e1 = hot ( '----a-^--b----c----d----e----f----|' ) ;
8+ var e1subs = '^ !' ;
9+ var expected = '-----------c----------e-----|' ;
10+ // timer -----------!----------!---------
11+
12+ expectObservable ( e1 . sampleTime ( 110 , rxTestScheduler ) ) . toBe ( expected ) ;
13+ expectSubscriptions ( e1 . subscriptions ) . toBe ( e1subs ) ;
14+ } ) ;
15+
16+ it ( 'should sample nothing if new value has not arrived' , function ( ) {
17+ var e1 = hot ( '----a-^--b----c--------------f----|' ) ;
18+ var e1subs = '^ !' ;
19+ var expected = '-----------c----------------|' ;
20+ // timer -----------!----------!---------
21+
22+ expectObservable ( e1 . sampleTime ( 110 , rxTestScheduler ) ) . toBe ( expected ) ;
23+ expectSubscriptions ( e1 . subscriptions ) . toBe ( e1subs ) ;
24+ } ) ;
25+
26+ it ( 'should sample ifnew value has arrived, even if it is the same value' , function ( ) {
27+ var e1 = hot ( '----a-^--b----c----------c---f----|' ) ;
28+ var e1subs = '^ !' ;
29+ var expected = '-----------c----------c-----|' ;
30+ // timer -----------!----------!---------
31+
32+ expectObservable ( e1 . sampleTime ( 110 , rxTestScheduler ) ) . toBe ( expected ) ;
33+ expectSubscriptions ( e1 . subscriptions ) . toBe ( e1subs ) ;
34+ } ) ;
35+
36+ it ( 'should sample nothing if source has not nexted by time of sample' , function ( ) {
37+ var e1 = hot ( '----a-^-------------b-------------|' ) ;
38+ var e1subs = '^ !' ;
39+ var expected = '----------------------b-----|' ;
40+ // timer -----------!----------!---------
41+
42+ expectObservable ( e1 . sampleTime ( 110 , rxTestScheduler ) ) . toBe ( expected ) ;
43+ expectSubscriptions ( e1 . subscriptions ) . toBe ( e1subs ) ;
44+ } ) ;
45+
46+ it ( 'should raise error if source raises error' , function ( ) {
47+ var e1 = hot ( '----a-^--b----c----d----#' ) ;
48+ var e1subs = '^ !' ;
49+ var expected = '-----------c------#' ;
50+ // timer -----------!----------!---------
51+
52+ expectObservable ( e1 . sampleTime ( 110 , rxTestScheduler ) ) . toBe ( expected ) ;
53+ expectSubscriptions ( e1 . subscriptions ) . toBe ( e1subs ) ;
54+ } ) ;
55+
56+ it ( 'should allow unsubscribing explicitly and early' , function ( ) {
57+ var e1 = hot ( '----a-^--b----c----d----e----f----|' ) ;
58+ var unsub = ' ! ' ;
59+ var e1subs = '^ ! ' ;
60+ var expected = '-----------c----- ' ;
61+ // timer -----------!----------!---------
62+
63+ expectObservable ( e1 . sampleTime ( 110 , rxTestScheduler ) , unsub ) . toBe ( expected ) ;
64+ expectSubscriptions ( e1 . subscriptions ) . toBe ( e1subs ) ;
65+ } ) ;
66+
67+ it ( 'should not break unsubscription chains when result is unsubscribed explicitly' , function ( ) {
68+ var e1 = hot ( '----a-^--b----c----d----e----f----|' ) ;
69+ var e1subs = '^ ! ' ;
70+ // timer -----------!----------!---------
71+ var expected = '-----------c----- ' ;
72+ var unsub = ' ! ' ;
73+
74+ var result = e1
75+ . mergeMap ( function ( x ) { return Observable . of ( x ) ; } )
76+ . sampleTime ( 110 , rxTestScheduler )
77+ . mergeMap ( function ( x ) { return Observable . of ( x ) ; } ) ;
78+
79+ expectObservable ( result , unsub ) . toBe ( expected ) ;
80+ expectSubscriptions ( e1 . subscriptions ) . toBe ( e1subs ) ;
81+ } ) ;
82+
83+ it ( 'should completes if source does not emits' , function ( ) {
84+ var e1 = cold ( '|' ) ;
85+ var e1subs = '(^!)' ;
86+ var expected = '|' ;
87+
88+ expectObservable ( e1 . sampleTime ( 60 , rxTestScheduler ) ) . toBe ( expected ) ;
89+ expectSubscriptions ( e1 . subscriptions ) . toBe ( e1subs ) ;
90+ } ) ;
91+
92+ it ( 'should raise error if source throws immediately' , function ( ) {
93+ var e1 = cold ( '#' ) ;
94+ var e1subs = '(^!)' ;
95+ var expected = '#' ;
96+
97+ expectObservable ( e1 . sampleTime ( 60 , rxTestScheduler ) ) . toBe ( expected ) ;
98+ expectSubscriptions ( e1 . subscriptions ) . toBe ( e1subs ) ;
99+ } ) ;
100+
101+ it ( 'should not completes if source does not complete' , function ( ) {
102+ var e1 = cold ( '-' ) ;
103+ var e1subs = '^' ;
104+ var expected = '-' ;
105+
106+ expectObservable ( e1 . sampleTime ( 60 , rxTestScheduler ) ) . toBe ( expected ) ;
107+ expectSubscriptions ( e1 . subscriptions ) . toBe ( e1subs ) ;
108+ } ) ;
109+ } ) ;
0 commit comments