Mercurial > hg > isophonics-drupal-site
comparison core/modules/system/tests/src/FunctionalJavascript/OffCanvasTestBase.php @ 14:1fec387a4317
Update Drupal core to 8.5.2 via Composer
author | Chris Cannam |
---|---|
date | Mon, 23 Apr 2018 09:46:53 +0100 |
parents | |
children | 129ea1e6d783 |
comparison
equal
deleted
inserted
replaced
13:5fb285c0d0e3 | 14:1fec387a4317 |
---|---|
1 <?php | |
2 | |
3 namespace Drupal\Tests\system\FunctionalJavascript; | |
4 | |
5 use Drupal\FunctionalJavascriptTests\JavascriptTestBase; | |
6 | |
7 /** | |
8 * Base class contains common test functionality for the Off-canvas dialog. | |
9 */ | |
10 abstract class OffCanvasTestBase extends JavascriptTestBase { | |
11 | |
12 /** | |
13 * {@inheritdoc} | |
14 */ | |
15 protected function drupalGet($path, array $options = [], array $headers = []) { | |
16 $return = parent::drupalGet($path, $options, $headers); | |
17 $this->assertPageLoadComplete(); | |
18 return $return; | |
19 } | |
20 | |
21 /** | |
22 * Assert the page is completely loaded. | |
23 * | |
24 * Ajax requests may happen after page loads. Also for users who have access | |
25 * to contextual links the contextual link placeholders will be filled after | |
26 * the page is received. | |
27 */ | |
28 protected function assertPageLoadComplete() { | |
29 $this->assertSession()->assertWaitOnAjaxRequest(); | |
30 if ($this->loggedInUser && $this->loggedInUser->hasPermission('access contextual links')) { | |
31 $this->assertAllContextualLinksLoaded(); | |
32 } | |
33 } | |
34 | |
35 /** | |
36 * Assert all contextual link areas have be loaded. | |
37 * | |
38 * Contextual link placeholders will be filled after | |
39 * the page is received. | |
40 * | |
41 * @todo Move this function to https://www.drupal.org/node/2821724. | |
42 */ | |
43 protected function assertAllContextualLinksLoaded() { | |
44 $this->waitForNoElement('[data-contextual-id]:empty'); | |
45 } | |
46 | |
47 /** | |
48 * Enables a theme. | |
49 * | |
50 * @param string $theme | |
51 * The theme. | |
52 */ | |
53 protected function enableTheme($theme) { | |
54 // Enable the theme. | |
55 \Drupal::service('theme_installer')->install([$theme]); | |
56 $theme_config = \Drupal::configFactory()->getEditable('system.theme'); | |
57 $theme_config->set('default', $theme); | |
58 $theme_config->save(); | |
59 } | |
60 | |
61 /** | |
62 * Waits for off-canvas dialog to open. | |
63 */ | |
64 protected function waitForOffCanvasToOpen() { | |
65 $web_assert = $this->assertSession(); | |
66 // Wait just slightly longer than the off-canvas dialog CSS animation. | |
67 // @see core/misc/dialog/off-canvas.motion.css | |
68 $this->getSession()->wait(800); | |
69 $web_assert->assertWaitOnAjaxRequest(); | |
70 $this->assertElementVisibleAfterWait('css', '#drupal-off-canvas'); | |
71 } | |
72 | |
73 /** | |
74 * Waits for off-canvas dialog to close. | |
75 */ | |
76 protected function waitForOffCanvasToClose() { | |
77 $this->waitForNoElement('#drupal-off-canvas'); | |
78 } | |
79 | |
80 /** | |
81 * Gets the off-canvas dialog element. | |
82 * | |
83 * @return \Behat\Mink\Element\NodeElement|null | |
84 */ | |
85 protected function getOffCanvasDialog() { | |
86 $off_canvas_dialog = $this->getSession()->getPage()->find('css', '.ui-dialog[aria-describedby="drupal-off-canvas"]'); | |
87 $this->assertEquals(FALSE, empty($off_canvas_dialog), 'The off-canvas dialog was found.'); | |
88 return $off_canvas_dialog; | |
89 } | |
90 | |
91 /** | |
92 * Waits for an element to be removed from the page. | |
93 * | |
94 * @param string $selector | |
95 * CSS selector. | |
96 * @param int $timeout | |
97 * (optional) Timeout in milliseconds, defaults to 10000. | |
98 * | |
99 * @todo Remove in https://www.drupal.org/node/2892440. | |
100 */ | |
101 protected function waitForNoElement($selector, $timeout = 10000) { | |
102 $condition = "(typeof jQuery !== 'undefined' && jQuery('$selector').length === 0)"; | |
103 $this->assertJsCondition($condition, $timeout); | |
104 } | |
105 | |
106 /** | |
107 * Get themes to test. | |
108 * | |
109 * @return string[] | |
110 * Theme names to test. | |
111 */ | |
112 protected function getTestThemes() { | |
113 return ['bartik', 'stark', 'classy', 'stable', 'seven']; | |
114 } | |
115 | |
116 /** | |
117 * Asserts the specified selector is visible after a wait. | |
118 * | |
119 * @param string $selector | |
120 * The selector engine name. See ElementInterface::findAll() for the | |
121 * supported selectors. | |
122 * @param string|array $locator | |
123 * The selector locator. | |
124 * @param int $timeout | |
125 * (Optional) Timeout in milliseconds, defaults to 10000. | |
126 */ | |
127 protected function assertElementVisibleAfterWait($selector, $locator, $timeout = 10000) { | |
128 $this->assertNotEmpty($this->assertSession()->waitForElementVisible($selector, $locator, $timeout)); | |
129 } | |
130 | |
131 } |