summaryrefslogtreecommitdiff
path: root/tests/Unit/Helpers/Translation/TranslatorTest.php
diff options
context:
space:
mode:
Diffstat (limited to 'tests/Unit/Helpers/Translation/TranslatorTest.php')
-rw-r--r--tests/Unit/Helpers/Translation/TranslatorTest.php80
1 files changed, 62 insertions, 18 deletions
diff --git a/tests/Unit/Helpers/Translation/TranslatorTest.php b/tests/Unit/Helpers/Translation/TranslatorTest.php
index 7e9c534c..c173209a 100644
--- a/tests/Unit/Helpers/Translation/TranslatorTest.php
+++ b/tests/Unit/Helpers/Translation/TranslatorTest.php
@@ -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']));
+ }
}