assertTrue($this->xpath($xpath), $message, $group); } /** * Check that an element does not exist in HTML markup. * * @param $xpath * An XPath expression. * @param $message * The message to display along with the assertion. * @param $group * The type of assertion - examples are "Browser", "PHP". * @return * TRUE if the assertion succeeded, FALSE otherwise. */ protected function assertNoElementByXPath($xpath, $message, $group = 'Other') { return $this->assertFalse($this->xpath($xpath), $message, $group); } } /** * Test menu links depending on user permissions. */ class AdminMenuPermissionsTestCase extends AdminMenuWebTestCase { public static function getInfo() { return array( 'name' => 'Menu link permissions', 'description' => 'Verify that menu is displayed according to user permissions.', 'group' => 'Administration menu', ); } function setUp() { // Additionally enable contact module. parent::setUp('contact'); } /** * Test that the links are added to the page (no JS testing). */ function testPermissions() { // Anonymous users should not see the menu. $this->drupalGet('node'); $this->assertNoElementByXPath('//div[@id="admin-menu"]', t('Admin menu not displayed to anonymous.')); // Create a new user who can access administration menu, but without the // permission 'display drupal links'. $admin_user = $this->drupalCreateUser(array('administer site configuration', 'access administration pages', 'administer nodes', 'access administration menu')); $this->drupalLogin($admin_user); // Check that the user can see the admin links, but not the drupal links. $this->assertElementByXPath('//div[@id="admin-menu"]', t('Administration menu is displayed.')); $this->drupalGet('node'); $this->assertElementByXPath('//div[@id="admin-menu"]//a[@href="/admin/content/node"]', t('Administer content link found.')); $this->assertNoElementByXPath('//div[@id="admin-menu"]//a[@href="http://drupal.org"]', t('Drupal links not found.')); $this->assertNoElementByXPath('//div[@id="admin-menu"]//a[@href="/admin/build/contact"]', t('Contact module link not found.')); // Create a new user with the permission 'display drupal links'. $admin_user2 = $this->drupalCreateUser(array('administer site configuration', 'access administration pages', 'administer nodes', 'access administration menu', 'display drupal links', 'administer site-wide contact form')); $this->drupalLogin($admin_user2); $this->drupalGet('node'); $this->assertElementByXPath('//div[@id="admin-menu"]//a[@href="http://drupal.org"]', t('Drupal links found.')); $this->assertElementByXPath('//div[@id="admin-menu"]//a[@href="/admin/build/contact"]', t('Contact module link found.')); } } /** * Test contained links in administration menu. */ class AdminMenuLinksTestCase extends AdminMenuWebTestCase { public static function getInfo() { return array( 'name' => 'Menu links', 'description' => 'Verify that admin menu contains proper links.', 'group' => 'Administration menu', ); } function setUp() { parent::setUp(); // Create and log in a full-blown administrative user. $permissions = module_invoke_all('perm'); $admin_user = $this->drupalCreateUser($permissions); $this->admin_user = $this->drupalLogin($admin_user); } /** * Test link contents. */ function testLinkContents() { // Create a content-type with special characters. $info = array( 'type' => 'special', 'name' => 'Cool & Special', 'module' => 'node', 'description' => '', ); $info = (object)_node_type_set_defaults($info); node_type_save($info); drupal_flush_all_caches(); // Fetch a page. $this->drupalGet('node'); $this->assertElementByXPath('//div[@id="admin-menu"]', t('Administration menu is displayed.')); // Verify that proper links are displayed. // We are explicitly NOT using t() here, since the purpose is to test our // custom link titles and 't' option. $links = array( '/admin/content/types/page' => t('Page'), '/admin/content/types/special' => t('Cool & Special'), ); foreach ($links as $url => $title) { $this->assertFieldByXPath('//div[@id="admin-menu"]//a[@href="' . $url . '"]', $title, t('!link-title content-type link found.', array('!link-title' => $title))); } /* $links = array( '/node/add/page' => t('Page'), '/node/add/special' => t('Cool & Special'), ); foreach ($links as $url => $title) { $this->assertFieldByXPath('//div[@id="admin-menu"]//a[@href="' . $url . '"]', $title, t('Create content » !link-title link found.', array('!link-title' => $title))); } */ } }