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