You are here

public function CKEditor5Test::testLanguageOfPartsPlugin in Drupal 10

Test for plugin Language of parts.

File

core/modules/ckeditor5/tests/src/FunctionalJavascript/CKEditor5Test.php, line 217

Class

CKEditor5Test
Tests for CKEditor5.

Namespace

Drupal\Tests\ckeditor5\FunctionalJavascript

Code

public function testLanguageOfPartsPlugin() {
  $page = $this
    ->getSession()
    ->getPage();
  $assert_session = $this
    ->assertSession();
  $this
    ->createNewTextFormat($page, $assert_session);

  // Press arrow down key to add the button to the active toolbar.
  $this
    ->assertNotEmpty($assert_session
    ->waitForElement('css', '.ckeditor5-toolbar-item-textPartLanguage'));
  $this
    ->triggerKeyUp('.ckeditor5-toolbar-item-textPartLanguage', 'ArrowDown');
  $assert_session
    ->assertWaitOnAjaxRequest();

  // The CKEditor 5 module should warn that `<span>` cannot be created.
  $assert_session
    ->waitForElement('css', '[role=alert][data-drupal-message-type="warning"]:contains("The Language plugin needs another plugin to create <span>, for it to be able to create the following attributes: <span lang dir>. Enable a plugin that supports creating this tag. If none exists, you can configure the Source Editing plugin to support it.")');

  // Make `<span>` creatable.
  $this
    ->assertNotEmpty($assert_session
    ->elementExists('css', '.ckeditor5-toolbar-item-sourceEditing'));
  $this
    ->triggerKeyUp('.ckeditor5-toolbar-item-sourceEditing', 'ArrowDown');
  $assert_session
    ->assertWaitOnAjaxRequest();

  // The Source Editing plugin settings form should now be present and should
  // have no allowed tags configured.
  $page
    ->clickLink('Source editing');
  $this
    ->assertNotNull($assert_session
    ->waitForElementVisible('css', '[data-drupal-selector="edit-editor-settings-plugins-ckeditor5-sourceediting-allowed-tags"]'));
  $javascript = <<<JS
      const allowedTags = document.querySelector('[data-drupal-selector="edit-editor-settings-plugins-ckeditor5-sourceediting-allowed-tags"]');
      allowedTags.value = '<span>';
      allowedTags.dispatchEvent(new Event('input'));
JS;
  $this
    ->getSession()
    ->executeScript($javascript);

  // Dispatching an `input` event does not work in WebDriver. Enabling another
  // toolbar item which has no associated HTML elements forces it.
  $this
    ->triggerKeyUp('.ckeditor5-toolbar-item-undo', 'ArrowDown');
  $assert_session
    ->assertWaitOnAjaxRequest();

  // Confirm there are no longer any warnings.
  $assert_session
    ->waitForElementRemoved('css', '[data-drupal-messages] [role="alert"]');

  // Test for "United Nations' official languages" option.
  $languages = LanguageManager::getUnitedNationsLanguageList();
  $this
    ->languageOfPartsPluginTestHelper($page, $assert_session, $languages, "un");

  // Test for "All 95 languages" option.
  $this
    ->drupalGet('admin/config/content/formats/manage/ckeditor5');
  $languages = LanguageManager::getStandardLanguageList();
  $this
    ->languageOfPartsPluginTestHelper($page, $assert_session, $languages, "all");
}