Unverified Commit 1bce7388 authored by Alex Pott's avatar Alex Pott
Browse files

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

(cherry picked from commit b28a392e)
parent 3416efa6
Loading
Loading
Loading
Loading
+27 −15
Original line number Diff line number Diff line
@@ -13,7 +13,7 @@ trait CKEditorTestTrait {
   * Waits for CKEditor to initialize.
   *
   * @param string $instance_id
   *   The CKEditor instance ID.
   *   (optional) The CKEditor instance ID. Defaults to 'edit-body-0-value'.
   * @param int $timeout
   *   (optional) Timeout in milliseconds, defaults to 10000.
   */
@@ -22,24 +22,28 @@ protected function waitForEditor($instance_id = 'edit-body-0-value', $timeout =
      (function() {
        return (
          typeof CKEDITOR !== 'undefined'
          && typeof CKEDITOR.instances["$instance_id"] !== 'undefined'
          && CKEDITOR.instances["$instance_id"].instanceReady
          && typeof CKEDITOR.instances["{$instance_id}"] !== 'undefined'
          && CKEDITOR.instances["{$instance_id}"].instanceReady
        );
      }());
JS;

    $this->getSession()->wait($timeout, $condition);
    $this->assertJsCondition($condition, $timeout);
  }

  /**
   * 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()
   */
  protected function assignNameToCkeditorIframe() {
  protected function assignNameToCkeditorIframe($id = 'ckeditor', $instance_id = 'edit-body-0-value') {
    $javascript = <<<JS
(function(){
  document.getElementsByClassName('cke_wysiwyg_frame')[0].id = 'ckeditor';
  CKEDITOR.instances['{$instance_id}'].element.getParent().find('.cke_wysiwyg_frame').$[0].id = '{$id}';
})()
JS;
    $this->getSession()->evaluateScript($javascript);
@@ -50,9 +54,11 @@ protected function assignNameToCkeditorIframe() {
   *
   * @param string $name
   *   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) {
    $this->getEditorButton($name)->click();
  protected function pressEditorButton($name, $instance_id = 'edit-body-0-value') {
    $this->getEditorButton($name, $instance_id)->click();
  }

  /**
@@ -60,13 +66,15 @@ protected function pressEditorButton($name) {
   *
   * @param string $name
   *   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
   *   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();
    $button = $this->assertSession()->waitForElementVisible('css', 'a.cke_button__' . $name);
    $button = $this->assertSession()->waitForElementVisible('css', "#cke_$instance_id a.cke_button__" . $name);
    $this->assertNotEmpty($button);

    return $button;
@@ -77,9 +85,11 @@ protected function getEditorButton($name) {
   *
   * @param string $name
   *   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) {
    $button = $this->getEditorButton($name);
  protected function assertEditorButtonDisabled($name, $instance_id = 'edit-body-0-value') {
    $button = $this->getEditorButton($name, $instance_id);
    $this->assertTrue($button->hasClass('cke_button_disabled'));
    $this->assertSame('true', $button->getAttribute('aria-disabled'));
  }
@@ -89,9 +99,11 @@ protected function assertEditorButtonDisabled($name) {
   *
   * @param string $name
   *   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) {
    $button = $this->getEditorButton($name);
  protected function assertEditorButtonEnabled($name, $instance_id = 'edit-body-0-value') {
    $button = $this->getEditorButton($name, $instance_id);
    $this->assertFalse($button->hasClass('cke_button_disabled'));
    $this->assertSame('false', $button->getAttribute('aria-disabled'));
  }