@@ -77,6 +77,20 @@ public function testEmptyWriteDoesNotAddToLoop()
7777 $ buffer ->write (null );
7878 }
7979
80+ /**
81+ * @covers React\Stream\Buffer::write
82+ */
83+ public function testWriteWillAddStreamToLoop ()
84+ {
85+ $ stream = fopen ('php://temp ' , 'r+ ' );
86+ $ loop = $ this ->createLoopMock ();
87+ $ buffer = new Buffer ($ stream , $ loop );
88+
89+ $ loop ->expects ($ this ->once ())->method ('addWriteStream ' )->with ($ stream );
90+
91+ $ buffer ->write ('foo ' );
92+ }
93+
8094 /**
8195 * @covers React\Stream\Buffer::write
8296 * @covers React\Stream\Buffer::handleWrite
@@ -292,6 +306,52 @@ public function testClose()
292306 $ this ->assertTrue ($ buffer ->isWritable ());
293307 $ buffer ->close ();
294308 $ this ->assertFalse ($ buffer ->isWritable ());
309+
310+ $ this ->assertEquals (array (), $ buffer ->listeners ('close ' ));
311+ }
312+
313+ /**
314+ * @covers React\Stream\Buffer::close
315+ */
316+ public function testClosingAfterWriteRemovesStreamFromLoop ()
317+ {
318+ $ stream = fopen ('php://temp ' , 'r+ ' );
319+ $ loop = $ this ->createLoopMock ();
320+ $ buffer = new Buffer ($ stream , $ loop );
321+
322+ $ loop ->expects ($ this ->once ())->method ('removeWriteStream ' )->with ($ stream );
323+
324+ $ buffer ->write ('foo ' );
325+ $ buffer ->close ();
326+ }
327+
328+ /**
329+ * @covers React\Stream\Buffer::close
330+ */
331+ public function testClosingWithoutWritingDoesNotRemoveStreamFromLoop ()
332+ {
333+ $ stream = fopen ('php://temp ' , 'r+ ' );
334+ $ loop = $ this ->createLoopMock ();
335+ $ buffer = new Buffer ($ stream , $ loop );
336+
337+ $ loop ->expects ($ this ->never ())->method ('removeWriteStream ' );
338+
339+ $ buffer ->close ();
340+ }
341+
342+ /**
343+ * @covers React\Stream\Buffer::close
344+ */
345+ public function testDoubleCloseWillEmitOnlyOnce ()
346+ {
347+ $ stream = fopen ('php://temp ' , 'r+ ' );
348+ $ loop = $ this ->createLoopMock ();
349+
350+ $ buffer = new Buffer ($ stream , $ loop );
351+ $ buffer ->on ('close ' , $ this ->expectCallableOnce ());
352+
353+ $ buffer ->close ();
354+ $ buffer ->close ();
295355 }
296356
297357 /**
0 commit comments