/** * Test submenu system * * @cover Menu::__construct() * @cover Menu::getSubmenu() * @cover Menu::setSubmenu() * @cover Menu::pushSubmenu() */ public function testSubmenu() { $menu = new Menu(); $this->assertEquals(array(), $menu->getSubmenu()); $submenu = array(new Menu('Submenu ' . uniqid(), 'http://' . uniqid() . '.example.com'), new Menu('Submenu ' . uniqid(), 'http://' . uniqid() . '.example.com'), new Menu('Submenu ' . uniqid(), 'http://' . uniqid() . '.example.com', array(new Menu('Sub-Submenu ' . uniqid(), 'http://' . uniqid() . '.example.com'), new Menu('Sub-Submenu ' . uniqid(), 'http://' . uniqid() . '.example.com')))); $menu = new Menu('Main menu', null, $submenu); $menu_submenu = $menu->getSubmenu(); $this->assertEquals(count($submenu), count($menu_submenu)); foreach ($submenu as $k => $menu) { $this->assertEquals($menu->getTitle(), $menu_submenu[$k]->getTitle()); $this->assertEquals($menu->getLink(), $menu_submenu[$k]->getLink()); $this->assertEquals($menu->getSubmenu(), $menu_submenu[$k]->getSubmenu()); $submenu_submenu = $menu_submenu[$k]->getSubmenu(); foreach ($menu->getSubmenu() as $l => $smenu) { $this->assertEquals($smenu->getTitle(), $submenu_submenu[$l]->getTitle()); $this->assertEquals($smenu->getLink(), $submenu_submenu[$l]->getLink()); $this->assertEquals($smenu->getSubmenu(), $submenu_submenu[$l]->getSubmenu()); } } $menu = new Menu('Main menu', null); $submenu = array(new Menu('Submenu ' . uniqid(), 'http://' . uniqid() . '.example.com'), new Menu('Submenu ' . uniqid(), 'http://' . uniqid() . '.example.com', array(new Menu('Sub-Submenu ' . uniqid(), 'http://' . uniqid() . '.example.com'))), new Menu('Submenu ' . uniqid(), 'http://' . uniqid() . '.example.com'), new Menu('Submenu ' . uniqid(), 'http://' . uniqid() . '.example.com')); $submenu_count = 0; foreach ($submenu as $smenu) { $this->assertEquals($submenu_count, count($menu->getSubmenu())); $menu->pushSubmenu($smenu); $this->assertEquals(++$submenu_count, count($menu->getSubmenu())); } $this->assertEquals(count($submenu), count($menu->getSubmenu())); $this->assertEquals($submenu, $menu->getSubmenu()); }
/** * Test the configuration reader. * * @cover NavbarService::parseConfiguration() * @cover NavbarService::parseMenuConfiguration() * @cover NavbarService::parseNavbarListConfiguration() * @cover NavbarService::parseNavbarConfiguration() */ public function testConfigurationReader() { $navbarService = new NavbarService(); $configuration = self::getConfigurationExample(); $navbarService->parseConfiguration($configuration); $this->assertEquals(2, count($navbarService->getNavbars())); foreach ($configuration['menu']['_menus'] as $navbar_cfg) { $navbar = $navbarService->getNavbar($navbar_cfg['index']); $this->assertTrue($navbar instanceof Navbar); $menus_flat = array(); foreach ($navbar_cfg['content'] as $menu_cfg) { $menu = new Menu(); $menu->setTitle($menu_cfg['title']); $menu->setLink($menu_cfg['route']); $menus_flat[$menu_cfg['id']] = $menu; } $menu_list = array(); foreach ($navbar_cfg['content'] as $menu_cfg) { if ($menu_cfg['parent_id'] > 0) { $menus_flat[$menu_cfg['parent_id']]->pushSubmenu($menus_flat[$menu_cfg['id']]); } else { $menu_list[] = $menus_flat[$menu_cfg['id']]; } } $this->assertEquals($menu_list, $navbar->getMenuList()); } // Test with url generator $navbarService = new NavbarService($this->urlGenerator); $tstFakeRoot = 'test-route-' . uniqid(); $navbarService->parseConfiguration(array('menu' => array('_menus' => array(array('index' => 'test', 'content' => array(array('id' => 1, 'parent_id' => 0, 'title' => 'test menu 1 1 ' . uniqid(), 'route' => 'bootstrap-bundle-test-route'), array('id' => 2, 'parent_id' => 0, 'title' => 'test menu 1 2 ' . uniqid(), 'route' => $tstFakeRoot))))))); $navbar = $navbarService->getNavbar('test'); $menuList = $navbar->getMenuList(); $this->assertEquals('/this/is/a/test', $menuList[0]->getLink()); $this->assertEquals($tstFakeRoot, $menuList[1]->getLink()); }
/** * Read one menu configuration and convert it into a menu. * * @param array $menu_cfg * @return Menu */ protected function parseMenuConfiguration(array $menu_cfg) { $menu = new Menu($this->urlGenerator); $menu->setTitle($menu_cfg['title']); try { $menu->setLink($this->urlGenerator ? $this->urlGenerator->generate($menu_cfg['route']) : $menu_cfg['route']); } catch (RouteNotFoundException $e) { $menu->setLink($menu_cfg['route']); } return $menu; }