a0510beca72a0bb193f83d931068d323dbcc4364
[yaffs-website] / web / core / modules / language / tests / src / Functional / LanguageCustomLanguageConfigurationTest.php
1 <?php
2
3 namespace Drupal\Tests\language\Functional;
4
5 use Drupal\Core\Language\Language;
6 use Drupal\Core\Language\LanguageInterface;
7 use Drupal\Tests\BrowserTestBase;
8
9 /**
10  * Adds and configures custom languages.
11  *
12  * @group language
13  */
14 class LanguageCustomLanguageConfigurationTest extends BrowserTestBase {
15
16   /**
17    * Modules to enable.
18    *
19    * @var array
20    */
21   public static $modules = ['language'];
22
23   /**
24    * Functional tests for adding, editing and deleting languages.
25    */
26   public function testLanguageConfiguration() {
27
28     // Create user with permissions to add and remove languages.
29     $admin_user = $this->drupalCreateUser(['administer languages', 'access administration pages']);
30     $this->drupalLogin($admin_user);
31
32     // Add custom language.
33     $edit = [
34       'predefined_langcode' => 'custom',
35     ];
36     $this->drupalPostForm('admin/config/regional/language/add', $edit, t('Add custom language'));
37     // Test validation on missing values.
38     $this->assertText(t('@name field is required.', ['@name' => t('Language code')]));
39     $this->assertText(t('@name field is required.', ['@name' => t('Language name')]));
40     $empty_language = new Language();
41     $this->assertFieldChecked('edit-direction-' . $empty_language->getDirection(), 'Consistent usage of language direction.');
42     $this->assertUrl(\Drupal::url('language.add', [], ['absolute' => TRUE]), [], 'Correct page redirection.');
43
44     // Test validation of invalid values.
45     $edit = [
46       'predefined_langcode' => 'custom',
47       'langcode' => 'white space',
48       'label' => '<strong>evil markup</strong>',
49       'direction' => LanguageInterface::DIRECTION_LTR,
50     ];
51     $this->drupalPostForm('admin/config/regional/language/add', $edit, t('Add custom language'));
52
53     $this->assertRaw(t('%field must be a valid language tag as <a href=":url">defined by the W3C</a>.', [
54       '%field' => t('Language code'),
55       ':url' => 'http://www.w3.org/International/articles/language-tags/',
56     ]));
57
58     $this->assertRaw(t('%field cannot contain any markup.', ['%field' => t('Language name')]));
59     $this->assertUrl(\Drupal::url('language.add', [], ['absolute' => TRUE]), [], 'Correct page redirection.');
60
61     // Test adding a custom language with a numeric region code.
62     $edit = [
63       'predefined_langcode' => 'custom',
64       'langcode' => 'es-419',
65       'label' => 'Latin American Spanish',
66       'direction' => LanguageInterface::DIRECTION_LTR,
67     ];
68
69     $this->drupalPostForm('admin/config/regional/language/add', $edit, t('Add custom language'));
70     $this->assertRaw(t(
71       'The language %language has been created and can now be used.',
72       ['%language' => $edit['label']]
73     ));
74     $this->assertUrl(\Drupal::url('entity.configurable_language.collection', [], ['absolute' => TRUE]), [], 'Correct page redirection.');
75
76     // Test validation of existing language values.
77     $edit = [
78       'predefined_langcode' => 'custom',
79       'langcode' => 'de',
80       'label' => 'German',
81       'direction' => LanguageInterface::DIRECTION_LTR,
82     ];
83
84     // Add the language the first time.
85     $this->drupalPostForm('admin/config/regional/language/add', $edit, t('Add custom language'));
86     $this->assertRaw(t(
87       'The language %language has been created and can now be used.',
88       ['%language' => $edit['label']]
89     ));
90     $this->assertUrl(\Drupal::url('entity.configurable_language.collection', [], ['absolute' => TRUE]), [], 'Correct page redirection.');
91
92     // Add the language a second time and confirm that this is not allowed.
93     $this->drupalPostForm('admin/config/regional/language/add', $edit, t('Add custom language'));
94     $this->assertRaw(t(
95       'The language %language (%langcode) already exists.',
96       ['%language' => $edit['label'], '%langcode' => $edit['langcode']]
97     ));
98     $this->assertUrl(\Drupal::url('language.add', [], ['absolute' => TRUE]), [], 'Correct page redirection.');
99   }
100
101 }