function OffCanvasTest::testOffCanvasLinks

Same name and namespace in other branches
  1. 9 core/modules/system/tests/src/FunctionalJavascript/OffCanvasTest.php \Drupal\Tests\system\FunctionalJavascript\OffCanvasTest::testOffCanvasLinks()
  2. 8.9.x core/modules/system/tests/src/FunctionalJavascript/OffCanvasTest.php \Drupal\Tests\system\FunctionalJavascript\OffCanvasTest::testOffCanvasLinks()
  3. 10 core/modules/system/tests/src/FunctionalJavascript/OffCanvasTest.php \Drupal\Tests\system\FunctionalJavascript\OffCanvasTest::testOffCanvasLinks()

Tests that non-contextual links will work with the off-canvas dialog.

@dataProvider themeDataProvider

File

core/modules/system/tests/src/FunctionalJavascript/OffCanvasTest.php, line 40

Class

OffCanvasTest
Tests the off-canvas dialog functionality.

Namespace

Drupal\Tests\system\FunctionalJavascript

Code

public function testOffCanvasLinks($theme) : void {
    $this->enableTheme($theme);
    $this->drupalGet('/off-canvas-test-links');
    $page = $this->getSession()
        ->getPage();
    $web_assert = $this->assertSession();
    // Confirm touchevents detection is loaded with Off Canvas assets.
    $this->assertNotNull($web_assert->waitForElement('css', 'html.no-touchevents'));
    // Make sure off-canvas dialog is on page when first loaded.
    $web_assert->elementNotExists('css', '#drupal-off-canvas');
    // Check opening and closing with two separate links.
    // Make sure tray updates to new content.
    // Check the first link again to make sure the empty title class is
    // removed.
    foreach ([
        1,
        2,
        1,
    ] as $link_index) {
        $this->assertOffCanvasDialog($link_index, 'side');
        $header_text = $this->getOffCanvasDialog()
            ->find('css', '.ui-dialog-title')
            ->getText();
        if ($link_index === 2) {
            // Check no title behavior.
            $web_assert->elementExists('css', '.ui-dialog-empty-title');
            $this->assertEquals(' ', $header_text);
            $style = $page->find('css', '.ui-dialog-off-canvas')
                ->getAttribute('style');
            $this->assertStringContainsString('width: 555px;', $style, 'Dialog width respected.');
            $page->clickLink("Open side panel 1");
            $this->waitForOffCanvasToOpen();
            $style = $page->find('css', '.ui-dialog-off-canvas')
                ->getAttribute('style');
            $this->assertStringNotContainsString('width: 555px;', $style, 'Dialog width reset to default.');
        }
        else {
            // Check that header is correct.
            $this->assertEquals("Thing {$link_index}", $header_text);
            $web_assert->elementNotExists('css', '.ui-dialog-empty-title');
        }
    }
    // Test the off_canvas_top tray.
    foreach ([
        1,
        2,
    ] as $link_index) {
        $this->assertOffCanvasDialog($link_index, 'top');
        $style = $page->find('css', '.ui-dialog-off-canvas')
            ->getAttribute('style');
        if ($link_index === 1) {
            $this->assertStringContainsString('height: auto;', $style);
        }
        else {
            $this->assertStringContainsString('height: 421px;', $style);
        }
    }
    // Ensure an off-canvas link opened from inside the off-canvas dialog will
    // work.
    $this->drupalGet('/off-canvas-test-links');
    $page->clickLink('Display more links!');
    $this->waitForOffCanvasToOpen();
    $web_assert->linkExists('Off_canvas link!');
    // Click off-canvas link inside off-canvas dialog
    $page->clickLink('Off_canvas link!');
    $this->waitForOffCanvasToOpen();
    $web_assert->elementTextContains('css', '.ui-dialog[aria-describedby="drupal-off-canvas"]', 'Thing 2 says hello');
    // Ensure an off-canvas link opened from inside the off-canvas dialog will
    // work after another dialog has been opened.
    $this->drupalGet('/off-canvas-test-links');
    $page->clickLink("Open side panel 1");
    $this->waitForOffCanvasToOpen();
    $page->clickLink('Display more links!');
    $this->waitForOffCanvasToOpen();
    $web_assert->linkExists('Off_canvas link!');
    // Click off-canvas link inside off-canvas dialog
    $page->clickLink('Off_canvas link!');
    $this->waitForOffCanvasToOpen();
    $web_assert->elementTextContains('css', '.ui-dialog[aria-describedby="drupal-off-canvas"]', 'Thing 2 says hello');
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.