p2 project
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

120 lines
4.3 KiB

<?php
declare(strict_types=1);
/**
* This file is part of the Carbon package.
*
* (c) Brian Nesbitt <brian@nesbot.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Tests\Language;
use Carbon\AbstractTranslator;
use Carbon\Carbon;
use Carbon\Exceptions\ImmutableException;
use Carbon\Exceptions\NotLocaleAwareException;
use Carbon\Translator;
use Carbon\TranslatorImmutable;
use ReflectionMethod;
use Tests\AbstractTestCase;
class TranslatorTest extends AbstractTestCase
{
public function testSetLocale()
{
$currentLocale = setlocale(LC_TIME, '0');
$currentLocaleAll = setlocale(LC_ALL, '0');
$translator = new Translator('en_FooBar');
$translator->setLocale('auto');
$this->assertSame('en', $translator->getLocale());
$translator = new Translator('en');
$translator->setLocale('en_iso');
$this->assertSame('en_ISO', $translator->getLocale());
$translator = new Translator('fr');
if (setlocale(LC_ALL, 'en_US.UTF-8', 'en_US.utf8', 'en_US', 'en_GB', 'en') === false ||
setlocale(LC_TIME, 'en_US.UTF-8', 'en_US.utf8', 'en_US', 'en_GB', 'en') === false) {
$this->markTestSkipped('testSetLocale test need en_US.UTF-8.');
}
$translator->setLocale('auto');
$this->assertStringStartsWith('en', $translator->getLocale());
setlocale(LC_ALL, $currentLocaleAll);
setlocale(LC_TIME, $currentLocale);
}
public function testMethodsPriorities()
{
Carbon::setLocale('nl');
$text = Carbon::parse('2019-08-06')->locale('en')->isoFormat('dddd D MMMM');
$this->assertSame('Tuesday 6 August', $text);
}
public function testCompareChunkLists()
{
$method = new ReflectionMethod(AbstractTranslator::class, 'compareChunkLists');
$method->setAccessible(true);
$this->assertSame(20, $method->invoke(null, ['a', 'b'], ['a', 'b']));
$this->assertSame(10, $method->invoke(null, ['a', 'b'], ['a', 'c']));
$this->assertSame(10, $method->invoke(null, ['a'], ['a', 'c']));
$this->assertSame(11, $method->invoke(null, ['a', 'b'], ['a']));
$this->assertSame(10, $method->invoke(null, ['a'], ['a']));
}
public function testNotLocaleAwareException()
{
$exception = new NotLocaleAwareException('foobar');
$this->assertSame(
'string does neither implements Symfony\Contracts\Translation\LocaleAwareInterface nor getLocale() method.',
$exception->getMessage(),
);
}
public function testTranslatorImmutable()
{
$this->expectExceptionObject(
new ImmutableException('setTranslations not allowed on '.TranslatorImmutable::class)
);
TranslatorImmutable::get('en')->setTranslations([]);
}
public function testSerializationKeepLocale()
{
$translator = TranslatorImmutable::get('de');
$this->assertEquals('de', unserialize(serialize($translator))->getLocale());
$past = new Carbon('-3 Days');
$today = new Carbon('today');
$interval = $today->diffAsCarbonInterval($past);
$translator = $interval->getLocalTranslator();
$this->assertEquals('en', unserialize(serialize($translator))->getLocale());
$past = new Carbon('-3 Days');
$today = new Carbon('today');
$interval = $today->locale('zh')->diffAsCarbonInterval($past);
$translator = $interval->getLocalTranslator();
$this->assertEquals('zh', unserialize(serialize($translator))->getLocale());
}
public function testUnserializeV2Object()
{
$interval = unserialize(<<<'EOS'
O:21:"Carbon\CarbonInterval":22:{s:1:"y";i:0;s:1:"m";i:2;s:1:"d";i:0;s:1:"h";i:0;s:1:"i";i:0;s:1:"s";i:0;s:1:"f";d:5.4E-5;s:6:"invert";i:0;s:4:"days";b:0;s:11:"from_string";b:0;s:9:" * tzName";N;s:7:" * step";N;s:22:" * localMonthsOverflow";N;s:21:" * localYearsOverflow";N;s:25:" * localStrictModeEnabled";N;s:24:" * localHumanDiffOptions";N;s:22:" * localToStringFormat";N;s:18:" * localSerializer";N;s:14:" * localMacros";N;s:21:" * localGenericMacros";N;s:22:" * localFormatFunction";N;s:18:" * localTranslator";N;}
EOS);
$this->assertCarbonInterval($interval, 0, 2, 0, 0, 0, 0, 54);
}
}