@@ -272,12 +272,85 @@ public function testEndRemovesReadStreamFromLoop()
272272 {
273273 $ stream = fopen ('php://temp ' , 'r+ ' );
274274 $ loop = $ this ->createLoopMock ();
275- $ loop ->expects ($ this ->once ())->method ('removeReadStream ' );
275+ $ loop ->expects ($ this ->once ())->method ('addReadStream ' )->with ($ stream );
276+ $ loop ->expects ($ this ->once ())->method ('removeReadStream ' )->with ($ stream );
276277
277278 $ conn = new DuplexResourceStream ($ stream , $ loop );
278279 $ conn ->end ('bye ' );
279280 }
280281
282+ /**
283+ * @covers React\Stream\DuplexResourceStream::pause
284+ */
285+ public function testPauseRemovesReadStreamFromLoop ()
286+ {
287+ $ stream = fopen ('php://temp ' , 'r+ ' );
288+ $ loop = $ this ->createLoopMock ();
289+ $ loop ->expects ($ this ->once ())->method ('addReadStream ' )->with ($ stream );
290+ $ loop ->expects ($ this ->once ())->method ('removeReadStream ' )->with ($ stream );
291+
292+ $ conn = new DuplexResourceStream ($ stream , $ loop );
293+ $ conn ->pause ();
294+ $ conn ->pause ();
295+ }
296+
297+ /**
298+ * @covers React\Stream\DuplexResourceStream::pause
299+ */
300+ public function testResumeDoesAddStreamToLoopOnlyOnce ()
301+ {
302+ $ stream = fopen ('php://temp ' , 'r+ ' );
303+ $ loop = $ this ->createLoopMock ();
304+ $ loop ->expects ($ this ->once ())->method ('addReadStream ' )->with ($ stream );
305+
306+ $ conn = new DuplexResourceStream ($ stream , $ loop );
307+ $ conn ->resume ();
308+ $ conn ->resume ();
309+ }
310+
311+ /**
312+ * @covers React\Stream\DuplexResourceStream::close
313+ */
314+ public function testCloseRemovesReadStreamFromLoop ()
315+ {
316+ $ stream = fopen ('php://temp ' , 'r+ ' );
317+ $ loop = $ this ->createLoopMock ();
318+ $ loop ->expects ($ this ->once ())->method ('addReadStream ' )->with ($ stream );
319+ $ loop ->expects ($ this ->once ())->method ('removeReadStream ' )->with ($ stream );
320+
321+ $ conn = new DuplexResourceStream ($ stream , $ loop );
322+ $ conn ->close ();
323+ }
324+
325+ /**
326+ * @covers React\Stream\DuplexResourceStream::close
327+ */
328+ public function testCloseAfterPauseRemovesReadStreamFromLoopOnlyOnce ()
329+ {
330+ $ stream = fopen ('php://temp ' , 'r+ ' );
331+ $ loop = $ this ->createLoopMock ();
332+ $ loop ->expects ($ this ->once ())->method ('addReadStream ' )->with ($ stream );
333+ $ loop ->expects ($ this ->once ())->method ('removeReadStream ' )->with ($ stream );
334+
335+ $ conn = new DuplexResourceStream ($ stream , $ loop );
336+ $ conn ->pause ();
337+ $ conn ->close ();
338+ }
339+
340+ /**
341+ * @covers React\Stream\DuplexResourceStream::close
342+ */
343+ public function testResumeAfterCloseDoesAddReadStreamToLoopOnlyOnce ()
344+ {
345+ $ stream = fopen ('php://temp ' , 'r+ ' );
346+ $ loop = $ this ->createLoopMock ();
347+ $ loop ->expects ($ this ->once ())->method ('addReadStream ' )->with ($ stream );
348+
349+ $ conn = new DuplexResourceStream ($ stream , $ loop );
350+ $ conn ->close ();
351+ $ conn ->resume ();
352+ }
353+
281354 public function testEndedStreamsShouldNotWrite ()
282355 {
283356 $ file = tempnam (sys_get_temp_dir (), 'reactphptest_ ' );
0 commit comments