t('Hook menu tests'), 'description' => t('Test menu hook functionality.'), 'group' => t('Menu'), ); } function setUp() { // Enable dummy module that implements hook_menu. parent::setUp('menu_test'); } /** * Test title callback set to FALSE. */ function testTitleCallbackFalse() { $this->drupalGet('node'); $this->assertText('A title with @placeholder', t('Raw text found on the page')); $this->assertNoText(t('A title with @placeholder', array('@placeholder' => 'some other text')), t('Text with placeholder substitutions not found.')); } /** * Tests for menu_link_maintain(). */ function testMenuLinkMaintain() { $admin_user = $this->drupalCreateUser(array('administer site configuration')); $this->drupalLogin($admin_user); // Create three menu items. menu_link_maintain('menu_test', 'insert', 'menu_test_maintain/1', 'Menu link #1'); menu_link_maintain('menu_test', 'insert', 'menu_test_maintain/1', 'Menu link #1-1'); menu_link_maintain('menu_test', 'insert', 'menu_test_maintain/2', 'Menu link #2'); // Move second link to the main-menu, to test caching later on. db_update('menu_links') ->fields(array('menu_name' => 'main-menu')) ->condition('link_title', 'Menu link #1-1') ->condition('customized', 0) ->condition('module', 'menu_test') ->execute(); menu_cache_clear('main-menu'); // Load front page. $this->drupalGet('node'); $this->assertLink(t('Menu link #1'), 0, 'Found menu link #1'); $this->assertLink(t('Menu link #1-1'), 0, 'Found menu link #1-1'); $this->assertLink(t('Menu link #2'), 0, 'Found menu link #2'); // Rename all links for the given path. menu_link_maintain('menu_test', 'update', 'menu_test_maintain/1', 'Menu link updated'); // Load a different page to be sure that we have up to date information. $this->drupalGet('menu_test_maintain/1'); $this->assertLink(t('Menu link updated'), 0, t('Found updated menu link')); $this->assertNoLink(t('Menu link #1'), 0, t('Not found menu link #1')); $this->assertNoLink(t('Menu link #1'), 0, t('Not found menu link #1-1')); $this->assertLink(t('Menu link #2'), 0, t('Found menu link #2')); // Delete all links for the given path. menu_link_maintain('menu_test', 'delete', 'menu_test_maintain/1', ''); // Load a different page to be sure that we have up to date information. $this->drupalGet('menu_test_maintain/2'); $this->assertNoLink(t('Menu link updated'), 0, t('Not found deleted menu link')); $this->assertNoLink(t('Menu link #1'), 0, t('Not found menu link #1')); $this->assertNoLink(t('Menu link #1'), 0, t('Not found menu link #1-1')); $this->assertLink(t('Menu link #2'), 0, t('Found menu link #2')); } /** * Tests for menu_name parameter for hook_menu(). */ function testMenuName() { $admin_user = $this->drupalCreateUser(array('administer site configuration')); $this->drupalLogin($admin_user); $sql = "SELECT menu_name FROM {menu_links} WHERE router_path = 'menu_name_test'"; $name = db_result(db_query($sql)); $this->assertEqual($name, 'original', t('Menu name is "original".')); // Force a menu rebuild by going to the modules page. $this->drupalGet('admin/build/modules', array('query' => array("hook_menu_name" => 'changed'))); $sql = "SELECT menu_name FROM {menu_links} WHERE router_path = 'menu_name_test'"; $name = db_result(db_query($sql)); $this->assertEqual($name, 'changed', t('Menu name was successfully changed after rebuild.')); } /** * Tests for menu hiearchy. */ function testMenuHiearchy() { $parent_link = db_query("SELECT * FROM {menu_links} WHERE link_path = :link_path", array(':link_path' => 'menu-test/hierarchy/parent'))->fetchAssoc(); $child_link = db_query("SELECT * FROM {menu_links} WHERE link_path = :link_path", array(':link_path' => 'menu-test/hierarchy/parent/child'))->fetchAssoc(); $unattached_child_link = db_query("SELECT * FROM {menu_links} WHERE link_path = :link_path", array(':link_path' => 'menu-test/hierarchy/parent/child2/child'))->fetchAssoc(); $this->assertEqual($child_link['plid'], $parent_link['mlid'], t('The parent of a directly attached child is correct.')); $this->assertEqual($unattached_child_link['plid'], $parent_link['mlid'], t('The parent of a non-directly attached child is correct.')); } } /** * Tests rebuilding the menu by setting 'menu_rebuild_needed.' */ class MenuRebuildTestCase extends DrupalWebTestCase { public static function getInfo() { return array( 'name' => t('Menu rebuild test'), 'description' => t('Test rebuilding of menu.'), 'group' => t('Menu'), ); } /** * Test if the 'menu_rebuild_needed' variable triggers a menu_rebuild() call. */ function testMenuRebuildByVariable() { // Check if 'admin' path exists. $admin_exists = db_result(db_query("SELECT path from {menu_router} WHERE path = 'admin'")); $this->assertEqual($admin_exists, 'admin', t("The path 'admin/' exists prior to deleting.")); // Delete the path item 'admin', and test that the path doesn't exist in the database. $delete = db_delete('menu_router') ->condition('path', 'admin') ->execute(); $admin_exists = db_result(db_query("SELECT path from {menu_router} WHERE path = 'admin'")); $this->assertFalse($admin_exists, t("The path 'admin/' has been deleted and doesn't exist in the database.")); // Now we enable the rebuild variable and trigger menu_execute_active_handler() // to rebuild the menu item. Now 'admin' should exist. variable_set('menu_rebuild_needed', TRUE); // menu_execute_active_handler() should trigger the rebuild. $this->drupalGet(''); $admin_exists = db_result(db_query("SELECT path from {menu_router} WHERE path = 'admin'")); $this->assertEqual($admin_exists, 'admin', t("The menu has been rebuilt, the path 'admin' now exists again.")); } }