CKEditor5CKEditor4Compatibility.php
Namespace
Drupal\Tests\ckeditor\FunctionalJavascriptFile
-
core/
modules/ ckeditor/ tests/ src/ FunctionalJavascript/ CKEditor5CKEditor4Compatibility.php
View source
<?php
namespace Drupal\Tests\ckeditor\FunctionalJavascript;
use Drupal\ckeditor5\Plugin\Editor\CKEditor5;
use Drupal\Core\Entity\Entity\EntityFormDisplay;
use Drupal\editor\Entity\Editor;
use Drupal\field\Entity\FieldConfig;
use Drupal\field\Entity\FieldStorageConfig;
use Drupal\filter\Entity\FilterFormat;
use Drupal\FunctionalJavascriptTests\WebDriverTestBase;
use Symfony\Component\Validator\ConstraintViolation;
/**
* Ensures that CKEditor 5 can be used on the same page with CKEditor 4.
*
* @group ckeditor
* @group legacy
* @internal
*/
class CKEditor5CKEditor4Compatibility extends WebDriverTestBase {
/**
* {@inheritdoc}
*/
protected static $modules = [
'ckeditor',
'node',
'ckeditor5',
'ckeditor5_test',
];
/**
* {@inheritdoc}
*/
protected $defaultTheme = 'stark';
/**
* {@inheritdoc}
*/
protected function setUp() : void {
parent::setUp();
$this->drupalCreateContentType([
'type' => 'page',
]);
$this->drupalLogin($this->drupalCreateUser([
'administer filters',
'create page content',
'edit own page content',
]));
$current_user_roles = $this->loggedInUser
->getRoles(TRUE);
// Create text format, text editor and text fields for CKEditor 5 and 4.
foreach ([
5 => 'ckeditor5',
4 => 'ckeditor',
] as $version => $text_editor_plugin_id) {
$format_id = sprintf('test_format_for_ckeditor%d', $version);
$field_name = sprintf('field_text_ckeditor%d', $version);
FilterFormat::create([
'format' => $format_id,
'name' => sprintf('CKEditor %d editor', $version),
'roles' => $current_user_roles,
'filters' => [
'filter_html' => [
'status' => TRUE,
'settings' => [
'allowed_html' => '<p> <br> <h2> <h3> <h4> <h5> <h6> <strong> <em>',
],
],
],
])->save();
Editor::create([
'editor' => $text_editor_plugin_id,
'format' => $format_id,
'settings' => $version === 4 ? [] : [
'toolbar' => [
'items' => [
'heading',
'bold',
'italic',
],
],
'plugins' => [
'ckeditor5_heading' => [
'enabled_headings' => [
'heading2',
'heading3',
'heading4',
'heading5',
'heading6',
],
],
],
],
'image_upload' => [
'status' => FALSE,
],
])->save();
if ($version === 5) {
$this->assertSame([], array_map(function (ConstraintViolation $v) {
return (string) $v->getMessage();
}, iterator_to_array(CKEditor5::validatePair(Editor::load($format_id), FilterFormat::load($format_id)))));
}
$field_storage = FieldStorageConfig::create([
'field_name' => $field_name,
'entity_type' => 'node',
'type' => 'text_long',
]);
$field_storage->save();
FieldConfig::create([
'field_storage' => $field_storage,
'entity_type' => 'node',
'bundle' => 'page',
])->save();
// Add the new field to the default form display.
EntityFormDisplay::load('node.page.default')->setComponent($field_name, [
'type' => 'text_textarea',
])
->save();
}
}
/**
* Ensures that CKEditor 5 and CKEditor 4 can be used on the same page.
*/
public function testCkeCompatibility() {
$page = $this->getSession()
->getPage();
$assert_session = $this->assertSession();
$this->drupalGet('node/add/page');
$page->selectFieldOption('field_text_ckeditor4[0][format]', 'test_format_for_ckeditor4');
$page->selectFieldOption('field_text_ckeditor5[0][format]', 'test_format_for_ckeditor5');
$this->assertNotEmpty($assert_session->waitForElement('css', '.cke_wysiwyg_frame'));
$this->assertNotEmpty($assert_session->waitForElement('css', '.ck-editor'));
}
}
Classes
Title | Deprecated | Summary |
---|---|---|
CKEditor5CKEditor4Compatibility | Ensures that CKEditor 5 can be used on the same page with CKEditor 4. |
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.