/** * Test the navbar usage. * * @cover Navbar::__construct() * @cover Navbar::getMenuList() * @cover Navbar::setMenuList() * @cover Navbar::pushMenu() */ public function testUsage() { $navbar = new Navbar(); $this->assertEquals(array(), $navbar->getMenuList()); $menuList = array(new Menu('Menu ' . uniqid()), new Menu('Menu ' . uniqid()), new Menu('Menu ' . uniqid(), null, array(new Menu('Sub-menu ' . uniqid())))); $navbar = new Navbar($menuList); $this->assertEquals(count($menuList), count($navbar->getMenuList())); $this->assertEquals($menuList, $navbar->getMenuList()); $menuList = array(new Menu('Menu ' . uniqid()), new Menu('Menu ' . uniqid())); $navbar = new Navbar(); $this->assertEquals($navbar, $navbar->setMenuList($menuList)); $this->assertEquals(count($menuList), count($navbar->getMenuList())); $this->assertEquals($menuList, $navbar->getMenuList()); $menuList = array(new Menu('Menu ' . uniqid()), new Menu('Menu ' . uniqid()), new Menu('Menu ' . uniqid()), new Menu('Menu ' . uniqid()), new Menu('Menu ' . uniqid())); $navbar = new Navbar(); foreach ($menuList as $menu) { $navbar->pushMenu($menu); } $this->assertEquals(count($menuList), count($navbar->getMenuList())); $this->assertEquals($menuList, $navbar->getMenuList()); foreach ($navbar->getMenuList() as $k => $menu) { $this->assertSame($menuList[$k], $menu); } }
/** * Parse a navbar configuration and return the list of menus, linked by parent * menu. * * @param array $navbar_cfg * @return Navbar */ protected function parseNavbarConfiguration(array $navbar_cfg) { $menus = array(); foreach ($navbar_cfg as $menu_cfg) { if (isset($menu_cfg['id'])) { $menus[$menu_cfg['id']] = array('parent_id' => isset($menu_cfg['parent_id']) ? $menu_cfg['parent_id'] : 0, 'menu' => $this->parseMenuConfiguration($menu_cfg)); } } $navbar = new Navbar(); foreach ($menus as $menu) { if ($menu['parent_id'] == 0) { $navbar->pushMenu($menu['menu']); } elseif (isset($menus[$menu['parent_id']])) { $menus[$menu['parent_id']]['menu']->pushSubmenu($menu['menu']); } } return $navbar; }