Chris@0
|
1 <?php
|
Chris@0
|
2
|
Chris@0
|
3 namespace Drupal\Tests\locale\Functional;
|
Chris@0
|
4
|
Chris@18
|
5 use Drupal\Component\Gettext\PoItem;
|
Chris@0
|
6 use Drupal\language\Entity\ConfigurableLanguage;
|
Chris@0
|
7 use Drupal\Tests\BrowserTestBase;
|
Chris@0
|
8
|
Chris@0
|
9 /**
|
Chris@0
|
10 * Tests LocaleLookup.
|
Chris@0
|
11 *
|
Chris@0
|
12 * @group locale
|
Chris@0
|
13 */
|
Chris@0
|
14 class LocaleLocaleLookupTest extends BrowserTestBase {
|
Chris@0
|
15
|
Chris@0
|
16 /**
|
Chris@0
|
17 * Modules to enable.
|
Chris@0
|
18 *
|
Chris@0
|
19 * @var array
|
Chris@0
|
20 */
|
Chris@0
|
21 public static $modules = ['locale', 'locale_test'];
|
Chris@0
|
22
|
Chris@0
|
23 /**
|
Chris@0
|
24 * {@inheritdoc}
|
Chris@0
|
25 */
|
Chris@0
|
26 protected function setUp() {
|
Chris@0
|
27 parent::setUp();
|
Chris@0
|
28
|
Chris@0
|
29 // Change the language default object to different values.
|
Chris@0
|
30 ConfigurableLanguage::createFromLangcode('fr')->save();
|
Chris@0
|
31 $this->config('system.site')->set('default_langcode', 'fr')->save();
|
Chris@0
|
32
|
Chris@0
|
33 $this->drupalLogin($this->rootUser);
|
Chris@0
|
34 }
|
Chris@0
|
35
|
Chris@0
|
36 /**
|
Chris@0
|
37 * Tests that there are no circular dependencies.
|
Chris@0
|
38 */
|
Chris@0
|
39 public function testCircularDependency() {
|
Chris@0
|
40 // Ensure that we can enable early_translation_test on a non-english site.
|
Chris@0
|
41 $this->drupalPostForm('admin/modules', ['modules[early_translation_test][enable]' => TRUE], t('Install'));
|
Chris@0
|
42 $this->assertResponse(200);
|
Chris@0
|
43 }
|
Chris@0
|
44
|
Chris@0
|
45 /**
|
Chris@0
|
46 * Test language fallback defaults.
|
Chris@0
|
47 */
|
Chris@0
|
48 public function testLanguageFallbackDefaults() {
|
Chris@0
|
49 $this->drupalGet('');
|
Chris@0
|
50 // Ensure state of fallback languages persisted by
|
Chris@0
|
51 // locale_test_language_fallback_candidates_locale_lookup_alter() is empty.
|
Chris@0
|
52 $this->assertEqual(\Drupal::state()->get('locale.test_language_fallback_candidates_locale_lookup_alter_candidates'), []);
|
Chris@0
|
53 // Make sure there is enough information provided for alter hooks.
|
Chris@0
|
54 $context = \Drupal::state()->get('locale.test_language_fallback_candidates_locale_lookup_alter_context');
|
Chris@0
|
55 $this->assertEqual($context['langcode'], 'fr');
|
Chris@0
|
56 $this->assertEqual($context['operation'], 'locale_lookup');
|
Chris@0
|
57 }
|
Chris@0
|
58
|
Chris@12
|
59 /**
|
Chris@12
|
60 * Test old plural style @count[number] fix.
|
Chris@12
|
61 *
|
Chris@12
|
62 * @dataProvider providerTestFixOldPluralStyle
|
Chris@12
|
63 */
|
Chris@12
|
64 public function testFixOldPluralStyle($translation_value, $expected) {
|
Chris@12
|
65 $string_storage = \Drupal::service('locale.storage');
|
Chris@12
|
66 $string = $string_storage->findString(['source' => 'Member for', 'context' => '']);
|
Chris@12
|
67 $lid = $string->getId();
|
Chris@12
|
68 $string_storage->createTranslation([
|
Chris@12
|
69 'lid' => $lid,
|
Chris@12
|
70 'language' => 'fr',
|
Chris@12
|
71 'translation' => $translation_value,
|
Chris@12
|
72 ])->save();
|
Chris@12
|
73 _locale_refresh_translations(['fr'], [$lid]);
|
Chris@12
|
74
|
Chris@12
|
75 // Check that 'count[2]' was fixed for render value.
|
Chris@12
|
76 $this->drupalGet('');
|
Chris@12
|
77 $this->assertSession()->pageTextContains($expected);
|
Chris@12
|
78
|
Chris@12
|
79 // Check that 'count[2]' was saved for source value.
|
Chris@12
|
80 $translation = $string_storage->findTranslation(['language' => 'fr', 'lid' => $lid])->translation;
|
Chris@12
|
81 $this->assertSame($translation_value, $translation, 'Source value not changed');
|
Chris@12
|
82 $this->assertNotFalse(strpos($translation, '@count[2]'), 'Source value contains @count[2]');
|
Chris@12
|
83 }
|
Chris@12
|
84
|
Chris@12
|
85 /**
|
Chris@12
|
86 * Provides data for testFixOldPluralStyle().
|
Chris@12
|
87 *
|
Chris@12
|
88 * @return array
|
Chris@12
|
89 * An array of test data:
|
Chris@12
|
90 * - translation value
|
Chris@12
|
91 * - expected result
|
Chris@12
|
92 */
|
Chris@12
|
93 public function providerTestFixOldPluralStyle() {
|
Chris@12
|
94 return [
|
Chris@12
|
95 'non-plural translation' => ['@count[2] non-plural test', '@count[2] non-plural test'],
|
Chris@18
|
96 'plural translation' => ['@count[2] plural test' . PoItem::DELIMITER, '@count plural test'],
|
Chris@12
|
97 ];
|
Chris@12
|
98 }
|
Chris@12
|
99
|
Chris@0
|
100 }
|