View source
<?php
namespace Drupal\Tests\ckeditor5\FunctionalJavascript;
use Behat\Mink\Element\TraversableElement;
use Drupal\FunctionalJavascriptTests\WebDriverTestBase;
abstract class CKEditor5TestBase extends WebDriverTestBase {
protected static $modules = [
'node',
'ckeditor5',
];
protected $defaultTheme = 'stark';
protected function setUp() : void {
parent::setUp();
$this
->drupalCreateContentType([
'type' => 'page',
]);
$this
->drupalLogin($this
->drupalCreateUser([
'administer filters',
'create page content',
'edit own page content',
]));
}
public function addNewTextFormat($page, $assert_session, $name = 'ckeditor5') {
$this
->createNewTextFormat($page, $assert_session, $name);
$this
->saveNewTextFormat($page, $assert_session);
}
public function createNewTextFormat($page, $assert_session, $name = 'ckeditor5') {
$this
->drupalGet('admin/config/content/formats/add');
$page
->fillField('name', $name);
$assert_session
->waitForText('Machine name');
$this
->assertNotEmpty($assert_session
->waitForText($name));
$page
->checkField('roles[authenticated]');
if ($name === 'ckeditor5') {
$this
->assertTrue($page
->hasUncheckedField('filters[filter_html][status]'));
$page
->checkField('filters[filter_html][status]');
$assert_session
->assertWaitOnAjaxRequest();
$allowed_html_field = $assert_session
->fieldExists('filters[filter_html][settings][allowed_html]');
$allowed_html_field
->setValue('<p> <br>');
}
$page
->selectFieldOption('editor[editor]', $name);
}
public function saveNewTextFormat($page, $assert_session) {
$assert_session
->assertWaitOnAjaxRequest();
$page
->pressButton('Save configuration');
$this
->assertTrue($assert_session
->waitForText('Added text format'), "Confirm new text format saved");
}
protected function triggerKeyUp(string $selector, string $key) {
$script = <<<JS
(function (selector, key) {
const btn = document.querySelector(selector);
btn.dispatchEvent(new KeyboardEvent('keydown', { key }));
btn.dispatchEvent(new KeyboardEvent('keyup', { key }));
})('{<span class="php-variable">$selector</span>}', '{<span class="php-variable">$key</span>}')
JS;
$options = [
'script' => $script,
'args' => [],
];
$this
->getSession()
->getDriver()
->getWebDriverSession()
->execute($options);
}
protected function assertHtmlEsqueFieldValueEquals($field, $value, TraversableElement $container = NULL) {
$assert_session = $this
->assertSession();
$node = $assert_session
->fieldExists($field, $container);
$actual = $node
->getValue();
$regex = '/^' . preg_quote($value, '/') . '$/ui';
$message = sprintf('The field "%s" value is "%s", but "%s" expected.', $field, htmlspecialchars($actual), htmlspecialchars($value));
$assert_session
->assert((bool) preg_match($regex, $actual), $message);
}
protected function assertNoRealtimeValidationErrors() : void {
$assert_session = $this
->assertSession();
$this
->assertSame('', $assert_session
->elementExists('css', '[data-drupal-selector="ckeditor5-realtime-validation-messages-container"]')
->getHtml());
}
}