Skip to content

Commit 4888b99

Browse files
authored
Merge pull request #247 from jsor-labs/middlewarerunner-uncommon-array-format-test
Add test for uncommon middleware array formats
2 parents dca0773 + 94a07f8 commit 4888b99

File tree

1 file changed

+140
-0
lines changed

1 file changed

+140
-0
lines changed

tests/MiddlewareRunnerTest.php

Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,4 +193,144 @@ function (ServerRequestInterface $request, $next) use (&$receivedRequests) {
193193
$receivedRequests
194194
);
195195
}
196+
197+
public function provideUncommonMiddlewareArrayFormats()
198+
{
199+
return array(
200+
array(
201+
function () {
202+
$sequence = '';
203+
204+
// Numeric index gap
205+
return array(
206+
0 => function (ServerRequestInterface $request, $next) use (&$sequence) {
207+
$sequence .= 'A';
208+
209+
return $next($request);
210+
},
211+
2 => function (ServerRequestInterface $request, $next) use (&$sequence) {
212+
$sequence .= 'B';
213+
214+
return $next($request);
215+
},
216+
3 => function () use (&$sequence) {
217+
return new Response(200, array(), $sequence . 'C');
218+
},
219+
);
220+
},
221+
'ABC',
222+
),
223+
array(
224+
function () {
225+
$sequence = '';
226+
227+
// Reversed numeric indexes
228+
return array(
229+
2 => function (ServerRequestInterface $request, $next) use (&$sequence) {
230+
$sequence .= 'A';
231+
232+
return $next($request);
233+
},
234+
1 => function (ServerRequestInterface $request, $next) use (&$sequence) {
235+
$sequence .= 'B';
236+
237+
return $next($request);
238+
},
239+
0 => function () use (&$sequence) {
240+
return new Response(200, array(), $sequence . 'C');
241+
},
242+
);
243+
},
244+
'ABC',
245+
),
246+
array(
247+
function () {
248+
$sequence = '';
249+
250+
// Associative array
251+
return array(
252+
'middleware1' => function (ServerRequestInterface $request, $next) use (&$sequence) {
253+
$sequence .= 'A';
254+
255+
return $next($request);
256+
},
257+
'middleware2' => function (ServerRequestInterface $request, $next) use (&$sequence) {
258+
$sequence .= 'B';
259+
260+
return $next($request);
261+
},
262+
'middleware3' => function () use (&$sequence) {
263+
return new Response(200, array(), $sequence . 'C');
264+
},
265+
);
266+
},
267+
'ABC',
268+
),
269+
array(
270+
function () {
271+
$sequence = '';
272+
273+
// Associative array with empty or trimmable string keys
274+
return array(
275+
'' => function (ServerRequestInterface $request, $next) use (&$sequence) {
276+
$sequence .= 'A';
277+
278+
return $next($request);
279+
},
280+
' ' => function (ServerRequestInterface $request, $next) use (&$sequence) {
281+
$sequence .= 'B';
282+
283+
return $next($request);
284+
},
285+
' ' => function () use (&$sequence) {
286+
return new Response(200, array(), $sequence . 'C');
287+
},
288+
);
289+
},
290+
'ABC',
291+
),
292+
array(
293+
function () {
294+
$sequence = '';
295+
296+
// Mixed array keys
297+
return array(
298+
'' => function (ServerRequestInterface $request, $next) use (&$sequence) {
299+
$sequence .= 'A';
300+
301+
return $next($request);
302+
},
303+
0 => function (ServerRequestInterface $request, $next) use (&$sequence) {
304+
$sequence .= 'B';
305+
306+
return $next($request);
307+
},
308+
'foo' => function (ServerRequestInterface $request, $next) use (&$sequence) {
309+
$sequence .= 'C';
310+
311+
return $next($request);
312+
},
313+
2 => function () use (&$sequence) {
314+
return new Response(200, array(), $sequence . 'D');
315+
},
316+
);
317+
},
318+
'ABCD',
319+
),
320+
);
321+
}
322+
323+
/**
324+
* @dataProvider provideUncommonMiddlewareArrayFormats
325+
*/
326+
public function testUncommonMiddlewareArrayFormats($middlewareFactory, $expectedSequence)
327+
{
328+
$request = new ServerRequest('GET', 'https://example.com/');
329+
$middlewareStack = new MiddlewareRunner($middlewareFactory());
330+
331+
/** @var ResponseInterface $response */
332+
$response = Block\await($middlewareStack($request), Factory::create());
333+
334+
$this->assertSame($expectedSequence, (string) $response->getBody());
335+
}
196336
}

0 commit comments

Comments
 (0)