/** * Invoke plugin and test various valid and invalid parameter sets */ public function testInvoke() { // Navigation structure for tests. It contains the label "test" 3 times // (once on a top menu with no submenu, twice on different submenus) to // be able to test for correct location of labels. $data = array(array('label' => 'test', 'uri' => 'top0'), array('label' => 'top1', 'uri' => 'top1', 'pages' => array(array('label' => 'test', 'uri' => 'sub1'))), array('label' => 'top2', 'uri' => 'top2', 'pages' => array(array('label' => 'test', 'uri' => 'sub2')))); // Test first top menu $navigation = new \Zend\Navigation\Navigation($data); $plugin = new \Console\Mvc\Controller\Plugin\SetActiveMenu($navigation); $plugin('test'); $this->assertTrue($navigation->findOneByUri('top0')->isActive()); // Test last top menu $navigation = new \Zend\Navigation\Navigation($data); $plugin = new \Console\Mvc\Controller\Plugin\SetActiveMenu($navigation); $plugin('top2'); $this->assertTrue($navigation->findOneByUri('top2')->isActive()); // Test both submenus (ensure that the correct one is picked) $navigation = new \Zend\Navigation\Navigation($data); $plugin = new \Console\Mvc\Controller\Plugin\SetActiveMenu($navigation); $plugin('top1', 'test'); $this->assertTrue($navigation->findOneByUri('sub1')->isActive()); $navigation = new \Zend\Navigation\Navigation($data); $plugin = new \Console\Mvc\Controller\Plugin\SetActiveMenu($navigation); $plugin('top2', 'test'); $this->assertTrue($navigation->findOneByUri('sub2')->isActive()); // Test exception on invalid top menu try { $plugin('invalid'); $this->fail('No exception thrown on invalid $mainPage'); } catch (\Exception $e) { $this->assertEquals('Invalid top menu page: invalid', $e->getMessage()); } // Test exception on invalid submenu if top menu does not have a submenu try { $plugin('test', 'invalid'); $this->fail('No exception thrown on invalid $subPage'); } catch (\Exception $e) { $this->assertEquals('Invalid submenu page: invalid', $e->getMessage()); } // Test exception on invalid submenu if top menu has a submenu try { $plugin('top1', 'invalid'); $this->fail('No exception thrown on invalid $subPage'); } catch (\Exception $e) { $this->assertEquals('Invalid submenu page: invalid', $e->getMessage()); } }