1010 */
1111class CompositeStreamTest extends TestCase
1212{
13+ /** @test */
14+ public function itShouldCloseReadableIfNotWritable ()
15+ {
16+ $ readable = $ this ->getMockBuilder ('React\Stream\ReadableStreamInterface ' )->getMock ();
17+ $ readable
18+ ->expects ($ this ->once ())
19+ ->method ('isReadable ' )
20+ ->willReturn (true );
21+ $ readable
22+ ->expects ($ this ->once ())
23+ ->method ('close ' );
24+
25+ $ writable = $ this ->getMockBuilder ('React\Stream\WritableStreamInterface ' )->getMock ();
26+ $ writable
27+ ->expects ($ this ->once ())
28+ ->method ('isWritable ' )
29+ ->willReturn (false );
30+
31+ $ composite = new CompositeStream ($ readable , $ writable );
32+
33+ $ composite ->on ('close ' , $ this ->expectCallableNever ());
34+ $ composite ->close ();
35+ }
36+
37+ /** @test */
38+ public function itShouldCloseWritableIfNotReadable ()
39+ {
40+ $ readable = $ this ->getMockBuilder ('React\Stream\ReadableStreamInterface ' )->getMock ();
41+ $ readable
42+ ->expects ($ this ->once ())
43+ ->method ('isReadable ' )
44+ ->willReturn (false );
45+
46+ $ writable = $ this ->getMockBuilder ('React\Stream\WritableStreamInterface ' )->getMock ();
47+ $ writable
48+ ->expects ($ this ->once ())
49+ ->method ('close ' );
50+
51+ $ composite = new CompositeStream ($ readable , $ writable );
52+
53+ $ composite ->on ('close ' , $ this ->expectCallableNever ());
54+ $ composite ->close ();
55+ }
56+
1357 /** @test */
1458 public function itShouldForwardWritableCallsToWritableStream ()
1559 {
1660 $ readable = $ this ->getMockBuilder ('React\Stream\ReadableStreamInterface ' )->getMock ();
61+ $ readable
62+ ->expects ($ this ->once ())
63+ ->method ('isReadable ' )
64+ ->willReturn (true );
65+
1766 $ writable = $ this ->getMockBuilder ('React\Stream\WritableStreamInterface ' )->getMock ();
1867 $ writable
1968 ->expects ($ this ->once ())
2069 ->method ('write ' )
2170 ->with ('foo ' );
2271 $ writable
23- ->expects ($ this ->once ())
24- ->method ('isWritable ' );
72+ ->expects ($ this ->exactly (2 ))
73+ ->method ('isWritable ' )
74+ ->willReturn (true );
2575
2676 $ composite = new CompositeStream ($ readable , $ writable );
2777 $ composite ->write ('foo ' );
@@ -33,14 +83,16 @@ public function itShouldForwardReadableCallsToReadableStream()
3383 {
3484 $ readable = $ this ->getMockBuilder ('React\Stream\ReadableStreamInterface ' )->getMock ();
3585 $ readable
36- ->expects ($ this ->once ())
37- ->method ('isReadable ' );
86+ ->expects ($ this ->exactly (2 ))
87+ ->method ('isReadable ' )
88+ ->willReturn (true );
3889 $ readable
3990 ->expects ($ this ->once ())
4091 ->method ('pause ' );
4192 $ readable
4293 ->expects ($ this ->once ())
4394 ->method ('resume ' );
95+
4496 $ writable = $ this ->getMockBuilder ('React\Stream\WritableStreamInterface ' )->getMock ();
4597 $ writable
4698 ->expects ($ this ->any ())
@@ -57,15 +109,19 @@ public function itShouldForwardReadableCallsToReadableStream()
57109 public function itShouldNotForwardResumeIfStreamIsNotWritable ()
58110 {
59111 $ readable = $ this ->getMockBuilder ('React\Stream\ReadableStreamInterface ' )->getMock ();
112+ $ readable
113+ ->expects ($ this ->once ())
114+ ->method ('isReadable ' )
115+ ->willReturn (true );
60116 $ readable
61117 ->expects ($ this ->never ())
62118 ->method ('resume ' );
63119
64120 $ writable = $ this ->getMockBuilder ('React\Stream\WritableStreamInterface ' )->getMock ();
65121 $ writable
66- ->expects ($ this ->once ( ))
122+ ->expects ($ this ->exactly ( 2 ))
67123 ->method ('isWritable ' )
68- ->willReturn ( false );
124+ ->willReturnOnConsecutiveCalls ( true , false );
69125
70126 $ composite = new CompositeStream ($ readable , $ writable );
71127 $ composite ->resume ();
@@ -75,7 +131,16 @@ public function itShouldNotForwardResumeIfStreamIsNotWritable()
75131 public function endShouldDelegateToWritableWithData ()
76132 {
77133 $ readable = $ this ->getMockBuilder ('React\Stream\ReadableStreamInterface ' )->getMock ();
134+ $ readable
135+ ->expects ($ this ->once ())
136+ ->method ('isReadable ' )
137+ ->willReturn (true );
138+
78139 $ writable = $ this ->getMockBuilder ('React\Stream\WritableStreamInterface ' )->getMock ();
140+ $ writable
141+ ->expects ($ this ->once ())
142+ ->method ('isWritable ' )
143+ ->willReturn (true );
79144 $ writable
80145 ->expects ($ this ->once ())
81146 ->method ('end ' )
@@ -89,10 +154,19 @@ public function endShouldDelegateToWritableWithData()
89154 public function closeShouldCloseBothStreams ()
90155 {
91156 $ readable = $ this ->getMockBuilder ('React\Stream\ReadableStreamInterface ' )->getMock ();
157+ $ readable
158+ ->expects ($ this ->once ())
159+ ->method ('isReadable ' )
160+ ->willReturn (true );
92161 $ readable
93162 ->expects ($ this ->once ())
94163 ->method ('close ' );
164+
95165 $ writable = $ this ->getMockBuilder ('React\Stream\WritableStreamInterface ' )->getMock ();
166+ $ writable
167+ ->expects ($ this ->once ())
168+ ->method ('isWritable ' )
169+ ->willReturn (true );
96170 $ writable
97171 ->expects ($ this ->once ())
98172 ->method ('close ' );
@@ -132,6 +206,11 @@ public function itShouldReceiveForwardedEvents()
132206 public function itShouldHandlePipingCorrectly ()
133207 {
134208 $ readable = $ this ->getMockBuilder ('React\Stream\ReadableStreamInterface ' )->getMock ();
209+ $ readable
210+ ->expects ($ this ->once ())
211+ ->method ('isReadable ' )
212+ ->willReturn (true );
213+
135214 $ writable = $ this ->getMockBuilder ('React\Stream\WritableStreamInterface ' )->getMock ();
136215 $ writable ->expects ($ this ->any ())->method ('isWritable ' )->willReturn (True );
137216 $ writable
@@ -150,8 +229,10 @@ public function itShouldHandlePipingCorrectly()
150229 public function itShouldForwardPipeCallsToReadableStream ()
151230 {
152231 $ readable = new ThroughStream ();
232+
153233 $ writable = $ this ->getMockBuilder ('React\Stream\WritableStreamInterface ' )->getMock ();
154234 $ writable ->expects ($ this ->any ())->method ('isWritable ' )->willReturn (True );
235+
155236 $ composite = new CompositeStream ($ readable , $ writable );
156237
157238 $ output = $ this ->getMockBuilder ('React\Stream\WritableStreamInterface ' )->getMock ();
0 commit comments