From 4463d664e325bbdd6495fa3c4473afdc7c94ef3e Mon Sep 17 00:00:00 2001 From: Christian Flothmann Date: Wed, 18 Sep 2024 13:58:19 +0200 Subject: [PATCH] deprecate the ProviderFactoryTestCase --- UPGRADE-7.2.md | 5 ++ .../Tests/CrowdinProviderFactoryTest.php | 13 ++- .../Translation/Bridge/Crowdin/composer.json | 2 +- .../Loco/Tests/LocoProviderFactoryTest.php | 13 ++- ...roviderFactoryWithoutTranslatorBagTest.php | 5 +- .../Translation/Bridge/Loco/composer.json | 2 +- .../Tests/LokaliseProviderFactoryTest.php | 13 ++- .../Translation/Bridge/Lokalise/composer.json | 2 +- .../Tests/PhraseProviderFactoryTest.php | 60 ++------------ .../Translation/Bridge/Phrase/composer.json | 2 +- .../Component/Translation/CHANGELOG.md | 5 ++ .../Test/AbstractProviderFactoryTestCase.php | 79 ++++++++++++++++++ .../Test/IncompleteDsnTestTrait.php | 42 ++++++++++ .../Test/ProviderFactoryTestCase.php | 83 ++----------------- 14 files changed, 179 insertions(+), 147 deletions(-) create mode 100644 src/Symfony/Component/Translation/Test/AbstractProviderFactoryTestCase.php create mode 100644 src/Symfony/Component/Translation/Test/IncompleteDsnTestTrait.php diff --git a/UPGRADE-7.2.md b/UPGRADE-7.2.md index 7c0c8064f4381..b7baa5e0d76a4 100644 --- a/UPGRADE-7.2.md +++ b/UPGRADE-7.2.md @@ -77,6 +77,11 @@ String Translation ----------- + * Deprecate `ProviderFactoryTestCase`, extend `AbstractTransportFactoryTestCase` instead + + The `testIncompleteDsnException()` test is no longer provided by default. If you make use of it by implementing the `incompleteDsnProvider()` data providers, + you now need to use the `IncompleteDsnTestTrait`. + * Deprecate passing an escape character to `CsvFileLoader::setCsvControl()` TwigBridge diff --git a/src/Symfony/Component/Translation/Bridge/Crowdin/Tests/CrowdinProviderFactoryTest.php b/src/Symfony/Component/Translation/Bridge/Crowdin/Tests/CrowdinProviderFactoryTest.php index f6013bd226c1f..c8d53d3b1e70b 100644 --- a/src/Symfony/Component/Translation/Bridge/Crowdin/Tests/CrowdinProviderFactoryTest.php +++ b/src/Symfony/Component/Translation/Bridge/Crowdin/Tests/CrowdinProviderFactoryTest.php @@ -11,12 +11,19 @@ namespace Symfony\Component\Translation\Bridge\Crowdin\Tests; +use Psr\Log\NullLogger; +use Symfony\Component\HttpClient\MockHttpClient; use Symfony\Component\Translation\Bridge\Crowdin\CrowdinProviderFactory; +use Symfony\Component\Translation\Dumper\XliffFileDumper; +use Symfony\Component\Translation\Loader\LoaderInterface; use Symfony\Component\Translation\Provider\ProviderFactoryInterface; -use Symfony\Component\Translation\Test\ProviderFactoryTestCase; +use Symfony\Component\Translation\Test\AbstractProviderFactoryTestCase; +use Symfony\Component\Translation\Test\IncompleteDsnTestTrait; -class CrowdinProviderFactoryTest extends ProviderFactoryTestCase +class CrowdinProviderFactoryTest extends AbstractProviderFactoryTestCase { + use IncompleteDsnTestTrait; + public static function supportsProvider(): iterable { yield [true, 'crowdin://PROJECT_ID:API_TOKEN@default']; @@ -48,6 +55,6 @@ public static function incompleteDsnProvider(): iterable public function createFactory(): ProviderFactoryInterface { - return new CrowdinProviderFactory($this->getClient(), $this->getLogger(), $this->getDefaultLocale(), $this->getLoader(), $this->getXliffFileDumper()); + return new CrowdinProviderFactory(new MockHttpClient(), new NullLogger(), 'en', $this->createMock(LoaderInterface::class), $this->createMock(XliffFileDumper::class)); } } diff --git a/src/Symfony/Component/Translation/Bridge/Crowdin/composer.json b/src/Symfony/Component/Translation/Bridge/Crowdin/composer.json index 8ea423bd246ef..d2f60819d6b9b 100644 --- a/src/Symfony/Component/Translation/Bridge/Crowdin/composer.json +++ b/src/Symfony/Component/Translation/Bridge/Crowdin/composer.json @@ -23,7 +23,7 @@ "php": ">=8.2", "symfony/config": "^6.4|^7.0", "symfony/http-client": "^6.4|^7.0", - "symfony/translation": "^6.4|^7.0" + "symfony/translation": "^7.2" }, "autoload": { "psr-4": { "Symfony\\Component\\Translation\\Bridge\\Crowdin\\": "" }, diff --git a/src/Symfony/Component/Translation/Bridge/Loco/Tests/LocoProviderFactoryTest.php b/src/Symfony/Component/Translation/Bridge/Loco/Tests/LocoProviderFactoryTest.php index e0ba1c414ae39..36f8c16660ea6 100644 --- a/src/Symfony/Component/Translation/Bridge/Loco/Tests/LocoProviderFactoryTest.php +++ b/src/Symfony/Component/Translation/Bridge/Loco/Tests/LocoProviderFactoryTest.php @@ -11,12 +11,19 @@ namespace Symfony\Component\Translation\Bridge\Loco\Tests; +use Psr\Log\NullLogger; +use Symfony\Component\HttpClient\MockHttpClient; use Symfony\Component\Translation\Bridge\Loco\LocoProviderFactory; +use Symfony\Component\Translation\Loader\LoaderInterface; use Symfony\Component\Translation\Provider\ProviderFactoryInterface; -use Symfony\Component\Translation\Test\ProviderFactoryTestCase; +use Symfony\Component\Translation\Test\AbstractProviderFactoryTestCase; +use Symfony\Component\Translation\Test\IncompleteDsnTestTrait; +use Symfony\Component\Translation\TranslatorBagInterface; -class LocoProviderFactoryTest extends ProviderFactoryTestCase +class LocoProviderFactoryTest extends AbstractProviderFactoryTestCase { + use IncompleteDsnTestTrait; + public static function supportsProvider(): iterable { yield [true, 'loco://API_KEY@default']; @@ -48,6 +55,6 @@ public static function incompleteDsnProvider(): iterable public function createFactory(): ProviderFactoryInterface { - return new LocoProviderFactory($this->getClient(), $this->getLogger(), $this->getDefaultLocale(), $this->getLoader(), $this->getTranslatorBag()); + return new LocoProviderFactory(new MockHttpClient(), new NullLogger(), 'en', $this->createMock(LoaderInterface::class), $this->createMock(TranslatorBagInterface::class)); } } diff --git a/src/Symfony/Component/Translation/Bridge/Loco/Tests/LocoProviderFactoryWithoutTranslatorBagTest.php b/src/Symfony/Component/Translation/Bridge/Loco/Tests/LocoProviderFactoryWithoutTranslatorBagTest.php index a82efa4fd8bbd..17edc30bccbfa 100644 --- a/src/Symfony/Component/Translation/Bridge/Loco/Tests/LocoProviderFactoryWithoutTranslatorBagTest.php +++ b/src/Symfony/Component/Translation/Bridge/Loco/Tests/LocoProviderFactoryWithoutTranslatorBagTest.php @@ -11,13 +11,16 @@ namespace Symfony\Component\Translation\Bridge\Loco\Tests; +use Psr\Log\NullLogger; +use Symfony\Component\HttpClient\MockHttpClient; use Symfony\Component\Translation\Bridge\Loco\LocoProviderFactory; +use Symfony\Component\Translation\Loader\LoaderInterface; use Symfony\Component\Translation\Provider\ProviderFactoryInterface; class LocoProviderFactoryWithoutTranslatorBagTest extends LocoProviderFactoryTest { public function createFactory(): ProviderFactoryInterface { - return new LocoProviderFactory($this->getClient(), $this->getLogger(), $this->getDefaultLocale(), $this->getLoader(), null); + return new LocoProviderFactory(new MockHttpClient(), new NullLogger(), 'en', $this->createMock(LoaderInterface::class), null); } } diff --git a/src/Symfony/Component/Translation/Bridge/Loco/composer.json b/src/Symfony/Component/Translation/Bridge/Loco/composer.json index cf10eb5bb2a56..40eb6f753d363 100644 --- a/src/Symfony/Component/Translation/Bridge/Loco/composer.json +++ b/src/Symfony/Component/Translation/Bridge/Loco/composer.json @@ -19,7 +19,7 @@ "php": ">=8.2", "symfony/http-client": "^6.4|^7.0", "symfony/config": "^6.4|^7.0", - "symfony/translation": "^6.4|^7.0" + "symfony/translation": "^7.2" }, "autoload": { "psr-4": { "Symfony\\Component\\Translation\\Bridge\\Loco\\": "" }, diff --git a/src/Symfony/Component/Translation/Bridge/Lokalise/Tests/LokaliseProviderFactoryTest.php b/src/Symfony/Component/Translation/Bridge/Lokalise/Tests/LokaliseProviderFactoryTest.php index 42cca6575ac2f..6c3cd7e5e990e 100644 --- a/src/Symfony/Component/Translation/Bridge/Lokalise/Tests/LokaliseProviderFactoryTest.php +++ b/src/Symfony/Component/Translation/Bridge/Lokalise/Tests/LokaliseProviderFactoryTest.php @@ -11,15 +11,20 @@ namespace Symfony\Component\Translation\Bridge\Lokalise\Tests; +use Psr\Log\NullLogger; use Symfony\Component\HttpClient\MockHttpClient; use Symfony\Component\HttpClient\Response\JsonMockResponse; use Symfony\Component\Translation\Bridge\Lokalise\LokaliseProviderFactory; +use Symfony\Component\Translation\Loader\LoaderInterface; use Symfony\Component\Translation\Provider\Dsn; use Symfony\Component\Translation\Provider\ProviderFactoryInterface; -use Symfony\Component\Translation\Test\ProviderFactoryTestCase; +use Symfony\Component\Translation\Test\AbstractProviderFactoryTestCase; +use Symfony\Component\Translation\Test\IncompleteDsnTestTrait; -class LokaliseProviderFactoryTest extends ProviderFactoryTestCase +class LokaliseProviderFactoryTest extends AbstractProviderFactoryTestCase { + use IncompleteDsnTestTrait; + public static function supportsProvider(): iterable { yield [true, 'lokalise://PROJECT_ID:API_KEY@default']; @@ -48,7 +53,7 @@ public function testBaseUri() { $response = new JsonMockResponse(['files' => []]); $httpClient = new MockHttpClient([$response]); - $factory = new LokaliseProviderFactory($httpClient, $this->getLogger(), $this->getDefaultLocale(), $this->getLoader()); + $factory = new LokaliseProviderFactory($httpClient, new NullLogger(), 'en', $this->createMock(LoaderInterface::class)); $provider = $factory->create(new Dsn('lokalise://PROJECT_ID:API_KEY@default')); // Make a real HTTP request. @@ -59,6 +64,6 @@ public function testBaseUri() public function createFactory(): ProviderFactoryInterface { - return new LokaliseProviderFactory($this->getClient(), $this->getLogger(), $this->getDefaultLocale(), $this->getLoader()); + return new LokaliseProviderFactory(new MockHttpClient(), new NullLogger(), 'en', $this->createMock(LoaderInterface::class)); } } diff --git a/src/Symfony/Component/Translation/Bridge/Lokalise/composer.json b/src/Symfony/Component/Translation/Bridge/Lokalise/composer.json index a6c3b499c1cc6..78be5ea3c89cc 100644 --- a/src/Symfony/Component/Translation/Bridge/Lokalise/composer.json +++ b/src/Symfony/Component/Translation/Bridge/Lokalise/composer.json @@ -19,7 +19,7 @@ "php": ">=8.2", "symfony/config": "^6.4|^7.0", "symfony/http-client": "^6.4|^7.0", - "symfony/translation": "^6.4|^7.0" + "symfony/translation": "^7.2" }, "autoload": { "psr-4": { "Symfony\\Component\\Translation\\Bridge\\Lokalise\\": "" }, diff --git a/src/Symfony/Component/Translation/Bridge/Phrase/Tests/PhraseProviderFactoryTest.php b/src/Symfony/Component/Translation/Bridge/Phrase/Tests/PhraseProviderFactoryTest.php index 6521656af7d6e..3e0b4ffd18df3 100644 --- a/src/Symfony/Component/Translation/Bridge/Phrase/Tests/PhraseProviderFactoryTest.php +++ b/src/Symfony/Component/Translation/Bridge/Phrase/Tests/PhraseProviderFactoryTest.php @@ -12,23 +12,24 @@ namespace Symfony\Component\Translation\Bridge\Phrase\Tests; use PHPUnit\Framework\MockObject\MockObject; -use PHPUnit\Framework\TestCase; use Psr\Cache\CacheItemPoolInterface; use Psr\Log\LoggerInterface; use Symfony\Component\HttpClient\MockHttpClient; use Symfony\Component\Translation\Bridge\Phrase\PhraseProviderFactory; use Symfony\Component\Translation\Dumper\XliffFileDumper; -use Symfony\Component\Translation\Exception\IncompleteDsnException; use Symfony\Component\Translation\Exception\MissingRequiredOptionException; -use Symfony\Component\Translation\Exception\UnsupportedSchemeException; use Symfony\Component\Translation\Loader\LoaderInterface; use Symfony\Component\Translation\Provider\Dsn; +use Symfony\Component\Translation\Test\AbstractProviderFactoryTestCase; +use Symfony\Component\Translation\Test\IncompleteDsnTestTrait; /** * @author wicliff */ -class PhraseProviderFactoryTest extends TestCase +class PhraseProviderFactoryTest extends AbstractProviderFactoryTestCase { + use IncompleteDsnTestTrait; + private MockObject&MockHttpClient $httpClient; private MockObject&LoggerInterface $logger; private MockObject&LoaderInterface $loader; @@ -36,55 +37,6 @@ class PhraseProviderFactoryTest extends TestCase private MockObject&CacheItemPoolInterface $cache; private string $defaultLocale; - /** - * @dataProvider supportsProvider - */ - public function testSupports(bool $expected, string $dsn) - { - $factory = $this->createFactory(); - - $this->assertSame($expected, $factory->supports(new Dsn($dsn))); - } - - /** - * @dataProvider createProvider - */ - public function testCreate(string $expected, string $dsn) - { - $factory = $this->createFactory(); - $provider = $factory->create(new Dsn($dsn)); - - $this->assertSame($expected, (string) $provider); - } - - /** - * @dataProvider unsupportedSchemeProvider - */ - public function testUnsupportedSchemeException(string $dsn, string $message) - { - $factory = $this->createFactory(); - $dsn = new Dsn($dsn); - - $this->expectException(UnsupportedSchemeException::class); - $this->expectExceptionMessage($message); - - $factory->create($dsn); - } - - /** - * @dataProvider incompleteDsnProvider - */ - public function testIncompleteDsnException(string $dsn, string $message) - { - $factory = $this->createFactory(); - $dsn = new Dsn($dsn); - - $this->expectException(IncompleteDsnException::class); - $this->expectExceptionMessage($message); - - $factory->create($dsn); - } - public function testRequiredUserAgentOption() { $factory = $this->createFactory(); @@ -144,7 +96,7 @@ public static function supportsProvider(): \Generator yield 'not supported' => [false, 'unsupported://PROJECT_ID:API_TOKEN@default?userAgent=myProject']; } - private function createFactory(): PhraseProviderFactory + public function createFactory(): PhraseProviderFactory { return new PhraseProviderFactory( $this->getHttpClient(), diff --git a/src/Symfony/Component/Translation/Bridge/Phrase/composer.json b/src/Symfony/Component/Translation/Bridge/Phrase/composer.json index 204f7122777a1..2d3105037f7c6 100644 --- a/src/Symfony/Component/Translation/Bridge/Phrase/composer.json +++ b/src/Symfony/Component/Translation/Bridge/Phrase/composer.json @@ -20,7 +20,7 @@ "psr/cache": "^3.0", "symfony/http-client": "^6.4|^7.0", "symfony/mime": "^6.4|^7.0", - "symfony/translation": "^6.4|^7.0" + "symfony/translation": "^7.2" }, "autoload": { "psr-4": { "Symfony\\Component\\Translation\\Bridge\\Phrase\\": "" }, diff --git a/src/Symfony/Component/Translation/CHANGELOG.md b/src/Symfony/Component/Translation/CHANGELOG.md index 0d9382a216ff5..9a8bba0852631 100644 --- a/src/Symfony/Component/Translation/CHANGELOG.md +++ b/src/Symfony/Component/Translation/CHANGELOG.md @@ -4,6 +4,11 @@ CHANGELOG 7.2 --- + * Deprecate `ProviderFactoryTestCase`, extend `AbstractTransportFactoryTestCase` instead + + The `testIncompleteDsnException()` test is no longer provided by default. If you make use of it by implementing the `incompleteDsnProvider()` data providers, + you now need to use the `IncompleteDsnTestTrait`. + * Make `ProviderFactoryTestCase` and `ProviderTestCase` compatible with PHPUnit 10+ * Add `lint:translations` command * Deprecate passing an escape character to `CsvFileLoader::setCsvControl()` diff --git a/src/Symfony/Component/Translation/Test/AbstractProviderFactoryTestCase.php b/src/Symfony/Component/Translation/Test/AbstractProviderFactoryTestCase.php new file mode 100644 index 0000000000000..75e7dd2d3dc22 --- /dev/null +++ b/src/Symfony/Component/Translation/Test/AbstractProviderFactoryTestCase.php @@ -0,0 +1,79 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Translation\Test; + +use PHPUnit\Framework\Attributes\DataProvider; +use PHPUnit\Framework\TestCase; +use Symfony\Component\Translation\Exception\UnsupportedSchemeException; +use Symfony\Component\Translation\Provider\Dsn; +use Symfony\Component\Translation\Provider\ProviderFactoryInterface; + +abstract class AbstractProviderFactoryTestCase extends TestCase +{ + abstract public function createFactory(): ProviderFactoryInterface; + + /** + * @return iterable + */ + abstract public static function supportsProvider(): iterable; + + /** + * @return iterable + */ + abstract public static function createProvider(): iterable; + + /** + * @return iterable + */ + abstract public static function unsupportedSchemeProvider(): iterable; + + /** + * @dataProvider supportsProvider + */ + #[DataProvider('supportsProvider')] + public function testSupports(bool $expected, string $dsn) + { + $factory = $this->createFactory(); + + $this->assertSame($expected, $factory->supports(new Dsn($dsn))); + } + + /** + * @dataProvider createProvider + */ + #[DataProvider('createProvider')] + public function testCreate(string $expected, string $dsn) + { + $factory = $this->createFactory(); + $provider = $factory->create(new Dsn($dsn)); + + $this->assertSame($expected, (string) $provider); + } + + /** + * @dataProvider unsupportedSchemeProvider + */ + #[DataProvider('unsupportedSchemeProvider')] + public function testUnsupportedSchemeException(string $dsn, ?string $message = null) + { + $factory = $this->createFactory(); + + $dsn = new Dsn($dsn); + + $this->expectException(UnsupportedSchemeException::class); + if (null !== $message) { + $this->expectExceptionMessage($message); + } + + $factory->create($dsn); + } +} diff --git a/src/Symfony/Component/Translation/Test/IncompleteDsnTestTrait.php b/src/Symfony/Component/Translation/Test/IncompleteDsnTestTrait.php new file mode 100644 index 0000000000000..892f6bf72899b --- /dev/null +++ b/src/Symfony/Component/Translation/Test/IncompleteDsnTestTrait.php @@ -0,0 +1,42 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Translation\Test; + +use PHPUnit\Framework\Attributes\DataProvider; +use Symfony\Component\Translation\Exception\IncompleteDsnException; +use Symfony\Component\Translation\Provider\Dsn; + +trait IncompleteDsnTestTrait +{ + /** + * @return iterable + */ + abstract public static function incompleteDsnProvider(): iterable; + + /** + * @dataProvider incompleteDsnProvider + */ + #[DataProvider('incompleteDsnProvider')] + public function testIncompleteDsnException(string $dsn, ?string $message = null) + { + $factory = $this->createFactory(); + + $dsn = new Dsn($dsn); + + $this->expectException(IncompleteDsnException::class); + if (null !== $message) { + $this->expectExceptionMessage($message); + } + + $factory->create($dsn); + } +} diff --git a/src/Symfony/Component/Translation/Test/ProviderFactoryTestCase.php b/src/Symfony/Component/Translation/Test/ProviderFactoryTestCase.php index 8117f680601bc..e82f32907e84d 100644 --- a/src/Symfony/Component/Translation/Test/ProviderFactoryTestCase.php +++ b/src/Symfony/Component/Translation/Test/ProviderFactoryTestCase.php @@ -11,17 +11,11 @@ namespace Symfony\Component\Translation\Test; -use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\MockObject\MockObject; -use PHPUnit\Framework\TestCase; use Psr\Log\LoggerInterface; use Symfony\Component\HttpClient\MockHttpClient; use Symfony\Component\Translation\Dumper\XliffFileDumper; -use Symfony\Component\Translation\Exception\IncompleteDsnException; -use Symfony\Component\Translation\Exception\UnsupportedSchemeException; use Symfony\Component\Translation\Loader\LoaderInterface; -use Symfony\Component\Translation\Provider\Dsn; -use Symfony\Component\Translation\Provider\ProviderFactoryInterface; use Symfony\Component\Translation\TranslatorBagInterface; use Symfony\Contracts\HttpClient\HttpClientInterface; @@ -29,9 +23,13 @@ * A test case to ease testing a translation provider factory. * * @author Mathieu Santostefano + * + * @deprecated since Symfony 7.2, use AbstractProviderFactoryTestCase instead */ -abstract class ProviderFactoryTestCase extends TestCase +abstract class ProviderFactoryTestCase extends AbstractProviderFactoryTestCase { + use IncompleteDsnTestTrait; + protected HttpClientInterface $client; protected LoggerInterface|MockObject $logger; protected string $defaultLocale; @@ -39,18 +37,6 @@ abstract class ProviderFactoryTestCase extends TestCase protected XliffFileDumper|MockObject $xliffFileDumper; protected TranslatorBagInterface|MockObject $translatorBag; - abstract public function createFactory(): ProviderFactoryInterface; - - /** - * @return iterable - */ - abstract public static function supportsProvider(): iterable; - - /** - * @return iterable - */ - abstract public static function createProvider(): iterable; - /** * @return iterable */ @@ -67,65 +53,6 @@ public static function incompleteDsnProvider(): iterable return []; } - /** - * @dataProvider supportsProvider - */ - #[DataProvider('supportsProvider')] - public function testSupports(bool $expected, string $dsn) - { - $factory = $this->createFactory(); - - $this->assertSame($expected, $factory->supports(new Dsn($dsn))); - } - - /** - * @dataProvider createProvider - */ - #[DataProvider('createProvider')] - public function testCreate(string $expected, string $dsn) - { - $factory = $this->createFactory(); - $provider = $factory->create(new Dsn($dsn)); - - $this->assertSame($expected, (string) $provider); - } - - /** - * @dataProvider unsupportedSchemeProvider - */ - #[DataProvider('unsupportedSchemeProvider')] - public function testUnsupportedSchemeException(string $dsn, ?string $message = null) - { - $factory = $this->createFactory(); - - $dsn = new Dsn($dsn); - - $this->expectException(UnsupportedSchemeException::class); - if (null !== $message) { - $this->expectExceptionMessage($message); - } - - $factory->create($dsn); - } - - /** - * @dataProvider incompleteDsnProvider - */ - #[DataProvider('incompleteDsnProvider')] - public function testIncompleteDsnException(string $dsn, ?string $message = null) - { - $factory = $this->createFactory(); - - $dsn = new Dsn($dsn); - - $this->expectException(IncompleteDsnException::class); - if (null !== $message) { - $this->expectExceptionMessage($message); - } - - $factory->create($dsn); - } - protected function getClient(): HttpClientInterface { return $this->client ??= new MockHttpClient();