1
+ /* globals describe, it, expect, hot, expectObservable,, expectSubscriptions */
2
+ var Rx = require ( '../../dist/cjs/Rx.KitchenSink' ) ;
3
+ var Observable = Rx . Observable ;
4
+
5
+ describe ( 'Observable.prototype.sample' , function ( ) {
6
+ it ( 'should get samples when the notifier emits' , function ( ) {
7
+ var e1 = hot ( '----a-^--b----c----d----e----f----| ' ) ;
8
+ var e1subs = '^ ! ' ;
9
+ var e2 = hot ( '-----x----------x----------x----------|' ) ;
10
+ var e2subs = '^ ! ' ;
11
+ var expected = '-----b----------d----------f| ' ;
12
+
13
+ expectObservable ( e1 . sample ( e2 ) ) . toBe ( expected ) ;
14
+ expectSubscriptions ( e1 . subscriptions ) . toBe ( e1subs ) ;
15
+ expectSubscriptions ( e2 . subscriptions ) . toBe ( e2subs ) ;
16
+ } ) ;
17
+
18
+ it ( 'should sample nothing if source has not nexted yet' , function ( ) {
19
+ var e1 = hot ( '----a-^-------b----|' ) ;
20
+ var e1subs = '^ !' ;
21
+ var e2 = hot ( '-----x-------|' ) ;
22
+ var e2subs = '^ !' ;
23
+ var expected = '-------------|' ;
24
+
25
+ expectObservable ( e1 . sample ( e2 ) ) . toBe ( expected ) ;
26
+ expectSubscriptions ( e1 . subscriptions ) . toBe ( e1subs ) ;
27
+ expectSubscriptions ( e2 . subscriptions ) . toBe ( e2subs ) ;
28
+ } ) ;
29
+
30
+ it ( 'should not complete when the notifier completes, nor should it emit' , function ( ) {
31
+ var e1 = hot ( '----a----b----c----d----e----f----' ) ;
32
+ var e1subs = '^ ' ;
33
+ var e2 = hot ( '------x-| ' ) ;
34
+ var e2subs = '^ ! ' ;
35
+ var expected = '------a---------------------------' ;
36
+
37
+ expectObservable ( e1 . sample ( e2 ) ) . toBe ( expected ) ;
38
+ expectSubscriptions ( e1 . subscriptions ) . toBe ( e1subs ) ;
39
+ expectSubscriptions ( e2 . subscriptions ) . toBe ( e2subs ) ;
40
+ } ) ;
41
+
42
+ it ( 'should complete only when the source completes, if notifier completes early' , function ( ) {
43
+ var e1 = hot ( '----a----b----c----d----e----f---|' ) ;
44
+ var e1subs = '^ !' ;
45
+ var e2 = hot ( '------x-| ' ) ;
46
+ var e2subs = '^ ! ' ;
47
+ var expected = '------a--------------------------|' ;
48
+
49
+ expectObservable ( e1 . sample ( e2 ) ) . toBe ( expected ) ;
50
+ expectSubscriptions ( e1 . subscriptions ) . toBe ( e1subs ) ;
51
+ expectSubscriptions ( e2 . subscriptions ) . toBe ( e2subs ) ;
52
+ } ) ;
53
+
54
+ it ( 'should allow unsubscribing explicitly and early' , function ( ) {
55
+ var e1 = hot ( '----a-^--b----c----d----e----f----| ' ) ;
56
+ var unsub = ' ! ' ;
57
+ var e1subs = '^ ! ' ;
58
+ var e2 = hot ( '-----x----------x----------x----------|' ) ;
59
+ var e2subs = '^ ! ' ;
60
+ var expected = '-----b--------- ' ;
61
+
62
+ expectObservable ( e1 . sample ( e2 ) , unsub ) . toBe ( expected ) ;
63
+ expectSubscriptions ( e1 . subscriptions ) . toBe ( e1subs ) ;
64
+ expectSubscriptions ( e2 . subscriptions ) . toBe ( e2subs ) ;
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
+ var e2 = hot ( '-----x----------x----------x----------|' ) ;
71
+ var e2subs = '^ ! ' ;
72
+ var expected = '-----b--------- ' ;
73
+ var unsub = ' ! ' ;
74
+
75
+ var result = e1
76
+ . mergeMap ( function ( x ) { return Observable . of ( x ) ; } )
77
+ . sample ( e2 )
78
+ . mergeMap ( function ( x ) { return Observable . of ( x ) ; } ) ;
79
+
80
+ expectObservable ( result , unsub ) . toBe ( expected ) ;
81
+ expectSubscriptions ( e1 . subscriptions ) . toBe ( e1subs ) ;
82
+ expectSubscriptions ( e2 . subscriptions ) . toBe ( e2subs ) ;
83
+ } ) ;
84
+
85
+ it ( 'should only sample when a new value arrives, even if it is the same value' , function ( ) {
86
+ var e1 = hot ( '----a----b----c----c----e----f----| ' ) ;
87
+ var e1subs = '^ ! ' ;
88
+ var e2 = hot ( '------x-x------xx-x---x----x--------|' ) ;
89
+ var e2subs = '^ ! ' ;
90
+ var expected = '------a--------c------c----e------| ' ;
91
+
92
+ expectObservable ( e1 . sample ( e2 ) ) . toBe ( expected ) ;
93
+ expectSubscriptions ( e1 . subscriptions ) . toBe ( e1subs ) ;
94
+ expectSubscriptions ( e2 . subscriptions ) . toBe ( e2subs ) ;
95
+ } ) ;
96
+
97
+ it ( 'should raise error if source raises error' , function ( ) {
98
+ var e1 = hot ( '----a-^--b----c----d----# ' ) ;
99
+ var e1subs = '^ ! ' ;
100
+ var e2 = hot ( '-----x----------x----------x----------|' ) ;
101
+ var e2subs = '^ ! ' ;
102
+ var expected = '-----b----------d-# ' ;
103
+
104
+ expectObservable ( e1 . sample ( e2 ) ) . toBe ( expected ) ;
105
+ expectSubscriptions ( e1 . subscriptions ) . toBe ( e1subs ) ;
106
+ expectSubscriptions ( e2 . subscriptions ) . toBe ( e2subs ) ;
107
+ } ) ;
108
+
109
+ it ( 'should completes if source does not emits' , function ( ) {
110
+ var e1 = hot ( '|' ) ;
111
+ var e2 = hot ( '------x-------|' ) ;
112
+ var expected = '|' ;
113
+ var e1subs = '(^!)' ;
114
+ var e2subs = '(^!)' ;
115
+
116
+ expectObservable ( e1 . sample ( e2 ) ) . toBe ( expected ) ;
117
+ expectSubscriptions ( e1 . subscriptions ) . toBe ( e1subs ) ;
118
+ expectSubscriptions ( e2 . subscriptions ) . toBe ( e2subs ) ;
119
+ } ) ;
120
+
121
+ it ( 'should raise error if source throws immediately' , function ( ) {
122
+ var e1 = hot ( '#' ) ;
123
+ var e2 = hot ( '------x-------|' ) ;
124
+ var expected = '#' ;
125
+ var e1subs = '(^!)' ;
126
+ var e2subs = '(^!)' ;
127
+
128
+ expectObservable ( e1 . sample ( e2 ) ) . toBe ( expected ) ;
129
+ expectSubscriptions ( e1 . subscriptions ) . toBe ( e1subs ) ;
130
+ expectSubscriptions ( e2 . subscriptions ) . toBe ( e2subs ) ;
131
+ } ) ;
132
+
133
+ it ( 'should raise error if notification raises error' , function ( ) {
134
+ var e1 = hot ( '--a-----|' ) ;
135
+ var e2 = hot ( '----#' ) ;
136
+ var expected = '----#' ;
137
+ var e1subs = '^ !' ;
138
+ var e2subs = '^ !' ;
139
+
140
+ expectObservable ( e1 . sample ( e2 ) ) . toBe ( expected ) ;
141
+ expectSubscriptions ( e1 . subscriptions ) . toBe ( e1subs ) ;
142
+ expectSubscriptions ( e2 . subscriptions ) . toBe ( e2subs ) ;
143
+ } ) ;
144
+
145
+ it ( 'should not completes if source does not complete' , function ( ) {
146
+ var e1 = hot ( '-' ) ;
147
+ var e1subs = '^ ' ;
148
+ var e2 = hot ( '------x-------|' ) ;
149
+ var e2subs = '^ !' ;
150
+ var expected = '-' ;
151
+
152
+ expectObservable ( e1 . sample ( e2 ) ) . toBe ( expected ) ;
153
+ expectSubscriptions ( e1 . subscriptions ) . toBe ( e1subs ) ;
154
+ expectSubscriptions ( e2 . subscriptions ) . toBe ( e2subs ) ;
155
+ } ) ;
156
+
157
+ it ( 'should sample only until source completes' , function ( ) {
158
+ var e1 = hot ( '----a----b----c----d-|' ) ;
159
+ var e1subs = '^ !' ;
160
+ var e2 = hot ( '-----------x----------x------------|' ) ;
161
+ var e2subs = '^ !' ;
162
+ var expected = '-----------b---------|' ;
163
+
164
+ expectObservable ( e1 . sample ( e2 ) ) . toBe ( expected ) ;
165
+ expectSubscriptions ( e1 . subscriptions ) . toBe ( e1subs ) ;
166
+ expectSubscriptions ( e2 . subscriptions ) . toBe ( e2subs ) ;
167
+ } ) ;
168
+
169
+ it ( 'should complete sampling if sample observable completes' , function ( ) {
170
+ var e1 = hot ( '----a----b----c----d-|' ) ;
171
+ var e1subs = '^ !' ;
172
+ var e2 = hot ( '|' ) ;
173
+ var e2subs = '(^!)' ;
174
+ var expected = '---------------------|' ;
175
+
176
+ expectObservable ( e1 . sample ( e2 ) ) . toBe ( expected ) ;
177
+ expectSubscriptions ( e1 . subscriptions ) . toBe ( e1subs ) ;
178
+ expectSubscriptions ( e2 . subscriptions ) . toBe ( e2subs ) ;
179
+ } ) ;
180
+ } ) ;
0 commit comments