function ValidatorsTest::provider

Same name and namespace in other branches
  1. 9 core/modules/ckeditor5/tests/src/Kernel/ValidatorsTest.php \Drupal\Tests\ckeditor5\Kernel\ValidatorsTest::provider()
  2. 11.x core/modules/ckeditor5/tests/src/Kernel/ValidatorsTest.php \Drupal\Tests\ckeditor5\Kernel\ValidatorsTest::provider()

Provides a list of Text Editor config entities using CKEditor 5 to test.

File

core/modules/ckeditor5/tests/src/Kernel/ValidatorsTest.php, line 116

Class

ValidatorsTest
@covers \Drupal\ckeditor5\Plugin\Validation\Constraint\ToolbarItemConstraintValidator[[api-linebreak]] @covers \Drupal\ckeditor5\Plugin\Validation\Constraint\ToolbarItemDependencyConstraintValidator[[api-linebreak]] @covers…

Namespace

Drupal\Tests\ckeditor5\Kernel

Code

public static function provider() : array {
  $data = [];
  $data['CKEditor5::getDefaultSettings()'] = [
    // @see ::test()
'ckeditor5_settings' => [
      '__DEFAULT__',
    ],
    'expected_violations' => [],
  ];
  $data['non-existent toolbar button'] = [
    'ckeditor5_settings' => [
      'toolbar' => [
        'items' => [
          'underline',
          'bold',
          'italic',
          '-',
          'bulletedList',
          'foobar',
        ],
      ],
      'plugins' => [
        'ckeditor5_list' => [
          'properties' => [
            'reversed' => FALSE,
            'startIndex' => FALSE,
          ],
          'multiBlock' => TRUE,
        ],
      ],
    ],
    'expected_violations' => [
      'settings.toolbar.items.5' => 'The provided toolbar item <em class="placeholder">foobar</em> is not valid.',
    ],
  ];
  $data['missing heading plugin configuration'] = [
    'ckeditor5_settings' => [
      'toolbar' => [
        'items' => [
          'heading',
        ],
      ],
      'plugins' => [],
    ],
    'expected_violations' => [
      'settings.plugins.ckeditor5_heading' => 'Configuration for the enabled plugin "<em class="placeholder">Headings</em>" (<em class="placeholder">ckeditor5_heading</em>) is missing.',
    ],
  ];
  $data['missing language plugin configuration'] = [
    'ckeditor5_settings' => [
      'toolbar' => [
        'items' => [
          'textPartLanguage',
        ],
      ],
      'plugins' => [],
    ],
    'expected_violations' => [
      'settings.plugins.ckeditor5_language' => 'Configuration for the enabled plugin "<em class="placeholder">Language</em>" (<em class="placeholder">ckeditor5_language</em>) is missing.',
    ],
  ];
  $data['empty language plugin configuration'] = [
    'ckeditor5_settings' => [
      'toolbar' => [
        'items' => [
          'textPartLanguage',
        ],
      ],
      'plugins' => [
        'ckeditor5_language' => [],
      ],
    ],
    'expected_violations' => [
      'settings.plugins.ckeditor5_language' => [
        'Configuration for the enabled plugin "<em class="placeholder">Language</em>" (<em class="placeholder">ckeditor5_language</em>) is missing.',
        "'language_list' is a required key because settings.plugins.%key is ckeditor5_language (see config schema type ckeditor5.plugin.ckeditor5_language).",
      ],
    ],
  ];
  $data['valid language plugin configuration: un'] = [
    'ckeditor5_settings' => [
      'toolbar' => [
        'items' => [
          'textPartLanguage',
        ],
      ],
      'plugins' => [
        'ckeditor5_language' => [
          'language_list' => 'un',
        ],
      ],
    ],
    'expected_violations' => [],
  ];
  $data['valid language plugin configuration: all'] = [
    'ckeditor5_settings' => [
      'toolbar' => [
        'items' => [
          'textPartLanguage',
        ],
      ],
      'plugins' => [
        'ckeditor5_language' => [
          'language_list' => 'all',
        ],
      ],
    ],
    'expected_violations' => [],
  ];
  $data['invalid language plugin configuration: textPartLanguage button not enabled'] = [
    'ckeditor5_settings' => [
      'toolbar' => [
        'items' => [
          'bold',
        ],
      ],
      'plugins' => [
        'ckeditor5_language' => [
          'language_list' => 'all',
        ],
      ],
    ],
    'expected_violations' => [
      'settings.plugins.ckeditor5_language.language_list' => 'Depends on <em class="placeholder">textPartLanguage</em>, which is not enabled.',
    ],
  ];
  $data['invalid language plugin configuration: invalid language_list setting'] = [
    'ckeditor5_settings' => [
      'toolbar' => [
        'items' => [
          'textPartLanguage',
        ],
      ],
      'plugins' => [
        'ckeditor5_language' => [
          'language_list' => 'foo',
        ],
      ],
    ],
    'expected_violations' => [
      'settings.plugins.ckeditor5_language.language_list' => 'The value you selected is not a valid choice.',
    ],
  ];
  $data['drupalMedia toolbar item condition not met: media filter enabled'] = [
    'ckeditor5_settings' => [
      'toolbar' => [
        'items' => [
          'drupalMedia',
        ],
      ],
      'plugins' => [],
    ],
    'expected_violations' => [
      'settings.toolbar.items.0' => 'The <em class="placeholder">Drupal media</em> toolbar item requires the <em class="placeholder">Embed media</em> filter to be enabled.',
    ],
  ];
  $data['fooBarConditions toolbar item condition not met: Heading and Table plugins enabled, neither are'] = [
    'ckeditor5_settings' => [
      'toolbar' => [
        'items' => [
          'fooBarConditions',
        ],
      ],
      'plugins' => [],
    ],
    'expected_violations' => [
      'settings.toolbar.items.0' => 'The <em class="placeholder">Foo Bar (Test Plugins Condition)</em> toolbar item requires the <em class="placeholder">Headings, Table</em> plugins to be enabled.',
    ],
  ];
  $data['fooBarConditions toolbar item condition not met: Heading and Table plugins enabled, only one is'] = [
    'ckeditor5_settings' => [
      'toolbar' => [
        'items' => [
          'fooBarConditions',
          'heading',
        ],
      ],
      'plugins' => [
        'ckeditor5_heading' => [
          'enabled_headings' => [
            'heading2',
          ],
        ],
      ],
    ],
    'expected_violations' => [
      'settings.toolbar.items.0' => 'The <em class="placeholder">Foo Bar (Test Plugins Condition)</em> toolbar item requires the <em class="placeholder">Table</em> plugin to be enabled.',
    ],
  ];
  $data['fooBarConditions toolbar item condition met: Heading and Table plugins enabled, both are'] = [
    'ckeditor5_settings' => [
      'toolbar' => [
        'items' => [
          'fooBarConditions',
          'heading',
          'insertTable',
        ],
      ],
      'plugins' => [
        'ckeditor5_heading' => [
          'enabled_headings' => [
            'heading2',
          ],
        ],
      ],
    ],
    'expected_violations' => [],
  ];
  $data['INVALID: Style plugin with no styles'] = [
    'ckeditor5_settings' => [
      'toolbar' => [
        'items' => [
          'style',
        ],
      ],
      'plugins' => [
        'ckeditor5_style' => [
          'styles' => [],
        ],
      ],
    ],
    'expected_violations' => [
      'settings.plugins.ckeditor5_style.styles' => 'Enable at least one style, otherwise disable the Style plugin.',
    ],
  ];
  $data['INVALID: Style plugin configured to add class to GHS-supported non-HTML5 tag'] = [
    'ckeditor5_settings' => [
      'toolbar' => [
        'items' => [
          'style',
          'sourceEditing',
        ],
      ],
      'plugins' => [
        'ckeditor5_sourceEditing' => [
          'allowed_tags' => [
            '<foo>',
          ],
        ],
        'ckeditor5_style' => [
          'styles' => [
            [
              'label' => 'Barry foo',
              'element' => '<foo class="bar">',
            ],
          ],
        ],
      ],
    ],
    'expected_violations' => [
      'settings.plugins.ckeditor5_style.styles.0.element' => 'A style can only be specified for an HTML 5 tag. <code>&lt;foo&gt;</code> is not an HTML5 tag.',
    ],
  ];
  $data['INVALID: Style plugin configured to add class to plugin-supported non-HTML5 tag'] = [
    'ckeditor5_settings' => [
      'toolbar' => [
        'items' => [
          'style',
        ],
      ],
      'plugins' => [
        'ckeditor5_style' => [
          'styles' => [
            [
              'label' => 'Sensational media',
              'element' => '<drupal-media class="sensational">',
            ],
          ],
        ],
        'media_media' => [
          'allow_view_mode_override' => FALSE,
        ],
      ],
    ],
    'expected_violations' => [
      'settings.plugins.ckeditor5_style.styles.0.element' => 'A style can only be specified for an HTML 5 tag. <code>&lt;drupal-media&gt;</code> is not an HTML5 tag.',
    ],
  ];
  $data['INVALID: Style plugin configured to add class that is supported by a disabled plugin'] = [
    'ckeditor5_settings' => [
      'toolbar' => [
        'items' => [
          'style',
        ],
      ],
      'plugins' => [
        'ckeditor5_style' => [
          'styles' => [
            [
              'label' => 'Justified paragraph',
              'element' => '<p class="text-align-justify">',
            ],
          ],
        ],
      ],
    ],
    'expected_violations' => [
      'settings.plugins.ckeditor5_style.styles.0.element' => 'A style must only specify classes not supported by other plugins. The <code>text-align-justify</code> classes on <code>&lt;p&gt;</code> are supported by the <em class="placeholder">Alignment</em> plugin. Remove this style and enable that plugin instead.',
    ],
  ];
  $data['INVALID: Style plugin configured to add class that is supported by an enabled plugin if its configuration were different'] = [
    'ckeditor5_settings' => [
      'toolbar' => [
        'items' => [
          'style',
          'alignment',
        ],
      ],
      'plugins' => [
        'ckeditor5_alignment' => [
          'enabled_alignments' => [
            'center',
          ],
        ],
        'ckeditor5_style' => [
          'styles' => [
            [
              'label' => 'Justified paragraph',
              'element' => '<p class="text-align-justify">',
            ],
          ],
        ],
      ],
    ],
    'expected_violations' => [],
  ];
  $data['INVALID: Style plugin configured to add class that is supported by an enabled plugin'] = [
    'ckeditor5_settings' => [
      'toolbar' => [
        'items' => [
          'style',
          'alignment',
        ],
      ],
      'plugins' => [
        'ckeditor5_alignment' => [
          'enabled_alignments' => [
            'justify',
          ],
        ],
        'ckeditor5_style' => [
          'styles' => [
            [
              'label' => 'Justified paragraph',
              'element' => '<p class="text-align-justify">',
            ],
          ],
        ],
      ],
    ],
    'expected_violations' => [
      'settings.plugins.ckeditor5_style.styles.0.element' => 'A style must only specify classes not supported by other plugins. The <code>text-align-justify</code> classes on <code>&lt;p&gt;</code> are already supported by the enabled <em class="placeholder">Alignment</em> plugin.',
    ],
  ];
  $data['INVALID: Style plugin configured to add class to plugin-supported tag known to not work with Style … yet'] = [
    'ckeditor5_settings' => [
      'toolbar' => [
        'items' => [
          'drupalInsertImage',
          'style',
        ],
      ],
      'plugins' => [
        'ckeditor5_imageResize' => [
          'allow_resize' => FALSE,
        ],
        'ckeditor5_style' => [
          'styles' => [
            // @see https://github.com/ckeditor/ckeditor5/issues/13778
[
              'label' => 'Featured image',
              'element' => '<img class="featured">',
            ],
            // @see https://www.drupal.org/project/drupal/issues/3398223
            // @see https://github.com/ckeditor/ckeditor5/blob/39ad30090ead9dd2d54c3ac53d7f446ade9fd8ce/packages/ckeditor5-html-support/src/schemadefinitions.ts#L12-L50
[
              'label' => 'Fancy linebreak',
              'element' => '<br class="fancy">',
            ],
          ],
        ],
      ],
    ],
    'expected_violations' => [
      'settings.plugins.ckeditor5_style.styles.0.element' => 'The <code>&lt;img&gt;</code> tag is not yet supported by the Style plugin.',
      'settings.plugins.ckeditor5_style.styles.1.element' => 'The <code>&lt;br&gt;</code> tag is not yet supported by the Style plugin.',
    ],
  ];
  $data['INVALID: Style plugin has multiple styles with same label'] = [
    'ckeditor5_settings' => [
      'toolbar' => [
        'items' => [
          'blockQuote',
          'style',
        ],
      ],
      'plugins' => [
        'ckeditor5_style' => [
          'styles' => [
            0 => [
              'label' => 'Highlighted',
              'element' => '<p class="highlighted">',
            ],
            1 => [
              'label' => 'Highlighted',
              'element' => '<blockquote class="highlighted">',
            ],
          ],
        ],
      ],
    ],
    'expected_violations' => [
      'settings.plugins.ckeditor5_style.styles' => 'The label <em class="placeholder">Highlighted</em> is not unique.',
    ],
  ];
  $data['INVALID: Style plugin has styles with invalid elements'] = [
    'ckeditor5_settings' => [
      'toolbar' => [
        'items' => [
          'blockQuote',
          'style',
        ],
      ],
      'plugins' => [
        'ckeditor5_style' => [
          'styles' => [
            0 => [
              'label' => 'missing class attribute',
              'element' => '<p>',
            ],
            1 => [
              'label' => 'class attribute present but no allowed values listed',
              'element' => '<blockquote class="">',
            ],
          ],
        ],
      ],
    ],
    'expected_violations' => [
      'settings.plugins.ckeditor5_style.styles.0.element' => 'The following tag is missing the required attribute <code>class</code>: <code>&lt;p&gt;</code>.',
      'settings.plugins.ckeditor5_style.styles.1.element' => [
        'The following tag is not valid HTML: <em class="placeholder">&lt;blockquote class=&quot;&quot;&gt;</em>.',
        'The following tag does not have the minimum of 1 allowed values for the required attribute <code>class</code>: <code>&lt;blockquote class=&quot;&quot;&gt;</code>.',
      ],
    ],
  ];
  $data['VALID: Style plugin has multiple styles with different labels'] = [
    'ckeditor5_settings' => [
      'toolbar' => [
        'items' => [
          'blockQuote',
          'style',
        ],
      ],
      'plugins' => [
        'ckeditor5_style' => [
          'styles' => [
            [
              'label' => 'Callout',
              'element' => '<p class="callout">',
            ],
            [
              'label' => 'Interesting & highlighted quote',
              'element' => '<blockquote class="interesting highlighted">',
            ],
            [
              'label' => 'Famous',
              'element' => '<blockquote class="famous">',
            ],
          ],
        ],
      ],
    ],
    'expected_violations' => [],
  ];
  $data['INVALID: SourceEditing plugin configuration: <ol start type> must not be allowed because List can generate <ol reversed start>'] = [
    'ckeditor5_settings' => [
      'toolbar' => [
        'items' => [
          'numberedList',
          'sourceEditing',
        ],
      ],
      'plugins' => [
        'ckeditor5_list' => [
          'properties' => [
            'reversed' => TRUE,
            'startIndex' => TRUE,
          ],
          'multiBlock' => TRUE,
        ],
        'ckeditor5_sourceEditing' => [
          'allowed_tags' => [
            '<ol start type>',
          ],
        ],
      ],
    ],
    'expected_violations' => [
      'settings.plugins.ckeditor5_sourceEditing.allowed_tags.0' => 'The following attribute(s) are already supported by enabled plugins and should not be added to the Source Editing "Manually editable HTML tags" field: <em class="placeholder">List (&lt;ol start&gt;)</em>.',
    ],
  ];
  $data['INVALID: SourceEditing plugin configuration: <ol start type> must not be allowed because List can generate <ol start>'] = [
    'ckeditor5_settings' => [
      'toolbar' => [
        'items' => [
          'numberedList',
          'sourceEditing',
        ],
      ],
      'plugins' => [
        'ckeditor5_list' => [
          'properties' => [
            'reversed' => FALSE,
            'startIndex' => FALSE,
          ],
          'multiBlock' => TRUE,
        ],
        'ckeditor5_sourceEditing' => [
          'allowed_tags' => [
            '<ol start type>',
          ],
        ],
      ],
    ],
    'expected_violations' => [
      'settings.plugins.ckeditor5_sourceEditing.allowed_tags.0' => 'The following attribute(s) can optionally be supported by enabled plugins and should not be added to the Source Editing "Manually editable HTML tags" field: <em class="placeholder">List (&lt;ol start&gt;)</em>.',
    ],
  ];
  return $data;
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.