Split user language (UI translation) from locale (formatted values) (#4595)
This commit is contained in:
@@ -48,27 +48,18 @@ class LocaleFormatExtensionsTest extends TestCase
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string|array $locale
|
||||
* @param array|string $dateSettings
|
||||
* @return LocaleFormatExtensions
|
||||
* @param array<string, array{'date': string, 'time': string, 'rtl': bool, 'translation': bool}> $languageSettings
|
||||
*/
|
||||
protected function getSut($locale, $dateSettings, ?User $user = null)
|
||||
private function getSut(string $locale, array $languageSettings): LocaleFormatExtensions
|
||||
{
|
||||
$language = $locale;
|
||||
if (\is_array($locale)) {
|
||||
$language = $dateSettings;
|
||||
$dateSettings = $locale;
|
||||
}
|
||||
$user = new User();
|
||||
$user->setTimezone('Europe/Vienna');
|
||||
|
||||
if ($user === null) {
|
||||
$user = new User();
|
||||
$user->setTimezone('Europe/Vienna');
|
||||
}
|
||||
$security = $this->createMock(Security::class);
|
||||
$security->expects($this->any())->method('getUser')->willReturn($user);
|
||||
|
||||
$sut = new LocaleFormatExtensions(new LocaleService($dateSettings), $security);
|
||||
$sut->setLocale($language);
|
||||
$sut = new LocaleFormatExtensions(new LocaleService($languageSettings), $security);
|
||||
$sut->setLocale($locale);
|
||||
|
||||
return $sut;
|
||||
}
|
||||
@@ -143,9 +134,9 @@ class LocaleFormatExtensionsTest extends TestCase
|
||||
public function testDateShort(string $locale, \DateTime|string|null $date, string $expected): void
|
||||
{
|
||||
$sut = $this->getSut($locale, [
|
||||
'de' => ['date' => 'dd.MM.Y'],
|
||||
'en' => ['date' => 'Y-MM-dd'],
|
||||
'ru' => ['date' => 'dd.MM.Y'],
|
||||
'de' => array_merge(LocaleService::DEFAULT_SETTINGS, ['date' => 'dd.MM.Y']),
|
||||
'en' => array_merge(LocaleService::DEFAULT_SETTINGS, ['date' => 'Y-MM-dd']),
|
||||
'ru' => array_merge(LocaleService::DEFAULT_SETTINGS, ['date' => 'dd.MM.Y']),
|
||||
]);
|
||||
$this->assertEquals($expected, $sut->dateShort($date));
|
||||
}
|
||||
@@ -175,8 +166,8 @@ class LocaleFormatExtensionsTest extends TestCase
|
||||
public function testDateTime(string $locale, \DateTime|string|null $date, string $expected): void
|
||||
{
|
||||
$sut = $this->getSut($locale, [
|
||||
'de' => ['date' => 'dd.MM.Y', 'time' => 'HH:mm:s'],
|
||||
'en' => ['date' => 'Y-MM-dd', 'time' => 'h:mm a'],
|
||||
'de' => array_merge(LocaleService::DEFAULT_SETTINGS, ['date' => 'dd.MM.Y', 'time' => 'HH:mm:s']),
|
||||
'en' => array_merge(LocaleService::DEFAULT_SETTINGS, ['date' => 'Y-MM-dd', 'time' => 'h:mm a']),
|
||||
]);
|
||||
$this->assertEquals($expected, $sut->dateTime($date));
|
||||
}
|
||||
@@ -265,7 +256,7 @@ class LocaleFormatExtensionsTest extends TestCase
|
||||
$time = new \DateTime('2016-06-23');
|
||||
$time->setTime(17, 53, 23);
|
||||
|
||||
$sut = $this->getSut('en', ['en' => ['time' => 'HH:mm']]);
|
||||
$sut = $this->getSut('en', ['en' => array_merge(LocaleService::DEFAULT_SETTINGS, ['time' => 'HH:mm'])]);
|
||||
$this->assertEquals('17:53', $sut->time($time));
|
||||
$this->assertEquals('17:53', $sut->time('2016-06-23 17:53'));
|
||||
}
|
||||
@@ -289,10 +280,10 @@ class LocaleFormatExtensionsTest extends TestCase
|
||||
|
||||
public function testMoneyWithoutCurrency(): void
|
||||
{
|
||||
$sut = $this->getSut($this->localeEn, 'en');
|
||||
$sut = $this->getSut('en', $this->localeEn);
|
||||
$this->assertEquals('123.75', $sut->money(123.75));
|
||||
|
||||
$sut = $this->getSut($this->localeEn, 'de');
|
||||
$sut = $this->getSut('de', $this->localeEn);
|
||||
$this->assertEquals('123.234,76', $sut->money(123234.7554, null, true));
|
||||
$this->assertEquals('123.234,76', $sut->money(123234.7554, null, false));
|
||||
$this->assertEquals('123.234,76', $sut->money(123234.7554, 'EUR', false));
|
||||
@@ -303,7 +294,7 @@ class LocaleFormatExtensionsTest extends TestCase
|
||||
*/
|
||||
public function testMoneyNoCurrency($result, $amount, $currency, $locale): void
|
||||
{
|
||||
$sut = $this->getSut($this->localeEn, $locale);
|
||||
$sut = $this->getSut($locale, $this->localeEn);
|
||||
$this->assertEquals($result, $sut->money($amount, $currency, false));
|
||||
}
|
||||
|
||||
@@ -338,7 +329,7 @@ class LocaleFormatExtensionsTest extends TestCase
|
||||
*/
|
||||
public function testMoney(string $result, float|int|null $amount, string $currency, string $locale): void
|
||||
{
|
||||
$sut = $this->getSut($this->localeEn, $locale);
|
||||
$sut = $this->getSut($locale, $this->localeEn);
|
||||
$this->assertEquals($result, $sut->money($amount, $currency));
|
||||
}
|
||||
|
||||
@@ -370,9 +361,9 @@ class LocaleFormatExtensionsTest extends TestCase
|
||||
/**
|
||||
* @dataProvider getAmountData
|
||||
*/
|
||||
public function testAmount($result, $amount, $locale): void
|
||||
public function testAmount(string $result, null|int|float|string $amount, string $locale): void
|
||||
{
|
||||
$sut = $this->getSut($this->localeEn, $locale);
|
||||
$sut = $this->getSut($locale, $this->localeEn);
|
||||
$this->assertEquals($result, $sut->amount($amount));
|
||||
}
|
||||
|
||||
@@ -391,6 +382,7 @@ class LocaleFormatExtensionsTest extends TestCase
|
||||
['2.345,009', 2345.009, 'de'],
|
||||
['13.75', 13.75, 'en'],
|
||||
['13,75', 13.75, 'de'],
|
||||
['13,75', '13.75', 'de'],
|
||||
["13\u{a0}933,49", 13933.49, 'ru'],
|
||||
['1.234.567,891', 1234567.891234567890000, 'de'],
|
||||
];
|
||||
@@ -399,11 +391,11 @@ class LocaleFormatExtensionsTest extends TestCase
|
||||
/**
|
||||
* @dataProvider getMoneyData62_1
|
||||
*/
|
||||
public function testMoney62_1($result, $amount, $currency, $locale): void
|
||||
public function testMoney62_1(string $result, null|int|float $amount, string $currency, string $locale): void
|
||||
{
|
||||
IntlTestHelper::requireFullIntl($this, '62.1');
|
||||
|
||||
$sut = $this->getSut($this->localeEn, $locale);
|
||||
$sut = $this->getSut($locale, $this->localeEn);
|
||||
$this->assertEquals($result, $sut->money($amount, $currency));
|
||||
}
|
||||
|
||||
@@ -432,11 +424,11 @@ class LocaleFormatExtensionsTest extends TestCase
|
||||
$this->assertEquals('2.62', $sut->duration($record, true));
|
||||
|
||||
// test extended format
|
||||
$sut = $this->getSut($this->localeFake, 'XX');
|
||||
$sut = $this->getSut('XX', $this->localeFake);
|
||||
$this->assertEquals('2:37', $sut->duration($record->getDuration()));
|
||||
|
||||
// test negative duration
|
||||
$sut = $this->getSut($this->localeEn, 'en');
|
||||
$sut = $this->getSut('en', $this->localeEn);
|
||||
$this->assertEquals('0:00', $sut->duration(0));
|
||||
$this->assertEquals('0:00', $sut->duration(-1));
|
||||
$this->assertEquals('0:00', $sut->duration(-59));
|
||||
@@ -444,10 +436,10 @@ class LocaleFormatExtensionsTest extends TestCase
|
||||
$this->assertEquals('-1:36', $sut->duration(-5786));
|
||||
|
||||
// test zero duration
|
||||
$sut = $this->getSut($this->localeEn, 'en');
|
||||
$sut = $this->getSut('en', $this->localeEn);
|
||||
$this->assertEquals('0:00', $sut->duration(0));
|
||||
|
||||
$sut = $this->getSut($this->localeEn, 'en');
|
||||
$sut = $this->getSut('en', $this->localeEn);
|
||||
|
||||
$this->assertEquals('0:00', $sut->duration(null));
|
||||
$this->assertEquals('0.00', $sut->duration(null, true));
|
||||
@@ -499,31 +491,31 @@ class LocaleFormatExtensionsTest extends TestCase
|
||||
$this->assertEquals('2.62', $sut->durationDecimal($record));
|
||||
|
||||
// test extended format
|
||||
$sut = $this->getSut($this->localeDe, 'de');
|
||||
$sut = $this->getSut('de', $this->localeDe);
|
||||
$this->assertEquals('2,62', $sut->durationDecimal($record->getDuration()));
|
||||
|
||||
// test negative duration
|
||||
$sut = $this->getSut($this->localeEn, 'en');
|
||||
$sut = $this->getSut('en', $this->localeEn);
|
||||
$this->assertEquals('-0.00', $sut->durationDecimal(-1));
|
||||
|
||||
// test negative duration
|
||||
$sut = $this->getSut($this->localeEn, 'en');
|
||||
$sut = $this->getSut('en', $this->localeEn);
|
||||
$this->assertEquals('-0.01', $sut->durationDecimal(-40));
|
||||
$this->assertEquals('-0.01', $sut->durationDecimal(-50));
|
||||
|
||||
// test negative duration - with rounding issue
|
||||
$sut = $this->getSut($this->localeEn, 'en');
|
||||
$sut = $this->getSut('en', $this->localeEn);
|
||||
$this->assertEquals('-0.02', $sut->durationDecimal(-60));
|
||||
|
||||
// test zero duration
|
||||
$sut = $this->getSut($this->localeEn, 'en');
|
||||
$sut = $this->getSut('en', $this->localeEn);
|
||||
$this->assertEquals('0.00', $sut->durationDecimal(-0));
|
||||
$this->assertEquals('0.00', $sut->durationDecimal(0));
|
||||
|
||||
$sut = $this->getSut($this->localeEn, 'en');
|
||||
$sut = $this->getSut('en', $this->localeEn);
|
||||
$this->assertEquals('0.00', $sut->durationDecimal(-0));
|
||||
|
||||
$sut = $this->getSut($this->localeEn, 'en');
|
||||
$sut = $this->getSut('en', $this->localeEn);
|
||||
|
||||
$this->assertEquals('0.00', $sut->durationDecimal(null));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user