/** * @param string $route * @param array $parameters * @param string|array $itemRoutes * @param array $itemsRoutesParameters * @param boolean $expected * * @dataProvider provideData */ public function testMatching($route, array $parameters, $itemRoutes, array $itemsRoutesParameters, $expected) { $item = $this->getMock('Knp\\Menu\\ItemInterface'); $item->expects($this->any())->method('getExtra')->with($this->logicalOr($this->equalTo('routes'), $this->equalTo('routesParameters')))->will($this->returnCallback(function ($parameter) use($itemRoutes, $itemsRoutesParameters) { switch ($parameter) { case 'routes': return $itemRoutes; case 'routesParameters': return $itemsRoutesParameters; } })); $request = new Request(); $request->attributes->set('_route', $route); $request->attributes->set('_route_params', $parameters); $voter = new RouteVoter($request); $this->assertSame($expected, $voter->matchItem($item)); }