/**
  * 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;
 }