$test = new ioMenuItemTest('Imported');
$test->fromArray($menu['Parent 2']->toArray());
$t->is($test->toArray(), $menu['Parent 2']->toArray(), 'Creating a new menu item from pt2\'s source gives us an identical menu.');
$t->info('    c) Test ->fromArray(), but put it into a menu of a different class');
$test = new ioMenuItem('Imported');
$test->fromArray($menu['Parent 2']->toArray());
$targetArr = $menu['Parent 2']->toArray();
// the top level menu will be different, but the children will all have the old correct ioMenuItemTest class
$targetArr['class'] = 'ioMenuItem';
$t->is($test->toArray(), $targetArr, 'The menu sourced from pt2 is identical, except the parent class was changed.');
$t->is(get_class($test['Child 4']), 'ioMenuItemTest', 'The child menus correctly use their menu class.');
$t->info('    d) Test ->fromArray() with different class keys');
$source = $menu['Parent 2']->toArray();
$source['class'] = 'ioMenuItem';
$test = new ioMenuItem('Imported');
$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;