public function testDispatchLayerOrder() { $dispatcher = new Dispatcher(); $dispatcher->addLayer(new MiddlewareLayer('L1')); $dispatcher->addLayer(new MiddlewareLayer('L2')); $dispatcher->addLayer(new MiddlewareLayer('L3')); $layers = [1 => $dispatcher->getLayer('L1'), 2 => $dispatcher->getLayer('L2'), 3 => $dispatcher->getLayer('L3')]; $buffer = 'order:'; for ($i = 1; $i < 4; $i++) { for ($j = 1; $j < 4; $j++) { $layers[$i]->mount('M' . $j, function ($request) use(&$buffer, $i, $j) { $buffer .= sprintf('<%s-%s>', $i, $j); $this->flow(); $buffer .= sprintf('</%s-%s>', $i, $j); }); } } $dispatcher->dispatch(new Request()); $this->assertEquals('order:<3-1><3-2><3-3><2-1><2-2><2-3><1-1><1-2><1-3></1-3></1-2></1-1></2-3></2-2></2-1></3-3></3-2></3-1>', $buffer); }