annotate core/modules/language/tests/src/Kernel/LanguageFallbackTest.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 4c8ae668cc8c
children
rev   line source
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 }