Commit 1bce7388 authored by alexpott's avatar alexpott

Issue #3073261 by oknate, phenaproxima, Wim Leers: Improve CKEditorTestTrait

(cherry picked from commit b28a392e)
parent 3416efa6
...@@ -13,7 +13,7 @@ trait CKEditorTestTrait { ...@@ -13,7 +13,7 @@ trait CKEditorTestTrait {
* Waits for CKEditor to initialize. * Waits for CKEditor to initialize.
* *
* @param string $instance_id * @param string $instance_id
* The CKEditor instance ID. * (optional) The CKEditor instance ID. Defaults to 'edit-body-0-value'.
* @param int $timeout * @param int $timeout
* (optional) Timeout in milliseconds, defaults to 10000. * (optional) Timeout in milliseconds, defaults to 10000.
*/ */
...@@ -22,24 +22,28 @@ protected function waitForEditor($instance_id = 'edit-body-0-value', $timeout = ...@@ -22,24 +22,28 @@ protected function waitForEditor($instance_id = 'edit-body-0-value', $timeout =
(function() { (function() {
return ( return (
typeof CKEDITOR !== 'undefined' typeof CKEDITOR !== 'undefined'
&& typeof CKEDITOR.instances["$instance_id"] !== 'undefined' && typeof CKEDITOR.instances["{$instance_id}"] !== 'undefined'
&& CKEDITOR.instances["$instance_id"].instanceReady && CKEDITOR.instances["{$instance_id}"].instanceReady
); );
}()); }());
JS; JS;
$this->assertJsCondition($condition, $timeout);
$this->getSession()->wait($timeout, $condition);
} }
/** /**
* Assigns a name to the CKEditor iframe. * Assigns a name to the CKEditor iframe.
* *
* @param string $id
* (optional) The id to assign the iframe element. Defaults to 'ckeditor'.
* @param string $instance_id
* (optional) The CKEditor instance ID. Defaults to 'edit-body-0-value'.
*
* @see \Behat\Mink\Session::switchToIFrame() * @see \Behat\Mink\Session::switchToIFrame()
*/ */
protected function assignNameToCkeditorIframe() { protected function assignNameToCkeditorIframe($id = 'ckeditor', $instance_id = 'edit-body-0-value') {
$javascript = <<<JS $javascript = <<<JS
(function(){ (function(){
document.getElementsByClassName('cke_wysiwyg_frame')[0].id = 'ckeditor'; CKEDITOR.instances['{$instance_id}'].element.getParent().find('.cke_wysiwyg_frame').$[0].id = '{$id}';
})() })()
JS; JS;
$this->getSession()->evaluateScript($javascript); $this->getSession()->evaluateScript($javascript);
...@@ -50,9 +54,11 @@ protected function assignNameToCkeditorIframe() { ...@@ -50,9 +54,11 @@ protected function assignNameToCkeditorIframe() {
* *
* @param string $name * @param string $name
* The name of the button, such as `drupallink`, `source`, etc. * The name of the button, such as `drupallink`, `source`, etc.
* @param string $instance_id
* (optional) The CKEditor instance ID. Defaults to 'edit-body-0-value'.
*/ */
protected function pressEditorButton($name) { protected function pressEditorButton($name, $instance_id = 'edit-body-0-value') {
$this->getEditorButton($name)->click(); $this->getEditorButton($name, $instance_id)->click();
} }
/** /**
...@@ -60,13 +66,15 @@ protected function pressEditorButton($name) { ...@@ -60,13 +66,15 @@ protected function pressEditorButton($name) {
* *
* @param string $name * @param string $name
* The name of the button, such as `drupallink`, `source`, etc. * The name of the button, such as `drupallink`, `source`, etc.
* @param string $instance_id
* (optional) The CKEditor instance ID. Defaults to 'edit-body-0-value'.
* *
* @return \Behat\Mink\Element\NodeElement|null * @return \Behat\Mink\Element\NodeElement|null
* The page element node if found, NULL if not. * The page element node if found, NULL if not.
*/ */
protected function getEditorButton($name) { protected function getEditorButton($name, $instance_id = 'edit-body-0-value') {
$this->getSession()->switchToIFrame(); $this->getSession()->switchToIFrame();
$button = $this->assertSession()->waitForElementVisible('css', 'a.cke_button__' . $name); $button = $this->assertSession()->waitForElementVisible('css', "#cke_$instance_id a.cke_button__" . $name);
$this->assertNotEmpty($button); $this->assertNotEmpty($button);
return $button; return $button;
...@@ -77,9 +85,11 @@ protected function getEditorButton($name) { ...@@ -77,9 +85,11 @@ protected function getEditorButton($name) {
* *
* @param string $name * @param string $name
* The name of the button, such as `drupallink`, `source`, etc. * The name of the button, such as `drupallink`, `source`, etc.
* @param string $instance_id
* (optional) The CKEditor instance ID. Defaults to 'edit-body-0-value'.
*/ */
protected function assertEditorButtonDisabled($name) { protected function assertEditorButtonDisabled($name, $instance_id = 'edit-body-0-value') {
$button = $this->getEditorButton($name); $button = $this->getEditorButton($name, $instance_id);
$this->assertTrue($button->hasClass('cke_button_disabled')); $this->assertTrue($button->hasClass('cke_button_disabled'));
$this->assertSame('true', $button->getAttribute('aria-disabled')); $this->assertSame('true', $button->getAttribute('aria-disabled'));
} }
...@@ -89,9 +99,11 @@ protected function assertEditorButtonDisabled($name) { ...@@ -89,9 +99,11 @@ protected function assertEditorButtonDisabled($name) {
* *
* @param string $name * @param string $name
* The name of the button, such as `drupallink`, `source`, etc. * The name of the button, such as `drupallink`, `source`, etc.
* @param string $instance_id
* (optional) The CKEditor instance ID. Defaults to 'edit-body-0-value'.
*/ */
protected function assertEditorButtonEnabled($name) { protected function assertEditorButtonEnabled($name, $instance_id = 'edit-body-0-value') {
$button = $this->getEditorButton($name); $button = $this->getEditorButton($name, $instance_id);
$this->assertFalse($button->hasClass('cke_button_disabled')); $this->assertFalse($button->hasClass('cke_button_disabled'));
$this->assertSame('false', $button->getAttribute('aria-disabled')); $this->assertSame('false', $button->getAttribute('aria-disabled'));
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment