@@ -255,7 +255,6 @@ public function testReceivesNextStreamingBodyWithBufferedDataAfterPreviousHandle
255255 new HttpBodyStream ($ stream , 10 )
256256 );
257257
258- $ req = null ;
259258 $ once = $ this ->expectCallableOnceWith ('helloworld ' );
260259 $ middleware ($ request , function (ServerRequestInterface $ request ) use ($ once ) {
261260 $ request ->getBody ()->on ('data ' , $ once );
@@ -266,4 +265,90 @@ public function testReceivesNextStreamingBodyWithBufferedDataAfterPreviousHandle
266265
267266 $ deferred ->reject (new \RuntimeException ());
268267 }
268+
269+ public function testReceivesNextStreamingBodyAndDoesNotEmitDataIfExplicitlyClosed ()
270+ {
271+ $ deferred = new Deferred ();
272+ $ middleware = new LimitHandlersMiddleware (1 );
273+ $ middleware (new ServerRequest ('GET ' , 'http://example.com/ ' ), function () use ($ deferred ) {
274+ return $ deferred ->promise ();
275+ });
276+
277+ $ stream = new ThroughStream ();
278+ $ request = new ServerRequest (
279+ 'POST ' ,
280+ 'http://example.com/ ' ,
281+ array (),
282+ new HttpBodyStream ($ stream , 10 )
283+ );
284+
285+ $ never = $ this ->expectCallableNever ();
286+ $ middleware ($ request , function (ServerRequestInterface $ request ) use ($ never ) {
287+ $ request ->getBody ()->close ();
288+ $ request ->getBody ()->on ('data ' , $ never );
289+ });
290+
291+ $ stream ->write ('hello ' );
292+ $ stream ->write ('world ' );
293+
294+ $ deferred ->reject (new \RuntimeException ());
295+ }
296+
297+ public function testReceivesNextStreamingBodyAndDoesNotEmitDataIfExplicitlyPaused ()
298+ {
299+ $ deferred = new Deferred ();
300+ $ middleware = new LimitHandlersMiddleware (1 );
301+ $ middleware (new ServerRequest ('GET ' , 'http://example.com/ ' ), function () use ($ deferred ) {
302+ return $ deferred ->promise ();
303+ });
304+
305+ $ stream = new ThroughStream ();
306+ $ request = new ServerRequest (
307+ 'POST ' ,
308+ 'http://example.com/ ' ,
309+ array (),
310+ new HttpBodyStream ($ stream , 10 )
311+ );
312+
313+ $ never = $ this ->expectCallableNever ();
314+ $ middleware ($ request , function (ServerRequestInterface $ request ) use ($ never ) {
315+ $ request ->getBody ()->pause ();
316+ $ request ->getBody ()->on ('data ' , $ never );
317+ });
318+
319+ $ stream ->write ('hello ' );
320+ $ stream ->write ('world ' );
321+
322+ $ deferred ->reject (new \RuntimeException ());
323+ }
324+
325+ public function testReceivesNextStreamingBodyAndDoesEmitDataImmediatelyIfExplicitlyResumed ()
326+ {
327+ $ deferred = new Deferred ();
328+ $ middleware = new LimitHandlersMiddleware (1 );
329+ $ middleware (new ServerRequest ('GET ' , 'http://example.com/ ' ), function () use ($ deferred ) {
330+ return $ deferred ->promise ();
331+ });
332+
333+ $ stream = new ThroughStream ();
334+ $ request = new ServerRequest (
335+ 'POST ' ,
336+ 'http://example.com/ ' ,
337+ array (),
338+ new HttpBodyStream ($ stream , 10 )
339+ );
340+
341+ $ once = $ this ->expectCallableOnceWith ('helloworld ' );
342+ $ never = $ this ->expectCallableNever ();
343+ $ middleware ($ request , function (ServerRequestInterface $ request ) use ($ once , $ never ) {
344+ $ request ->getBody ()->on ('data ' , $ once );
345+ $ request ->getBody ()->resume ();
346+ $ request ->getBody ()->on ('data ' , $ never );
347+ });
348+
349+ $ stream ->write ('hello ' );
350+ $ stream ->write ('world ' );
351+
352+ $ deferred ->reject (new \RuntimeException ());
353+ }
269354}
0 commit comments