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