$test->fromArray($source); $t->is(get_class($test['Child 4']), 'ioMenuItemTest', 'The child menus correctly use their menu class.'); $t->info(' e) Test ::createFromArray().'); $source['class'] = 'ioMenu'; $newMenu = ioMenuItem::createFromArray($source); $t->is(get_class($newMenu), 'ioMenu', 'The new menu is created with the correct class.'); $t->is($newMenu->getName(), 'Parent 2', 'The new menu has the correct name.'); $t->is(get_class($newMenu['Child 4']), 'ioMenuItemTest', 'The child menus correctly use their menu class.'); // reset some settings $menu['Parent 2']->isCurrent(false); $menu['Parent 2']->setAttribute('class', null); $t->info('8 - Test the render() method.'); check_test_tree($t, $menu); print_test_tree($t); $t->info('### Set the menu to compressed format. Functional tests asserts with uncompressed.'); ioMenuItem::$renderCompressed = true; $t->info(' 8.1 - Render the menu in a few basic ways'); $rendered = '<ul class="root"><li class="first">Parent 1<ul class="menu_level_1"><li class="first">Child 1</li><li>Child 2</li><li class="last">Child 3</li></ul></li><li class="last">Parent 2<ul class="menu_level_1"><li class="first last">Child 4<ul class="menu_level_2"><li class="first last">Grandchild 1</li></ul></li></ul></li></ul>'; $t->is($menu->render(), $rendered, 'The full menu renders correctly.'); $t->is((string) $menu, $rendered, 'The __toString() method renders correctly.'); $t->info(' 8.2 - Set a title and class on pt2, and see that it renders.'); $pt2->setAttribute('class', 'parent2_class'); $pt2->setAttribute('title', 'parent2 title'); $rendered = '<ul class="root"><li class="first">Parent 1<ul class="menu_level_1"><li class="first">Child 1</li><li>Child 2</li><li class="last">Child 3</li></ul></li><li class="parent2_class last" title="parent2 title">Parent 2<ul class="menu_level_1"><li class="first last">Child 4<ul class="menu_level_2"><li class="first last">Grandchild 1</li></ul></li></ul></li></ul>'; $t->is($menu->render(), $rendered, 'The menu renders with the title and class attributes.'); $t->info(' 8.3 - Set ch2 menu as current, look for "current" and "current_ancestor" classes.'); $ch2->isCurrent(true); $rendered = '<ul class="root"><li class="current_ancestor first">Parent 1<ul class="menu_level_1"><li class="first">Child 1</li><li class="current">Child 2</li><li class="last">Child 3</li></ul></li><li class="parent2_class last" title="parent2 title">Parent 2<ul class="menu_level_1"><li class="first last">Child 4<ul class="menu_level_2"><li class="first last">Grandchild 1</li></ul></li></ul></li></ul>'; $t->is($menu->render(), $rendered, 'The menu renders with the current and current_ancestor classes.'); $t->info(' 8.4 - Make ch4 hidden due to not having proper credentials'); $ch4->requiresAuth(true);