|
|
|
@ -2,6 +2,8 @@
|
|
|
|
|
|
|
|
|
|
namespace Engelsystem\Test\Unit\Helpers\Translation;
|
|
|
|
|
|
|
|
|
|
use Engelsystem\Helpers\Translation\GettextTranslator;
|
|
|
|
|
use Engelsystem\Helpers\Translation\TranslationNotFound;
|
|
|
|
|
use Engelsystem\Helpers\Translation\Translator;
|
|
|
|
|
use Engelsystem\Test\Unit\ServiceProviderTest;
|
|
|
|
|
use PHPUnit\Framework\MockObject\MockObject;
|
|
|
|
@ -19,18 +21,18 @@ class TranslatorTest extends ServiceProviderTest
|
|
|
|
|
*/
|
|
|
|
|
public function testInit()
|
|
|
|
|
{
|
|
|
|
|
$locales = ['te_ST.ER-01' => 'Tests', 'fo_OO' => 'SomeFOO'];
|
|
|
|
|
$locale = 'te_ST.ER-01';
|
|
|
|
|
$locales = ['te_ST' => 'Tests', 'fo_OO' => 'SomeFOO'];
|
|
|
|
|
$locale = 'te_ST';
|
|
|
|
|
|
|
|
|
|
/** @var callable|MockObject $callable */
|
|
|
|
|
$callable = $this->getMockBuilder(stdClass::class)
|
|
|
|
|
/** @var callable|MockObject $localeChange */
|
|
|
|
|
$localeChange = $this->getMockBuilder(stdClass::class)
|
|
|
|
|
->setMethods(['__invoke'])
|
|
|
|
|
->getMock();
|
|
|
|
|
$callable->expects($this->exactly(2))
|
|
|
|
|
$localeChange->expects($this->exactly(2))
|
|
|
|
|
->method('__invoke')
|
|
|
|
|
->withConsecutive(['te_ST.ER-01'], ['fo_OO']);
|
|
|
|
|
->withConsecutive(['te_ST'], ['fo_OO']);
|
|
|
|
|
|
|
|
|
|
$translator = new Translator($locale, $locales, $callable);
|
|
|
|
|
$translator = new Translator($locale, 'fo_OO', function () { }, $locales, $localeChange);
|
|
|
|
|
|
|
|
|
|
$this->assertEquals($locales, $translator->getLocales());
|
|
|
|
|
$this->assertEquals($locale, $translator->getLocale());
|
|
|
|
@ -43,24 +45,23 @@ class TranslatorTest extends ServiceProviderTest
|
|
|
|
|
$this->assertEquals($newLocales, $translator->getLocales());
|
|
|
|
|
|
|
|
|
|
$this->assertTrue($translator->hasLocale('ip_SU-M'));
|
|
|
|
|
$this->assertFalse($translator->hasLocale('te_ST.ER-01'));
|
|
|
|
|
$this->assertFalse($translator->hasLocale('te_ST'));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @covers \Engelsystem\Helpers\Translation\Translator::replaceText
|
|
|
|
|
* @covers \Engelsystem\Helpers\Translation\Translator::translate
|
|
|
|
|
*/
|
|
|
|
|
public function testTranslate()
|
|
|
|
|
{
|
|
|
|
|
/** @var Translator|MockObject $translator */
|
|
|
|
|
$translator = $this->getMockBuilder(Translator::class)
|
|
|
|
|
->setConstructorArgs(['de_DE.UTF-8', ['de_DE.UTF-8' => 'Deutsch']])
|
|
|
|
|
->setMethods(['translateGettext'])
|
|
|
|
|
->setConstructorArgs(['de_DE', 'en_US', function () { }, ['de_DE' => 'Deutsch']])
|
|
|
|
|
->setMethods(['translateText'])
|
|
|
|
|
->getMock();
|
|
|
|
|
$translator->expects($this->exactly(2))
|
|
|
|
|
->method('translateGettext')
|
|
|
|
|
->withConsecutive(['Hello!'], ['My favourite number is %u!'])
|
|
|
|
|
->willReturnOnConsecutiveCalls('Hallo!', 'Meine Lieblingszahl ist die %u!');
|
|
|
|
|
->method('translateText')
|
|
|
|
|
->withConsecutive(['gettext', ['Hello!'], []], ['gettext', ['My favourite number is %u!'], [3]])
|
|
|
|
|
->willReturnOnConsecutiveCalls('Hallo!', 'Meine Lieblingszahl ist die 3!');
|
|
|
|
|
|
|
|
|
|
$return = $translator->translate('Hello!');
|
|
|
|
|
$this->assertEquals('Hallo!', $return);
|
|
|
|
@ -76,15 +77,58 @@ class TranslatorTest extends ServiceProviderTest
|
|
|
|
|
{
|
|
|
|
|
/** @var Translator|MockObject $translator */
|
|
|
|
|
$translator = $this->getMockBuilder(Translator::class)
|
|
|
|
|
->setConstructorArgs(['de_DE.UTF-8', ['de_DE.UTF-8' => 'Deutsch']])
|
|
|
|
|
->setMethods(['translateGettextPlural'])
|
|
|
|
|
->setConstructorArgs(['de_DE', 'en_US', function () { }, ['de_DE' => 'Deutsch']])
|
|
|
|
|
->setMethods(['translateText'])
|
|
|
|
|
->getMock();
|
|
|
|
|
$translator->expects($this->once())
|
|
|
|
|
->method('translateGettextPlural')
|
|
|
|
|
->with('%s apple', '%s apples', 2)
|
|
|
|
|
->method('translateText')
|
|
|
|
|
->with('ngettext', ['%s apple', '%s apples', 2], [2])
|
|
|
|
|
->willReturn('2 Äpfel');
|
|
|
|
|
|
|
|
|
|
$return = $translator->translatePlural('%s apple', '%s apples', 2, [2]);
|
|
|
|
|
$this->assertEquals('2 Äpfel', $return);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @covers \Engelsystem\Helpers\Translation\Translator::translatePlural
|
|
|
|
|
* @covers \Engelsystem\Helpers\Translation\Translator::translateText
|
|
|
|
|
* @covers \Engelsystem\Helpers\Translation\Translator::replaceText
|
|
|
|
|
*/
|
|
|
|
|
public function testReplaceText()
|
|
|
|
|
{
|
|
|
|
|
/** @var GettextTranslator|MockObject $gtt */
|
|
|
|
|
$gtt = $this->createMock(GettextTranslator::class);
|
|
|
|
|
/** @var callable|MockObject $getTranslator */
|
|
|
|
|
$getTranslator = $this->getMockBuilder(stdClass::class)
|
|
|
|
|
->setMethods(['__invoke'])
|
|
|
|
|
->getMock();
|
|
|
|
|
$getTranslator->expects($this->exactly(5))
|
|
|
|
|
->method('__invoke')
|
|
|
|
|
->withConsecutive(['te_ST'], ['fo_OO'], ['te_ST'], ['fo_OO'], ['te_ST'])
|
|
|
|
|
->willReturn($gtt);
|
|
|
|
|
|
|
|
|
|
$i = 0;
|
|
|
|
|
$gtt->expects($this->exactly(4))
|
|
|
|
|
->method('gettext')
|
|
|
|
|
->willReturnCallback(function () use (&$i) {
|
|
|
|
|
$i++;
|
|
|
|
|
if ($i != 4) {
|
|
|
|
|
throw new TranslationNotFound();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return 'Lorem %s???';
|
|
|
|
|
});
|
|
|
|
|
$this->setExpects($gtt, 'ngettext', ['foo.barf'], 'Lorem %s!');
|
|
|
|
|
|
|
|
|
|
$translator = new Translator('te_ST', 'fo_OO', $getTranslator, ['te_ST' => 'Test', 'fo_OO' => 'Foo']);
|
|
|
|
|
|
|
|
|
|
// No translation
|
|
|
|
|
$this->assertEquals('foo.bar', $translator->translate('foo.bar'));
|
|
|
|
|
|
|
|
|
|
// Fallback translation
|
|
|
|
|
$this->assertEquals('Lorem test2???', $translator->translate('foo.batz', ['test2']));
|
|
|
|
|
|
|
|
|
|
// Successful translation
|
|
|
|
|
$this->assertEquals('Lorem test3!', $translator->translatePlural('foo.barf', 'foo.bar2', 3, ['test3']));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|