LanguageTest.php

Same filename in this branch
  1. 11.x core/modules/language/tests/src/Kernel/Plugin/migrate/source/LanguageTest.php
  2. 11.x core/modules/ckeditor5/tests/src/FunctionalJavascript/LanguageTest.php
Same filename in other branches
  1. 9 core/modules/language/tests/src/Kernel/Plugin/migrate/source/LanguageTest.php
  2. 9 core/modules/ckeditor5/tests/src/FunctionalJavascript/LanguageTest.php
  3. 9 core/modules/ckeditor5/tests/src/Kernel/LanguageTest.php
  4. 9 core/modules/ckeditor/tests/src/Unit/Plugin/CKEditorPlugin/LanguageTest.php
  5. 8.9.x core/modules/language/tests/src/Kernel/Plugin/migrate/source/LanguageTest.php
  6. 8.9.x core/modules/ckeditor/tests/src/Unit/Plugin/CKEditorPlugin/LanguageTest.php
  7. 10 core/modules/language/tests/src/Kernel/Plugin/migrate/source/LanguageTest.php
  8. 10 core/modules/ckeditor5/tests/src/FunctionalJavascript/LanguageTest.php
  9. 10 core/modules/ckeditor5/tests/src/Kernel/LanguageTest.php

Namespace

Drupal\Tests\ckeditor5\Kernel

File

core/modules/ckeditor5/tests/src/Kernel/LanguageTest.php

View source
<?php

declare (strict_types=1);
namespace Drupal\Tests\ckeditor5\Kernel;

use Drupal\editor\Entity\Editor;
use Drupal\filter\Entity\FilterFormat;
use Drupal\KernelTests\KernelTestBase;
use Drupal\language\Entity\ConfigurableLanguage;
use Drupal\TestTools\Random;
use Symfony\Component\Yaml\Yaml;

/**
 * Tests language resolving for CKEditor 5.
 *
 * @group ckeditor5
 * @internal
 */
class LanguageTest extends KernelTestBase {
    
    /**
     * The CKEditor 5 plugin.
     *
     * @var \Drupal\ckeditor5\Plugin\Editor\CKEditor5
     */
    protected $ckeditor5;
    
    /**
     * {@inheritdoc}
     */
    protected static $modules = [
        'system',
        'user',
        'ckeditor5',
        'editor',
        'filter',
        'language',
        'locale',
    ];
    
    /**
     * {@inheritdoc}
     */
    protected function setUp() : void {
        parent::setUp();
        $this->ckeditor5 = $this->container
            ->get('plugin.manager.editor')
            ->createInstance('ckeditor5');
        FilterFormat::create(Yaml::parseFile('core/profiles/standard/config/install/filter.format.basic_html.yml'))->save();
        Editor::create([
            'format' => 'basic_html',
            'editor' => 'ckeditor5',
            'image_upload' => [
                'status' => FALSE,
            ],
        ])->save();
        $this->installConfig([
            'language',
        ]);
    }
    
    /**
     * Ensure that languages are resolved correctly.
     *
     * @param string $drupal_langcode
     *   The language code in Drupal.
     * @param string $cke5_langcode
     *   The language code in CKEditor 5.
     * @param bool $is_missing_mapping
     *   Whether this mapping is expected to be missing from language.mappings.
     *
     * @dataProvider provider
     */
    public function test(string $drupal_langcode, string $cke5_langcode, bool $is_missing_mapping = FALSE) : void {
        $editor = Editor::load('basic_html');
        ConfigurableLanguage::createFromLangcode($drupal_langcode)->save();
        $this->config('system.site')
            ->set('default_langcode', $drupal_langcode)
            ->save();
        if ($is_missing_mapping) {
            // CKEditor 5's UI language falls back to English, until the language
            // mapping is expanded.
            $settings = $this->ckeditor5
                ->getJSSettings($editor);
            $this->assertSame('en', $settings['language']['ui']);
            // Expand the language mapping.
            $config = $this->config('language.mappings');
            $mapping = $config->get('map');
            $mapping += [
                $cke5_langcode => $drupal_langcode,
            ];
            $config->set('map', $mapping)
                ->save();
        }
        $settings = $this->ckeditor5
            ->getJSSettings($editor);
        $this->assertSame($cke5_langcode, $settings['language']['ui']);
    }
    
    /**
     * Provides a list of language code pairs.
     *
     * @return string[][]
     */
    public static function provider() : array {
        $random_langcode = Random::machineName();
        return [
            'Language code transformed from browser mappings' => [
                'drupal_langcode' => 'pt-pt',
                'cke5_langcode' => 'pt',
            ],
            'Language code transformed from browser mappings 2' => [
                'drupal_langcode' => 'zh-hans',
                'cke5_langcode' => 'zh-cn',
            ],
            'Language code both in Drupal and CKEditor' => [
                'drupal_langcode' => 'fi',
                'cke5_langcode' => 'fi',
            ],
            'Language code not in Drupal but in CKEditor 5 requires new language.mappings entry' => [
                'drupal_langcode' => $random_langcode,
                'cke5_langcode' => 'de-ch',
                'is_missing_mapping' => TRUE,
            ],
        ];
    }

}

Classes

Title Deprecated Summary
LanguageTest Tests language resolving for CKEditor 5.

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