diff options
Diffstat (limited to 'tests/lib/L10N')
-rw-r--r-- | tests/lib/L10N/FactoryTest.php | 411 | ||||
-rw-r--r-- | tests/lib/L10N/L10nTest.php | 121 | ||||
-rw-r--r-- | tests/lib/L10N/LanguageIteratorTest.php | 34 |
3 files changed, 305 insertions, 261 deletions
diff --git a/tests/lib/L10N/FactoryTest.php b/tests/lib/L10N/FactoryTest.php index a2c1e8b5261..8c15baba9f6 100644 --- a/tests/lib/L10N/FactoryTest.php +++ b/tests/lib/L10N/FactoryTest.php @@ -3,16 +3,18 @@ declare(strict_types=1); /** - * Copyright (c) 2016 Joas Schilling <nickvergessen@owncloud.com> - * This file is licensed under the Affero General Public License version 3 or - * later. - * See the COPYING-README file. + * SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-or-later */ namespace Test\L10N; use OC\L10N\Factory; use OC\L10N\LanguageNotFoundException; +use OCP\App\AppPathNotFoundException; +use OCP\App\IAppManager; +use OCP\ICacheFactory; use OCP\IConfig; use OCP\IRequest; use OCP\IUser; @@ -22,7 +24,6 @@ use PHPUnit\Framework\MockObject\MockObject; use Test\TestCase; class FactoryTest extends TestCase { - /** @var IConfig|MockObject */ protected $config; @@ -32,17 +33,31 @@ class FactoryTest extends TestCase { /** @var IUserSession|MockObject */ protected $userSession; + /** @var ICacheFactory|MockObject */ + protected $cacheFactory; + /** @var string */ protected $serverRoot; + /** @var IAppManager|MockObject */ + protected IAppManager $appManager; + protected function setUp(): void { parent::setUp(); $this->config = $this->createMock(IConfig::class); $this->request = $this->createMock(IRequest::class); $this->userSession = $this->createMock(IUserSession::class); + $this->cacheFactory = $this->createMock(ICacheFactory::class); + $this->appManager = $this->createMock(IAppManager::class); $this->serverRoot = \OC::$SERVERROOT; + + $this->config + ->method('getSystemValueBool') + ->willReturnMap([ + ['installed', false, true], + ]); } /** @@ -64,16 +79,18 @@ class FactoryTest extends TestCase { $this->config, $this->request, $this->userSession, + $this->cacheFactory, $this->serverRoot, + $this->appManager, ]) - ->setMethods($methods) + ->onlyMethods($methods) ->getMock(); } - return new Factory($this->config, $this->request, $this->userSession, $this->serverRoot); + return new Factory($this->config, $this->request, $this->userSession, $this->cacheFactory, $this->serverRoot, $this->appManager); } - public function dataFindAvailableLanguages(): array { + public static function dataFindAvailableLanguages(): array { return [ [null], ['files'], @@ -95,9 +112,9 @@ class FactoryTest extends TestCase { $factory = $this->getFactory(['languageExists']); $this->invokePrivate($factory, 'requestLanguage', ['de']); $factory->expects(self::once()) - ->method('languageExists') - ->with('MyApp', 'de') - ->willReturn(true); + ->method('languageExists') + ->with('MyApp', 'de') + ->willReturn(true); self::assertSame('de', $factory->findLanguage('MyApp')); } @@ -105,22 +122,19 @@ class FactoryTest extends TestCase { public function testFindLanguageWithNotExistingRequestLanguageAndExistingStoredUserLanguage(): void { $factory = $this->getFactory(['languageExists']); $this->invokePrivate($factory, 'requestLanguage', ['de']); - $factory->expects(self::at(0)) - ->method('languageExists') - ->with('MyApp', 'de') - ->willReturn(false); - $this->config - ->expects(self::at(0)) - ->method('getSystemValue') - ->with('force_language', false) - ->willReturn(false); + $factory->expects($this->exactly(2)) + ->method('languageExists') + ->willReturnMap([ + ['MyApp', 'de', false], + ['MyApp', 'jp', true], + ]); $this->config - ->expects(self::at(1)) + ->expects($this->exactly(1)) ->method('getSystemValue') - ->with('installed', false) - ->willReturn(true); - $user = $this->getMockBuilder(IUser::class) - ->getMock(); + ->willReturnMap([ + ['force_language', false, false], + ]); + $user = $this->createMock(IUser::class); $user->expects(self::once()) ->method('getUID') ->willReturn('MyUserUid'); @@ -129,14 +143,10 @@ class FactoryTest extends TestCase { ->method('getUser') ->willReturn($user); $this->config - ->expects(self::once()) - ->method('getUserValue') - ->with('MyUserUid', 'core', 'lang', null) - ->willReturn('jp'); - $factory->expects(self::at(1)) - ->method('languageExists') - ->with('MyApp', 'jp') - ->willReturn(true); + ->expects(self::once()) + ->method('getUserValue') + ->with('MyUserUid', 'core', 'lang', null) + ->willReturn('jp'); self::assertSame('jp', $factory->findLanguage('MyApp')); } @@ -144,47 +154,33 @@ class FactoryTest extends TestCase { public function testFindLanguageWithNotExistingRequestLanguageAndNotExistingStoredUserLanguage(): void { $factory = $this->getFactory(['languageExists'], true); $this->invokePrivate($factory, 'requestLanguage', ['de']); - $factory->expects(self::at(0)) - ->method('languageExists') - ->with('MyApp', 'de') - ->willReturn(false); + $factory->expects($this->exactly(3)) + ->method('languageExists') + ->willReturnMap([ + ['MyApp', 'de', false], + ['MyApp', 'jp', false], + ['MyApp', 'es', true], + ]); $this->config - ->expects(self::at(0)) + ->expects($this->exactly(2)) ->method('getSystemValue') - ->with('force_language', false) - ->willReturn(false); - $this->config - ->expects(self::at(1)) - ->method('getSystemValue') - ->with('installed', false) - ->willReturn(true); - $user = $this->getMockBuilder(IUser::class) - ->getMock(); + ->willReturnMap([ + ['force_language', false, false], + ['default_language', false, 'es'] + ]); + $user = $this->createMock(IUser::class); $user->expects(self::once()) - ->method('getUID') - ->willReturn('MyUserUid'); + ->method('getUID') + ->willReturn('MyUserUid'); $this->userSession - ->expects(self::exactly(2)) - ->method('getUser') - ->willReturn($user); - $this->config - ->expects(self::once()) - ->method('getUserValue') - ->with('MyUserUid', 'core', 'lang', null) - ->willReturn('jp'); - $factory->expects(self::at(1)) - ->method('languageExists') - ->with('MyApp', 'jp') - ->willReturn(false); + ->expects(self::exactly(2)) + ->method('getUser') + ->willReturn($user); $this->config - ->expects(self::at(3)) - ->method('getSystemValue') - ->with('default_language', false) - ->willReturn('es'); - $factory->expects(self::at(2)) - ->method('languageExists') - ->with('MyApp', 'es') - ->willReturn(true); + ->expects(self::once()) + ->method('getUserValue') + ->with('MyUserUid', 'core', 'lang', null) + ->willReturn('jp'); self::assertSame('es', $factory->findLanguage('MyApp')); } @@ -192,47 +188,33 @@ class FactoryTest extends TestCase { public function testFindLanguageWithNotExistingRequestLanguageAndNotExistingStoredUserLanguageAndNotExistingDefault(): void { $factory = $this->getFactory(['languageExists'], true); $this->invokePrivate($factory, 'requestLanguage', ['de']); - $factory->expects(self::at(0)) - ->method('languageExists') - ->with('MyApp', 'de') - ->willReturn(false); + $factory->expects($this->exactly(3)) + ->method('languageExists') + ->willReturnMap([ + ['MyApp', 'de', false], + ['MyApp', 'jp', false], + ['MyApp', 'es', false], + ]); $this->config - ->expects(self::at(0)) + ->expects($this->exactly(2)) ->method('getSystemValue') - ->with('force_language', false) - ->willReturn(false); - $this->config - ->expects(self::at(1)) - ->method('getSystemValue') - ->with('installed', false) - ->willReturn(true); - $user = $this->getMockBuilder(IUser::class) - ->getMock(); + ->willReturnMap([ + ['force_language', false, false], + ['default_language', false, 'es'] + ]); + $user = $this->createMock(IUser::class); $user->expects(self::once()) - ->method('getUID') - ->willReturn('MyUserUid'); + ->method('getUID') + ->willReturn('MyUserUid'); $this->userSession - ->expects(self::exactly(2)) - ->method('getUser') - ->willReturn($user); - $this->config - ->expects(self::once()) - ->method('getUserValue') - ->with('MyUserUid', 'core', 'lang', null) - ->willReturn('jp'); - $factory->expects(self::at(1)) - ->method('languageExists') - ->with('MyApp', 'jp') - ->willReturn(false); + ->expects(self::exactly(2)) + ->method('getUser') + ->willReturn($user); $this->config - ->expects(self::at(3)) - ->method('getSystemValue') - ->with('default_language', false) - ->willReturn('es'); - $factory->expects(self::at(2)) - ->method('languageExists') - ->with('MyApp', 'es') - ->willReturn(false); + ->expects(self::once()) + ->method('getUserValue') + ->with('MyUserUid', 'core', 'lang', null) + ->willReturn('jp'); $this->config ->expects(self::never()) ->method('setUserValue'); @@ -243,51 +225,37 @@ class FactoryTest extends TestCase { public function testFindLanguageWithNotExistingRequestLanguageAndNotExistingStoredUserLanguageAndNotExistingDefaultAndNoAppInScope(): void { $factory = $this->getFactory(['languageExists'], true); $this->invokePrivate($factory, 'requestLanguage', ['de']); - $factory->expects(self::at(0)) - ->method('languageExists') - ->with('MyApp', 'de') - ->willReturn(false); + $factory->expects($this->exactly(3)) + ->method('languageExists') + ->willReturnMap([ + ['MyApp', 'de', false], + ['MyApp', 'jp', false], + ['MyApp', 'es', false], + ]); $this->config - ->expects(self::at(0)) + ->expects($this->exactly(2)) ->method('getSystemValue') - ->with('force_language', false) - ->willReturn(false); - $this->config - ->expects(self::at(1)) - ->method('getSystemValue') - ->with('installed', false) - ->willReturn(true); - $user = $this->getMockBuilder(IUser::class) - ->getMock(); + ->willReturnMap([ + ['force_language', false, false], + ['default_language', false, 'es'] + ]); + $user = $this->createMock(IUser::class); $user->expects(self::once()) - ->method('getUID') - ->willReturn('MyUserUid'); + ->method('getUID') + ->willReturn('MyUserUid'); $this->userSession - ->expects(self::exactly(2)) - ->method('getUser') - ->willReturn($user); - $this->config - ->expects(self::once()) - ->method('getUserValue') - ->with('MyUserUid', 'core', 'lang', null) - ->willReturn('jp'); - $factory->expects(self::at(1)) - ->method('languageExists') - ->with('MyApp', 'jp') - ->willReturn(false); + ->expects(self::exactly(2)) + ->method('getUser') + ->willReturn($user); $this->config - ->expects(self::at(3)) - ->method('getSystemValue') - ->with('default_language', false) - ->willReturn('es'); - $factory->expects(self::at(2)) - ->method('languageExists') - ->with('MyApp', 'es') - ->willReturn(false); + ->expects(self::once()) + ->method('getUserValue') + ->with('MyUserUid', 'core', 'lang', null) + ->willReturn('jp'); $this->config - ->expects(self::never()) - ->method('setUserValue') - ->with('MyUserUid', 'core', 'lang', 'en'); + ->expects(self::never()) + ->method('setUserValue') + ->with('MyUserUid', 'core', 'lang', 'en'); self::assertSame('en', $factory->findLanguage('MyApp')); @@ -296,12 +264,12 @@ class FactoryTest extends TestCase { public function testFindLanguageWithForcedLanguage(): void { $factory = $this->getFactory(['languageExists']); $this->config - ->expects(self::at(0)) + ->expects($this->once()) ->method('getSystemValue') ->with('force_language', false) ->willReturn('de'); - $factory->expects(self::once()) + $factory->expects($this->once()) ->method('languageExists') ->with('MyApp', 'de') ->willReturn(true); @@ -310,10 +278,9 @@ class FactoryTest extends TestCase { } /** - * @dataProvider dataFindAvailableLanguages - * * @param string|null $app */ + #[\PHPUnit\Framework\Attributes\DataProvider('dataFindAvailableLanguages')] public function testFindAvailableLanguages($app): void { $factory = $this->getFactory(['findL10nDir']); $factory->expects(self::once()) @@ -324,7 +291,7 @@ class FactoryTest extends TestCase { self::assertEqualsCanonicalizing(['cs', 'de', 'en', 'ru'], $factory->findAvailableLanguages($app)); } - public function dataLanguageExists(): array { + public static function dataLanguageExists(): array { return [ [null, 'en', [], true], [null, 'de', [], false], @@ -348,7 +315,7 @@ class FactoryTest extends TestCase { ->willReturn($this->serverRoot . '/apps/files/l10n/'); $this->config ->expects(self::once()) - ->method('getSystemValue') + ->method('getSystemValueString') ->with('theme') ->willReturn('abc'); @@ -356,13 +323,13 @@ class FactoryTest extends TestCase { } /** - * @dataProvider dataLanguageExists * * @param string|null $app * @param string $lang * @param string[] $availableLanguages * @param string $expected */ + #[\PHPUnit\Framework\Attributes\DataProvider('dataLanguageExists')] public function testLanguageExists($app, $lang, array $availableLanguages, $expected): void { $factory = $this->getFactory(['findAvailableLanguages']); $factory->expects(($lang === 'en') ? self::never() : self::once()) @@ -373,7 +340,7 @@ class FactoryTest extends TestCase { self::assertSame($expected, $factory->languageExists($app, $lang)); } - public function dataSetLanguageFromRequest(): array { + public static function dataSetLanguageFromRequest(): array { return [ // Language is available [null, 'de', ['de'], 'de'], @@ -396,13 +363,13 @@ class FactoryTest extends TestCase { } /** - * @dataProvider dataSetLanguageFromRequest * * @param string|null $app * @param string $header * @param string[] $availableLanguages * @param string $expected */ + #[\PHPUnit\Framework\Attributes\DataProvider('dataSetLanguageFromRequest')] public function testGetLanguageFromRequest($app, $header, array $availableLanguages, $expected): void { $factory = $this->getFactory(['findAvailableLanguages', 'respectDefaultLanguage']); $factory->expects(self::once()) @@ -428,9 +395,9 @@ class FactoryTest extends TestCase { } } - public function dataGetL10nFilesForApp(): array { + public static function dataGetL10nFilesForApp(): array { return [ - [null, 'de', [\OC::$SERVERROOT . '/core/l10n/de.json']], + ['', 'de', [\OC::$SERVERROOT . '/core/l10n/de.json']], ['core', 'ru', [\OC::$SERVERROOT . '/core/l10n/ru.json']], ['lib', 'ru', [\OC::$SERVERROOT . '/lib/l10n/ru.json']], ['settings', 'de', [\OC::$SERVERROOT . '/apps/settings/l10n/de.json']], @@ -441,19 +408,30 @@ class FactoryTest extends TestCase { } /** - * @dataProvider dataGetL10nFilesForApp * - * @param string|null $app + * @param string $app * @param string $expected */ + #[\PHPUnit\Framework\Attributes\DataProvider('dataGetL10nFilesForApp')] public function testGetL10nFilesForApp($app, $lang, $expected): void { $factory = $this->getFactory(); + if (in_array($app, ['settings','files'])) { + $this->appManager + ->method('getAppPath') + ->with($app) + ->willReturn(\OC::$SERVERROOT . '/apps/' . $app); + } else { + $this->appManager + ->method('getAppPath') + ->with($app) + ->willThrowException(new AppPathNotFoundException()); + } self::assertSame($expected, $this->invokePrivate($factory, 'getL10nFilesForApp', [$app, $lang])); } - public function dataFindL10NDir(): array { + public static function dataFindL10NDir(): array { return [ - [null, \OC::$SERVERROOT . '/core/l10n/'], + ['', \OC::$SERVERROOT . '/core/l10n/'], ['core', \OC::$SERVERROOT . '/core/l10n/'], ['lib', \OC::$SERVERROOT . '/lib/l10n/'], ['settings', \OC::$SERVERROOT . '/apps/settings/l10n/'], @@ -463,17 +441,28 @@ class FactoryTest extends TestCase { } /** - * @dataProvider dataFindL10NDir * - * @param string|null $app + * @param string $app * @param string $expected */ + #[\PHPUnit\Framework\Attributes\DataProvider('dataFindL10NDir')] public function testFindL10NDir($app, $expected): void { $factory = $this->getFactory(); + if (in_array($app, ['settings','files'])) { + $this->appManager + ->method('getAppPath') + ->with($app) + ->willReturn(\OC::$SERVERROOT . '/apps/' . $app); + } else { + $this->appManager + ->method('getAppPath') + ->with($app) + ->willThrowException(new AppPathNotFoundException()); + } self::assertSame($expected, $this->invokePrivate($factory, 'findL10nDir', [$app])); } - public function dataFindLanguage(): array { + public static function dataFindLanguage(): array { return [ // Not logged in [false, [], 'en'], @@ -489,12 +478,12 @@ class FactoryTest extends TestCase { } /** - * @dataProvider dataFindLanguage * * @param bool $loggedIn * @param array $availableLang * @param string $expected */ + #[\PHPUnit\Framework\Attributes\DataProvider('dataFindLanguage')] public function testFindLanguage($loggedIn, $availableLang, $expected): void { $userLang = 'nl'; $browserLang = 'de'; @@ -503,9 +492,7 @@ class FactoryTest extends TestCase { $this->config->expects(self::any()) ->method('getSystemValue') ->willReturnCallback(function ($var, $default) use ($defaultLang) { - if ($var === 'installed') { - return true; - } elseif ($var === 'default_language') { + if ($var === 'default_language') { return $defaultLang; } else { return $default; @@ -513,8 +500,7 @@ class FactoryTest extends TestCase { }); if ($loggedIn) { - $user = $this->getMockBuilder(IUser::class) - ->getMock(); + $user = $this->createMock(IUser::class); $user->expects(self::any()) ->method('getUID') ->willReturn('MyUserUid'); @@ -591,12 +577,11 @@ class FactoryTest extends TestCase { public function testFindGenericLanguageByUserLanguage(): void { $factory = $this->getFactory(); - $this->config->expects(self::exactly(3)) + $this->config->expects(self::exactly(2)) ->method('getSystemValue') ->willReturnMap([ ['force_language', false, false,], ['default_language', false, false,], - ['installed', false, true], ]); $user = $this->createMock(IUser::class); $this->userSession->expects(self::once()) @@ -619,7 +604,6 @@ class FactoryTest extends TestCase { ->willReturnMap([ ['force_language', false, false,], ['default_language', false, false,], - ['installed', false, true], ]); $user = $this->createMock(IUser::class); $this->userSession->expects(self::once()) @@ -650,7 +634,6 @@ class FactoryTest extends TestCase { ->willReturnMap([ ['force_language', false, false,], ['default_language', false, false,], - ['installed', false, true], ]); $user = $this->createMock(IUser::class); $this->userSession->expects(self::once()) @@ -675,7 +658,7 @@ class FactoryTest extends TestCase { self::assertSame('en', $lang); } - public function dataTestRespectDefaultLanguage(): array { + public static function dataTestRespectDefaultLanguage(): array { return [ ['de', 'de_DE', true, 'de_DE'], ['de', 'de', true, 'de'], @@ -687,13 +670,13 @@ class FactoryTest extends TestCase { /** * test if we respect default language if possible * - * @dataProvider dataTestRespectDefaultLanguage * * @param string $lang * @param string $defaultLanguage * @param bool $langExists * @param string $expected */ + #[\PHPUnit\Framework\Attributes\DataProvider('dataTestRespectDefaultLanguage')] public function testRespectDefaultLanguage($lang, $defaultLanguage, $langExists, $expected): void { $factory = $this->getFactory(['languageExists']); $factory->expects(self::any()) @@ -705,21 +688,67 @@ class FactoryTest extends TestCase { self::assertSame($expected, $result); } - public function languageIteratorRequestProvider():array { + public static function dataTestReduceToLanguages(): array { return [ - [ true, $this->createMock(IUser::class)], - [ false, $this->createMock(IUser::class)], - [ false, null] + ['en', ['en', 'de', 'fr', 'it', 'es'], ['en', 'fr', 'de'], ['en', 'fr', 'de']], + ['en', ['en', 'de', 'fr', 'it', 'es'], ['en', 'de'], ['en', 'de']], + ['en', ['en', 'de', 'fr', 'it', 'es'], [], ['de', 'en', 'es', 'fr', 'it']], ]; } /** - * @dataProvider languageIteratorRequestProvider + * test + * - if available languages set can be reduced by configuration + * - if available languages set is not reduced to an empty set if + * the reduce config is an empty set + * + * + * @param string $lang + * @param array $availableLanguages + * @param array $reducedLanguageSet + * @param array $expected */ - public function testGetLanguageIterator(bool $hasSession, IUser $iUserMock = null): void { + #[\PHPUnit\Framework\Attributes\DataProvider('dataTestReduceToLanguages')] + public function testReduceLanguagesByConfiguration(string $lang, array $availableLanguages, array $reducedLanguageSet, array $expected): void { + $factory = $this->getFactory(['findAvailableLanguages', 'languageExists']); + $factory->expects(self::any()) + ->method('languageExists')->willReturn(true); + $factory->expects(self::any()) + ->method('findAvailableLanguages') + ->willReturnCallback(function ($app) use ($availableLanguages) { + return $availableLanguages; + }); + + $this->config + ->method('getSystemValue') + ->willReturnMap([ + ['force_language', false, false], + ['default_language', false, $lang], + ['reduce_to_languages', [], $reducedLanguageSet] + ]); + + $result = $this->invokePrivate($factory, 'getLanguages'); + $commonLanguagesCodes = array_map(function ($lang) { + return $lang['code']; + }, $result['commonLanguages']); + + self::assertEqualsCanonicalizing($expected, $commonLanguagesCodes); + } + + public static function languageIteratorRequestProvider(): array { + return [ + [ true, true], + [ false, true], + [ false, false], + ]; + } + + #[\PHPUnit\Framework\Attributes\DataProvider('languageIteratorRequestProvider')] + public function testGetLanguageIterator(bool $hasSession, bool $mockUser): void { $factory = $this->getFactory(); + $user = null; - if ($iUserMock === null) { + if (!$mockUser) { $matcher = $this->userSession->expects(self::once()) ->method('getUser'); @@ -728,9 +757,27 @@ class FactoryTest extends TestCase { } else { $this->expectException(\RuntimeException::class); } + } else { + $user = $this->createMock(IUser::class); } - $iterator = $factory->getLanguageIterator($iUserMock); + $iterator = $factory->getLanguageIterator($user); self::assertInstanceOf(ILanguageIterator::class, $iterator); } + + public static function dataGetLanguageDirection(): array { + return [ + ['en', 'ltr'], + ['de', 'ltr'], + ['fa', 'rtl'], + ['ar', 'rtl'] + ]; + } + + #[\PHPUnit\Framework\Attributes\DataProvider('dataGetLanguageDirection')] + public function testGetLanguageDirection(string $language, string $expectedDirection) { + $factory = $this->getFactory(); + + self::assertEquals($expectedDirection, $factory->getLanguageDirection($language)); + } } diff --git a/tests/lib/L10N/L10nTest.php b/tests/lib/L10N/L10nTest.php index f410c523c05..842f1bc5eda 100644 --- a/tests/lib/L10N/L10nTest.php +++ b/tests/lib/L10N/L10nTest.php @@ -1,9 +1,9 @@ <?php + /** - * Copyright (c) 2016 Joas Schilling <nickvergessen@owncloud.com> - * This file is licensed under the Affero General Public License version 3 or - * later. - * See the COPYING-README file. + * SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-or-later */ namespace Test\L10N; @@ -11,9 +11,14 @@ namespace Test\L10N; use DateTime; use OC\L10N\Factory; use OC\L10N\L10N; +use OCP\App\IAppManager; +use OCP\ICacheFactory; use OCP\IConfig; use OCP\IRequest; use OCP\IUserSession; +use OCP\L10N\IFactory; +use OCP\Server; +use OCP\Util; use Test\TestCase; /** @@ -26,32 +31,34 @@ class L10nTest extends TestCase { * @return Factory */ protected function getFactory() { - /** @var \OCP\IConfig $config */ + /** @var IConfig $config */ $config = $this->createMock(IConfig::class); - /** @var \OCP\IRequest $request */ + /** @var IRequest $request */ $request = $this->createMock(IRequest::class); /** @var IUserSession $userSession */ $userSession = $this->createMock(IUserSession::class); - return new Factory($config, $request, $userSession, \OC::$SERVERROOT); + $cacheFactory = $this->createMock(ICacheFactory::class); + $appManager = $this->createMock(IAppManager::class); + return new Factory($config, $request, $userSession, $cacheFactory, \OC::$SERVERROOT, $appManager); } public function testSimpleTranslationWithTrailingColon(): void { - $transFile = \OC::$SERVERROOT.'/tests/data/l10n/de.json'; + $transFile = \OC::$SERVERROOT . '/tests/data/l10n/de.json'; $l = new L10N($this->getFactory(), 'test', 'de', 'de_AT', [$transFile]); $this->assertEquals('Files:', $l->t('Files:')); } - public function testGermanPluralTranslations() { - $transFile = \OC::$SERVERROOT.'/tests/data/l10n/de.json'; + public function testGermanPluralTranslations(): void { + $transFile = \OC::$SERVERROOT . '/tests/data/l10n/de.json'; $l = new L10N($this->getFactory(), 'test', 'de', 'de_AT', [$transFile]); - $this->assertEquals('1 Datei', (string) $l->n('%n file', '%n files', 1)); - $this->assertEquals('2 Dateien', (string) $l->n('%n file', '%n files', 2)); + $this->assertEquals('1 Datei', (string)$l->n('%n file', '%n files', 1)); + $this->assertEquals('2 Dateien', (string)$l->n('%n file', '%n files', 2)); } - public function testRussianPluralTranslations() { - $transFile = \OC::$SERVERROOT.'/tests/data/l10n/ru.json'; + public function testRussianPluralTranslations(): void { + $transFile = \OC::$SERVERROOT . '/tests/data/l10n/ru.json'; $l = new L10N($this->getFactory(), 'test', 'ru', 'ru_UA', [$transFile]); $this->assertEquals('1 файл', (string)$l->n('%n file', '%n files', 1)); @@ -74,8 +81,8 @@ class L10nTest extends TestCase { */ } - public function testCzechPluralTranslations() { - $transFile = \OC::$SERVERROOT.'/tests/data/l10n/cs.json'; + public function testCzechPluralTranslations(): void { + $transFile = \OC::$SERVERROOT . '/tests/data/l10n/cs.json'; $l = new L10N($this->getFactory(), 'test', 'cs', 'cs_CZ', [$transFile]); $this->assertEquals('1 okno', (string)$l->n('%n window', '%n windows', 1)); @@ -83,7 +90,16 @@ class L10nTest extends TestCase { $this->assertEquals('5 oken', (string)$l->n('%n window', '%n windows', 5)); } - public function dataPlaceholders(): array { + public function testGermanPluralWithCzechLocaleTranslations(): void { + $transFile = \OC::$SERVERROOT . '/tests/data/l10n/de.json'; + $l = new L10N($this->getFactory(), 'test', 'de', 'cs_CZ', [$transFile]); + + $this->assertEquals('1 Datei', (string)$l->n('%n file', '%n files', 1)); + $this->assertEquals('2 Dateien', (string)$l->n('%n file', '%n files', 2)); + $this->assertEquals('5 Dateien', (string)$l->n('%n file', '%n files', 5)); + } + + public static function dataPlaceholders(): array { return [ ['Ordered placeholders one %s two %s', 'Placeholder one 1 two 2'], ['Reordered placeholders one %s two %s', 'Placeholder two 2 one 1'], @@ -92,63 +108,61 @@ class L10nTest extends TestCase { } /** - * @dataProvider dataPlaceholders * * @param $string * @param $expected */ + #[\PHPUnit\Framework\Attributes\DataProvider('dataPlaceholders')] public function testPlaceholders($string, $expected): void { - $transFile = \OC::$SERVERROOT.'/tests/data/l10n/de.json'; + $transFile = \OC::$SERVERROOT . '/tests/data/l10n/de.json'; $l = new L10N($this->getFactory(), 'test', 'de', 'de_AT', [$transFile]); $this->assertEquals($expected, $l->t($string, ['1', '2'])); } - public function localizationData() { + public static function localizationData(): array { return [ // timestamp as string - ['February 13, 2009 at 11:31:30 PM GMT+0', 'en', 'en_US', 'datetime', '1234567890'], - ['13. Februar 2009 um 23:31:30 GMT+0', 'de', 'de_DE', 'datetime', '1234567890'], + ["February 13, 2009, 11:31:30\xE2\x80\xAFPM UTC", 'en', 'en_US', 'datetime', '1234567890'], + ['13. Februar 2009, 23:31:30 UTC', 'de', 'de_DE', 'datetime', '1234567890'], ['February 13, 2009', 'en', 'en_US', 'date', '1234567890'], ['13. Februar 2009', 'de', 'de_DE', 'date', '1234567890'], - ['11:31:30 PM GMT+0', 'en', 'en_US', 'time', '1234567890'], - ['23:31:30 GMT+0', 'de', 'de_DE', 'time', '1234567890'], + ["11:31:30\xE2\x80\xAFPM UTC", 'en', 'en_US', 'time', '1234567890'], + ['23:31:30 UTC', 'de', 'de_DE', 'time', '1234567890'], // timestamp as int - ['February 13, 2009 at 11:31:30 PM GMT+0', 'en', 'en_US', 'datetime', 1234567890], - ['13. Februar 2009 um 23:31:30 GMT+0', 'de', 'de_DE', 'datetime', 1234567890], + ["February 13, 2009, 11:31:30\xE2\x80\xAFPM UTC", 'en', 'en_US', 'datetime', 1234567890], + ['13. Februar 2009, 23:31:30 UTC', 'de', 'de_DE', 'datetime', 1234567890], ['February 13, 2009', 'en', 'en_US', 'date', 1234567890], ['13. Februar 2009', 'de', 'de_DE', 'date', 1234567890], - ['11:31:30 PM GMT+0', 'en', 'en_US', 'time', 1234567890], - ['23:31:30 GMT+0', 'de', 'de_DE', 'time', 1234567890], + ["11:31:30\xE2\x80\xAFPM UTC", 'en', 'en_US', 'time', 1234567890], + ['23:31:30 UTC', 'de', 'de_DE', 'time', 1234567890], // DateTime object - ['February 13, 2009 at 11:31:30 PM GMT+0', 'en', 'en_US', 'datetime', new DateTime('@1234567890')], - ['13. Februar 2009 um 23:31:30 GMT+0', 'de', 'de_DE', 'datetime', new DateTime('@1234567890')], + ["February 13, 2009, 11:31:30\xE2\x80\xAFPM GMT+0", 'en', 'en_US', 'datetime', new DateTime('@1234567890')], + ['13. Februar 2009, 23:31:30 GMT+0', 'de', 'de_DE', 'datetime', new DateTime('@1234567890')], ['February 13, 2009', 'en', 'en_US', 'date', new DateTime('@1234567890')], ['13. Februar 2009', 'de', 'de_DE', 'date', new DateTime('@1234567890')], - ['11:31:30 PM GMT+0', 'en', 'en_US', 'time', new DateTime('@1234567890')], + ["11:31:30\xE2\x80\xAFPM GMT+0", 'en', 'en_US', 'time', new DateTime('@1234567890')], ['23:31:30 GMT+0', 'de', 'de_DE', 'time', new DateTime('@1234567890')], // en_GB - ['13 February 2009 at 23:31:30 GMT+0', 'en_GB', 'en_GB', 'datetime', new DateTime('@1234567890')], + ['13 February 2009, 23:31:30 GMT+0', 'en_GB', 'en_GB', 'datetime', new DateTime('@1234567890')], ['13 February 2009', 'en_GB', 'en_GB', 'date', new DateTime('@1234567890')], ['23:31:30 GMT+0', 'en_GB', 'en_GB', 'time', new DateTime('@1234567890')], - ['13 February 2009 at 23:31:30 GMT+0', 'en-GB', 'en_GB', 'datetime', new DateTime('@1234567890')], + ['13 February 2009, 23:31:30 GMT+0', 'en-GB', 'en_GB', 'datetime', new DateTime('@1234567890')], ['13 February 2009', 'en-GB', 'en_GB', 'date', new DateTime('@1234567890')], ['23:31:30 GMT+0', 'en-GB', 'en_GB', 'time', new DateTime('@1234567890')], ]; } - /** - * @dataProvider localizationData - */ - public function testNumericStringLocalization($expectedDate, $lang, $locale, $type, $value) { + #[\PHPUnit\Framework\Attributes\DataProvider('localizationData')] + public function testNumericStringLocalization($expectedDate, $lang, $locale, $type, $value): void { $l = new L10N($this->getFactory(), 'test', $lang, $locale, []); $this->assertSame($expectedDate, $l->l($type, $value)); } - public function firstDayData() { + public static function firstDayData(): array { return [ [1, 'de', 'de_DE'], [0, 'en', 'en_US'], @@ -156,17 +170,17 @@ class L10nTest extends TestCase { } /** - * @dataProvider firstDayData * @param $expected * @param $lang * @param $locale */ - public function testFirstWeekDay($expected, $lang, $locale) { + #[\PHPUnit\Framework\Attributes\DataProvider('firstDayData')] + public function testFirstWeekDay($expected, $lang, $locale): void { $l = new L10N($this->getFactory(), 'test', $lang, $locale, []); $this->assertSame($expected, $l->l('firstday', 'firstday')); } - public function jsDateData() { + public static function jsDateData(): array { return [ ['dd.MM.yy', 'de', 'de_DE'], ['M/d/yy', 'en', 'en_US'], @@ -174,47 +188,44 @@ class L10nTest extends TestCase { } /** - * @dataProvider jsDateData * @param $expected * @param $lang * @param $locale */ - public function testJSDate($expected, $lang, $locale) { + #[\PHPUnit\Framework\Attributes\DataProvider('jsDateData')] + public function testJSDate($expected, $lang, $locale): void { $l = new L10N($this->getFactory(), 'test', $lang, $locale, []); $this->assertSame($expected, $l->l('jsdate', 'jsdate')); } - public function testFactoryGetLanguageCode() { + public function testFactoryGetLanguageCode(): void { $l = $this->getFactory()->get('lib', 'de'); $this->assertEquals('de', $l->getLanguageCode()); } - public function testServiceGetLanguageCode() { - $l = \OC::$server->getL10N('lib', 'de'); + public function testServiceGetLanguageCode(): void { + $l = Util::getL10N('lib', 'de'); $this->assertEquals('de', $l->getLanguageCode()); } - public function testWeekdayName() { - $l = \OC::$server->getL10N('lib', 'de'); + public function testWeekdayName(): void { + $l = Util::getL10N('lib', 'de'); $this->assertEquals('Mo.', $l->l('weekdayName', new \DateTime('2017-11-6'), ['width' => 'abbreviated'])); } /** - * @dataProvider findLanguageFromLocaleData * @param $locale * @param $language */ - public function testFindLanguageFromLocale($locale, $language) { + #[\PHPUnit\Framework\Attributes\DataProvider('findLanguageFromLocaleData')] + public function testFindLanguageFromLocale($locale, $language): void { $this->assertEquals( $language, - \OC::$server->getL10NFactory()->findLanguageFromLocale('lib', $locale) + Server::get(IFactory::class)->findLanguageFromLocale('lib', $locale) ); } - /** - * @return array - */ - public function findLanguageFromLocaleData(): array { + public static function findLanguageFromLocaleData(): array { return [ 'en_US' => ['en_US', 'en'], 'en_UK' => ['en_UK', 'en'], diff --git a/tests/lib/L10N/LanguageIteratorTest.php b/tests/lib/L10N/LanguageIteratorTest.php index bbbbb145c75..4d1c666cc42 100644 --- a/tests/lib/L10N/LanguageIteratorTest.php +++ b/tests/lib/L10N/LanguageIteratorTest.php @@ -1,24 +1,8 @@ <?php + /** - * @copyright Copyright (c) 2018 Arthur Schiwon <blizzz@arthur-schiwon.de> - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * - * @license GNU AGPL version 3 or any later version - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * + * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later */ namespace Test\L10N; @@ -45,7 +29,7 @@ class LanguageIteratorTest extends TestCase { $this->iterator = new LanguageIterator($this->user, $this->config); } - public function languageSettingsProvider() { + public static function languageSettingsProvider(): array { return [ // all language settings set [ 'de_DE', 'es_CU', 'zh_TW', ['de_DE', 'de', 'es_CU', 'es', 'zh_TW', 'zh', 'en']], @@ -74,14 +58,16 @@ class LanguageIteratorTest extends TestCase { ]; } - /** - * @dataProvider languageSettingsProvider - */ - public function testIterator($forcedLang, $userLang, $sysLang, $expectedValues) { + #[\PHPUnit\Framework\Attributes\DataProvider('languageSettingsProvider')] + public function testIterator($forcedLang, $userLang, $sysLang, $expectedValues): void { $this->config->expects($this->any()) ->method('getSystemValue') ->willReturnMap([ ['force_language', false, $forcedLang], + ]); + $this->config->expects($this->any()) + ->method('getSystemValueString') + ->willReturnMap([ ['default_language', 'en', $sysLang], ]); $this->config->expects($this->any()) |