Chris@0
|
1 <?php
|
Chris@0
|
2
|
Chris@0
|
3 namespace Drupal\Tests\language\Kernel;
|
Chris@0
|
4
|
Chris@0
|
5 use Drupal\Core\Language\LanguageInterface;
|
Chris@0
|
6 use Drupal\language\Entity\ConfigurableLanguage;
|
Chris@0
|
7
|
Chris@0
|
8 /**
|
Chris@0
|
9 * Tests the language fallback behavior.
|
Chris@0
|
10 *
|
Chris@0
|
11 * @group language
|
Chris@0
|
12 */
|
Chris@0
|
13 class LanguageFallbackTest extends LanguageTestBase {
|
Chris@0
|
14
|
Chris@0
|
15 /**
|
Chris@0
|
16 * {@inheritdoc}
|
Chris@0
|
17 */
|
Chris@0
|
18 protected function setUp() {
|
Chris@0
|
19 parent::setUp();
|
Chris@0
|
20
|
Chris@0
|
21 $i = 0;
|
Chris@0
|
22 foreach (['af', 'am', 'ar'] as $langcode) {
|
Chris@0
|
23 $language = ConfigurableLanguage::createFromLangcode($langcode);
|
Chris@0
|
24 $language->set('weight', $i--);
|
Chris@0
|
25 $language->save();
|
Chris@0
|
26 }
|
Chris@0
|
27 }
|
Chris@0
|
28
|
Chris@0
|
29 /**
|
Chris@0
|
30 * Tests language fallback candidates.
|
Chris@0
|
31 */
|
Chris@0
|
32 public function testCandidates() {
|
Chris@0
|
33 $language_list = $this->languageManager->getLanguages();
|
Chris@0
|
34 $expected = array_keys($language_list + [LanguageInterface::LANGCODE_NOT_SPECIFIED => NULL]);
|
Chris@0
|
35
|
Chris@0
|
36 // Check that language fallback candidates by default are all the available
|
Chris@0
|
37 // languages sorted by weight.
|
Chris@0
|
38 $candidates = $this->languageManager->getFallbackCandidates();
|
Chris@0
|
39 $this->assertEqual(array_values($candidates), $expected, 'Language fallback candidates are properly returned.');
|
Chris@0
|
40
|
Chris@0
|
41 // Check that candidates are alterable.
|
Chris@0
|
42 $this->state->set('language_test.fallback_alter.candidates', TRUE);
|
Chris@0
|
43 $expected = array_slice($expected, 0, count($expected) - 1);
|
Chris@0
|
44 $candidates = $this->languageManager->getFallbackCandidates();
|
Chris@0
|
45 $this->assertEqual(array_values($candidates), $expected, 'Language fallback candidates are alterable.');
|
Chris@0
|
46
|
Chris@0
|
47 // Check that candidates are alterable for specific operations.
|
Chris@0
|
48 $this->state->set('language_test.fallback_alter.candidates', FALSE);
|
Chris@0
|
49 $this->state->set('language_test.fallback_operation_alter.candidates', TRUE);
|
Chris@0
|
50 $expected[] = LanguageInterface::LANGCODE_NOT_SPECIFIED;
|
Chris@0
|
51 $expected[] = LanguageInterface::LANGCODE_NOT_APPLICABLE;
|
Chris@0
|
52 $candidates = $this->languageManager->getFallbackCandidates(['operation' => 'test']);
|
Chris@0
|
53 $this->assertEqual(array_values($candidates), $expected, 'Language fallback candidates are alterable for specific operations.');
|
Chris@0
|
54
|
Chris@0
|
55 // Check that when the site is monolingual no language fallback is applied.
|
Chris@0
|
56 $langcodes_to_delete = [];
|
Chris@0
|
57 foreach ($language_list as $langcode => $language) {
|
Chris@0
|
58 if (!$language->isDefault()) {
|
Chris@0
|
59 $langcodes_to_delete[] = $langcode;
|
Chris@0
|
60 }
|
Chris@0
|
61 }
|
Chris@0
|
62 entity_delete_multiple('configurable_language', $langcodes_to_delete);
|
Chris@0
|
63 $candidates = $this->languageManager->getFallbackCandidates();
|
Chris@0
|
64 $this->assertEqual(array_values($candidates), [LanguageInterface::LANGCODE_DEFAULT], 'Language fallback is not applied when the Language module is not enabled.');
|
Chris@0
|
65 }
|
Chris@0
|
66
|
Chris@0
|
67 }
|