function CKEditor5DialogTest::testOpenDialogSettings
Same name and namespace in other branches
- main core/modules/ckeditor5/tests/src/FunctionalJavascript/CKEditor5DialogTest.php \Drupal\Tests\ckeditor5\FunctionalJavascript\CKEditor5DialogTest::testOpenDialogSettings()
Tests that openDialog() applies defaults only when settings are undefined.
File
-
core/
modules/ ckeditor5/ tests/ src/ FunctionalJavascript/ CKEditor5DialogTest.php, line 95
Class
- CKEditor5DialogTest
- Tests for CKEditor 5 dialog behavior.
Namespace
Drupal\Tests\ckeditor5\FunctionalJavascriptCode
public function testOpenDialogSettings() : void {
FilterFormat::create([
'format' => 'ckeditor5',
'name' => 'CKEditor 5',
'roles' => [
RoleInterface::AUTHENTICATED_ID,
],
])->save();
Editor::create([
'format' => 'ckeditor5',
'editor' => 'ckeditor5',
'image_upload' => [
'status' => FALSE,
],
'settings' => [
'toolbar' => [
'items' => [
'link',
],
],
],
])->save();
$this->assertSame([], array_map(function (ConstraintViolationInterface $v) : string {
return (string) $v->getMessage();
}, iterator_to_array(CKEditor5::validatePair(Editor::load('ckeditor5'), FilterFormat::load('ckeditor5')))));
$this->drupalGet('/node/add/page');
$this->waitForEditor();
// When neither width nor autoResize is set, defaults should be applied.
$result = $this->getSession()
->evaluateScript(<<<JS
(function() {
let captured = null;
const originalAjax = Drupal.ajax;
Drupal.ajax = function(settings) { captured = settings; return { execute: function() {} }; };
Drupal.ckeditor5.openDialog('/test', function() {}, {});
Drupal.ajax = originalAjax;
return { width: captured.dialog.width, autoResizeType: typeof captured.dialog.autoResize };
})()
JS);
$this->assertSame('auto', $result['width']);
$this->assertSame('boolean', $result['autoResizeType']);
// A pre-defined width must not be overwritten by the 'auto' default.
$result = $this->getSession()
->evaluateScript(<<<JS
(function() {
let captured = null;
const originalAjax = Drupal.ajax;
Drupal.ajax = function(settings) { captured = settings; return { execute: function() {} }; };
Drupal.ckeditor5.openDialog('/test', function() {}, { width: '500px' });
Drupal.ajax = originalAjax;
return captured.dialog.width;
})()
JS);
$this->assertSame('500px', $result);
// A pre-defined autoResize: false must not be overwritten.
$result = $this->getSession()
->evaluateScript(<<<JS
(function() {
let captured = null;
const originalAjax = Drupal.ajax;
Drupal.ajax = function(settings) { captured = settings; return { execute: function() {} }; };
Drupal.ckeditor5.openDialog('/test', function() {}, { autoResize: false });
Drupal.ajax = originalAjax;
return captured.dialog.autoResize;
})()
JS);
$this->assertFalse($result);
// A pre-defined autoResize: true must not be overwritten.
$result = $this->getSession()
->evaluateScript(<<<JS
(function() {
let captured = null;
const originalAjax = Drupal.ajax;
Drupal.ajax = function(settings) { captured = settings; return { execute: function() {} }; };
Drupal.ckeditor5.openDialog('/test', function() {}, { autoResize: true });
Drupal.ajax = originalAjax;
return captured.dialog.autoResize;
})()
JS);
$this->assertTrue($result);
// The ui-dialog--narrow class must always be appended, even alongside
// custom existing classes.
$result = $this->getSession()
->evaluateScript(<<<JS
(function() {
let captured = null;
const originalAjax = Drupal.ajax;
Drupal.ajax = function(settings) { captured = settings; return { execute: function() {} }; };
Drupal.ckeditor5.openDialog('/test', function() {}, { classes: { 'ui-dialog': 'my-custom-class' } });
Drupal.ajax = originalAjax;
return captured.dialog.classes['ui-dialog'];
})()
JS);
$this->assertStringContainsString('ui-dialog--narrow', $result);
$this->assertStringContainsString('my-custom-class', $result);
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.