‪TYPO3CMS  ‪main
SiteLanguageTest.php
Go to the documentation of this file.
1 <?php
2 
3 declare(strict_types=1);
4 
5 /*
6  * This file is part of the TYPO3 CMS project.
7  *
8  * It is free software; you can redistribute it and/or modify it under
9  * the terms of the GNU General Public License, either version 2
10  * of the License, or any later version.
11  *
12  * For the full copyright and license information, please read the
13  * LICENSE.txt file that was distributed with this source code.
14  *
15  * The TYPO3 project - inspiring people to share!
16  */
17 
19 
20 use PHPUnit\Framework\Attributes\DataProvider;
21 use PHPUnit\Framework\Attributes\Test;
25 use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
26 
27 final class ‪SiteLanguageTest extends UnitTestCase
28 {
29  public static function ‪languageFallbackIdConversionDataProvider(): array
30  {
31  return [
32  'no fallback set' => [
33  null,
34  [],
35  ],
36  'fallback given as empty string returns no fallback' => [
37  '',
38  [],
39  ],
40  'fallback to default language as string returns proper fallback' => [
41  '0',
42  [0],
43  ],
44  'fallback to multiple languages as string returns proper fallback' => [
45  '3,0',
46  [3, 0],
47  ],
48  'fallback to default language as array returns proper fallback' => [
49  ['0'],
50  [0],
51  ],
52  'fallback to multiple languages as array returns proper fallback' => [
53  ['3', '0'],
54  [3, 0],
55  ],
56  'fallback to multiple languages as array with integers returns proper fallback' => [
57  [3, 0],
58  [3, 0],
59  ],
60 
61  ];
62  }
63 
67  #[DataProvider('languageFallbackIdConversionDataProvider')]
68  #[Test]
69  public function ‪languageFallbackIdConversion($input, array $expected): void
70  {
71  $configuration = [
72  'fallbacks' => $input,
73  'locale' => 'fr',
74  ];
75  $site = $this->‪createSiteWithLanguage($configuration);
76  $subject = $site->getLanguageById(1);
77  self::assertSame($expected, $subject->getFallbackLanguageIds());
78  }
79 
80  #[Test]
81  public function ‪toArrayReturnsProperOverlaidData(): void
82  {
83  $configuration = [
84  'navigationTitle' => 'NavTitle',
85  'customValue' => 'a custom value',
86  'fallbacks' => '1,2',
87  'locale' => 'de',
88  ];
89  $site = $this->‪createSiteWithLanguage($configuration);
90  $subject = $site->getLanguageById(1);
91  $expected = [
92  'navigationTitle' => 'NavTitle',
93  'customValue' => 'a custom value',
94  'fallbacks' => '1,2',
95  'locale' => 'de',
96  'languageId' => 1,
97  'base' => '/',
98  'title' => 'Default',
99  'websiteTitle' => '',
100  'hreflang' => 'de',
101  'typo3Language' => 'de',
102  'flagIdentifier' => '',
103  'fallbackType' => 'strict',
104  'enabled' => true,
105  'fallbackLanguageIds' => [
106  1,
107  2,
108  ],
109  ];
110  self::assertSame($expected, $subject->toArray());
111  }
112 
113  public static function ‪typo3LanguageAndLocaleDataProvider(): \Generator
114  {
115  yield 'Defined "default" configuration' => [
116  'en-US',
117  [
118  'typo3Language' => 'default',
119  ],
120  'default',
121  ];
122  yield 'Undefined "default" configuration' => [
123  'en-US',
124  [],
125  'en_US',
126  ];
127  yield 'Undefined "default" configuration with POSIX' => [
128  'C',
129  [],
130  'default',
131  ];
132  yield 'Defined language + country combination' => [
133  'de-AT',
134  [
135  'typo3Language' => 'de_AT',
136  ],
137  'de_AT',
138  ];
139  yield 'Undefined language + country combination' => [
140  'de-AT',
141  [],
142  'de_AT',
143  ];
144  yield 'Different language + country combination' => [
145  'de-AT',
146  [
147  'typo3Language' => 'de',
148  ],
149  'de',
150  ];
151  }
152 
153  #[DataProvider('typo3LanguageAndLocaleDataProvider')]
154  #[Test]
155  public function ‪typo3LanguageIsEitherSetOrProperlyDerivedFromLocale(string $locale, array $configuration, $expected): void
156  {
157  $language = new ‪SiteLanguage(0, $locale, new ‪Uri('/'), $configuration);
158  self::assertSame($expected, $language->getTypo3Language());
159  }
160 
161  private function ‪createSiteWithLanguage(array $languageConfiguration): ‪Site
162  {
163  return new ‪Site('test', 1, [
164  'identifier' => 'test',
165  'rootPageId' => 1,
166  'base' => '/',
167  'languages' => [
168  array_merge(
169  $languageConfiguration,
170  [
171  'languageId' => 1,
172  'base' => '/',
173  ]
174  ),
175  ],
176  ]);
177  }
178 }
‪TYPO3\CMS\Core\Tests\Unit\Site\Entity
Definition: SiteLanguageTest.php:18
‪TYPO3\CMS\Core\Tests\Unit\Site\Entity\SiteLanguageTest\typo3LanguageIsEitherSetOrProperlyDerivedFromLocale
‪typo3LanguageIsEitherSetOrProperlyDerivedFromLocale(string $locale, array $configuration, $expected)
Definition: SiteLanguageTest.php:155
‪TYPO3\CMS\Core\Tests\Unit\Site\Entity\SiteLanguageTest\languageFallbackIdConversionDataProvider
‪static languageFallbackIdConversionDataProvider()
Definition: SiteLanguageTest.php:29
‪TYPO3\CMS\Core\Http\Uri
Definition: Uri.php:30
‪TYPO3\CMS\Core\Site\Entity\Site
Definition: Site.php:42
‪TYPO3\CMS\Core\Site\Entity\SiteLanguage
Definition: SiteLanguage.php:27
‪TYPO3\CMS\Core\Tests\Unit\Site\Entity\SiteLanguageTest\toArrayReturnsProperOverlaidData
‪toArrayReturnsProperOverlaidData()
Definition: SiteLanguageTest.php:81
‪TYPO3\CMS\Core\Tests\Unit\Site\Entity\SiteLanguageTest\createSiteWithLanguage
‪createSiteWithLanguage(array $languageConfiguration)
Definition: SiteLanguageTest.php:161
‪TYPO3\CMS\Core\Tests\Unit\Site\Entity\SiteLanguageTest\languageFallbackIdConversion
‪languageFallbackIdConversion($input, array $expected)
Definition: SiteLanguageTest.php:69
‪TYPO3\CMS\Core\Tests\Unit\Site\Entity\SiteLanguageTest\typo3LanguageAndLocaleDataProvider
‪static typo3LanguageAndLocaleDataProvider()
Definition: SiteLanguageTest.php:113
‪TYPO3\CMS\Core\Tests\Unit\Site\Entity\SiteLanguageTest
Definition: SiteLanguageTest.php:28