@@ -131,6 +131,108 @@ public function testWriteDataWhenStreamingEntryWillEmitDataOnEntryWithoutEndWhen
131
131
$ this ->assertTrue ($ ret );
132
132
}
133
133
134
+ public function testWriteDataWhenStreamingEntryIsClosedAlreadyWillNotEmitDataAndWillNotThrottleWhenMoreDataIsRemaining ()
135
+ {
136
+ $ entry = new ThroughStream ();
137
+ $ entry ->close ();
138
+ $ entry ->on ('data ' , $ this ->expectCallableNever ());
139
+
140
+ $ ref = new \ReflectionProperty ($ this ->decoder , 'streaming ' );
141
+ $ ref ->setAccessible (true );
142
+ $ ref ->setValue ($ this ->decoder , $ entry );
143
+
144
+ $ ref = new \ReflectionProperty ($ this ->decoder , 'remaining ' );
145
+ $ ref ->setAccessible (true );
146
+ $ ref ->setValue ($ this ->decoder , 100 );
147
+
148
+ $ ret = $ this ->decoder ->write ('hi ' );
149
+
150
+ $ this ->assertTrue ($ ret );
151
+ }
152
+
153
+ public function testWriteDataWhenStreamingEntryIsPausedAlreadyWillEmitDataOnEntryAndThrottleWhenMoreDataIsRemaining ()
154
+ {
155
+ $ entry = new ThroughStream ();
156
+ $ entry ->pause ();
157
+ $ entry ->on ('data ' , $ this ->expectCallableOnceWith ('hi ' ));
158
+ $ entry ->on ('end ' , $ this ->expectCallableNever ());
159
+ $ entry ->on ('close ' , $ this ->expectCallableNever ());
160
+
161
+ $ ref = new \ReflectionProperty ($ this ->decoder , 'streaming ' );
162
+ $ ref ->setAccessible (true );
163
+ $ ref ->setValue ($ this ->decoder , $ entry );
164
+
165
+ $ ref = new \ReflectionProperty ($ this ->decoder , 'remaining ' );
166
+ $ ref ->setAccessible (true );
167
+ $ ref ->setValue ($ this ->decoder , 100 );
168
+
169
+ $ ret = $ this ->decoder ->write ('hi ' );
170
+
171
+ $ this ->assertFalse ($ ret );
172
+ }
173
+
174
+ public function testWriteDataWhenStreamingEntryIsPausedDuringDataWillEmitDataOnEntryAndThrottleWhenMoreDataIsRemaining ()
175
+ {
176
+ $ entry = new ThroughStream ();
177
+ $ entry ->on ('data ' , function () use ($ entry ) {
178
+ $ entry ->pause ();
179
+ });
180
+ $ entry ->on ('end ' , $ this ->expectCallableNever ());
181
+ $ entry ->on ('close ' , $ this ->expectCallableNever ());
182
+
183
+ $ ref = new \ReflectionProperty ($ this ->decoder , 'streaming ' );
184
+ $ ref ->setAccessible (true );
185
+ $ ref ->setValue ($ this ->decoder , $ entry );
186
+
187
+ $ ref = new \ReflectionProperty ($ this ->decoder , 'remaining ' );
188
+ $ ref ->setAccessible (true );
189
+ $ ref ->setValue ($ this ->decoder , 100 );
190
+
191
+ $ ret = $ this ->decoder ->write ('hi ' );
192
+
193
+ $ this ->assertFalse ($ ret );
194
+ }
195
+
196
+ public function testWriteDataWhenStreamingEntryIsPausedDuringDataAndResumeEntryAfterwardsWillEmitDrainEventOnDecoder ()
197
+ {
198
+ $ ref = null ;
199
+ $ this ->decoder ->on ('entry ' , function (array $ header , ReadableStreamInterface $ stream ) use (&$ ref ) {
200
+ $ ref = $ stream ;
201
+ $ stream ->pause ();
202
+ });
203
+ $ this ->decoder ->on ('entry ' , $ this ->expectCallableOnce ());
204
+
205
+ $ data = file_get_contents (__DIR__ . '/fixtures/alice-bob.tar ' , false , null , 0 , 512 + 1 );
206
+ $ ret = $ this ->decoder ->write ($ data );
207
+
208
+ $ this ->assertFalse ($ ret );
209
+
210
+ $ this ->decoder ->on ('drain ' , $ this ->expectCallableOnce ());
211
+
212
+ $ this ->assertNotNull ($ ref );
213
+ $ ref ->resume ();
214
+ }
215
+
216
+ public function testWriteDataWhenStreamingEntryIsPausedDuringDataAndCloseEntryAfterwardsWillEmitDrainEventOnDecoder ()
217
+ {
218
+ $ ref = null ;
219
+ $ this ->decoder ->on ('entry ' , function (array $ header , ReadableStreamInterface $ stream ) use (&$ ref ) {
220
+ $ ref = $ stream ;
221
+ $ stream ->pause ();
222
+ });
223
+ $ this ->decoder ->on ('entry ' , $ this ->expectCallableOnce ());
224
+
225
+ $ data = file_get_contents (__DIR__ . '/fixtures/alice-bob.tar ' , false , null , 0 , 512 + 1 );
226
+ $ ret = $ this ->decoder ->write ($ data );
227
+
228
+ $ this ->assertFalse ($ ret );
229
+
230
+ $ this ->decoder ->on ('drain ' , $ this ->expectCallableOnce ());
231
+
232
+ $ this ->assertNotNull ($ ref );
233
+ $ ref ->close ();
234
+ }
235
+
134
236
public function testWriteDataWhenStreamingEntryWillEmitDataOnEntryAndEndAndCloseWhenRemainingDataIsMatched ()
135
237
{
136
238
$ entry = new ThroughStream ();
0 commit comments