@@ -91,53 +91,57 @@ fn timeout_future_cancel() -> impl Future<Item = (), Error = wasm_bindgen::JsVal
91
91
#[ wasm_bindgen_test( async ) ]
92
92
fn interval ( ) -> impl Future < Item = ( ) , Error = wasm_bindgen:: JsValue > {
93
93
let ( mut sender, receiver) = mpsc:: channel ( 1 ) ;
94
- Interval :: new ( 1 , move || sender. try_send ( ( ) ) . unwrap ( ) ) . forget ( ) ;
94
+ let i = Interval :: new ( 1 , move || {
95
+ if !sender. is_closed ( ) {
96
+ sender. try_send ( ( ) ) . unwrap ( )
97
+ }
98
+ } ) ;
99
+
95
100
receiver
96
101
. take ( 5 )
97
102
. map_err ( |_| "impossible" . into ( ) )
98
- . for_each ( |_| Ok ( ( ) ) )
103
+ . collect ( )
104
+ . and_then ( |results| {
105
+ drop ( i) ;
106
+ assert_eq ! ( results. len( ) , 5 ) ;
107
+ Ok ( ( ) )
108
+ } )
99
109
}
100
110
101
111
#[ wasm_bindgen_test( async ) ]
102
112
fn interval_cancel ( ) -> impl Future < Item = ( ) , Error = wasm_bindgen:: JsValue > {
103
- let cell = Rc :: new ( Cell :: new ( false ) ) ;
113
+ let ( mut i_sender , i_receiver ) = mpsc :: channel ( 1 ) ;
104
114
105
- let i = Interval :: new ( 1 , {
106
- let cell = cell. clone ( ) ;
107
- move || {
108
- cell. set ( true ) ;
109
- panic ! ( "should have been cancelled" ) ;
110
- }
111
- } ) ;
115
+ let i = Interval :: new ( 1 , move || i_sender. try_send ( ( ) ) . unwrap ( ) ) ;
112
116
i. cancel ( ) ;
113
117
118
+ // This keeps us live for long enough that if any erroneous Interval callbacks fired, we'll have seen them.
114
119
let ( mut sender, receiver) = mpsc:: channel ( 1 ) ;
115
- Interval :: new ( 2 , move || {
120
+ Timeout :: new ( 50 , move || {
116
121
sender. try_send ( ( ) ) . unwrap ( ) ;
117
- assert_eq ! ( cell. get( ) , false ) ;
118
122
} )
119
123
. forget ( ) ;
120
124
121
125
receiver
126
+ . merge ( i_receiver)
127
+ . take ( 2 )
122
128
. map_err ( |_| "impossible" . into ( ) )
123
- . for_each ( |_| Ok ( ( ) ) )
129
+ . collect ( )
130
+ . and_then ( |results| {
131
+ // Should only be 1 item - and that's from the timeout. Anything more means interval spuriously fired.
132
+ assert_eq ! ( results. len( ) , 1 ) ;
133
+ Ok ( ( ) )
134
+ } )
124
135
}
125
136
126
137
#[ wasm_bindgen_test( async ) ]
127
138
fn interval_stream ( ) -> impl Future < Item = ( ) , Error = wasm_bindgen:: JsValue > {
128
- let cell = Rc :: new ( Cell :: new ( 0 ) ) ;
129
139
IntervalStream :: new ( 1 )
130
140
. take ( 5 )
131
141
. map_err ( |_| "impossible" . into ( ) )
132
- . for_each ( {
133
- let cell = cell. clone ( ) ;
134
- move |_| {
135
- cell. set ( cell. get ( ) + 1 ) ;
136
- Ok ( ( ) )
137
- }
138
- } )
139
- . and_then ( move |_| {
140
- assert_eq ! ( cell. get( ) , 5 ) ;
142
+ . collect ( )
143
+ . and_then ( |results| {
144
+ assert_eq ! ( results. len( ) , 5 ) ;
141
145
Ok ( ( ) )
142
146
} )
143
147
}
0 commit comments