示例#1
0
 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);
 }