| <?php |
| |
| /* |
| * This file is part of the Symfony package. |
| * |
| * (c) Fabien Potencier <fabien@symfony.com> |
| * |
| * 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\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\Contracts\HttpClient\HttpClientInterface; |
| |
| /** |
| * A test case to ease testing a translation provider factory. |
| * |
| * @author Mathieu Santostefano <msantostefano@protonmail.com> |
| * |
| * @internal |
| */ |
| abstract class ProviderFactoryTestCase extends TestCase |
| { |
| protected $client; |
| protected $logger; |
| protected $defaultLocale; |
| protected $loader; |
| protected $xliffFileDumper; |
| |
| abstract public function createFactory(): ProviderFactoryInterface; |
| |
| /** |
| * @return iterable<array{0: bool, 1: string}> |
| */ |
| abstract public function supportsProvider(): iterable; |
| |
| /** |
| * @return iterable<array{0: string, 1: string, 2: TransportInterface}> |
| */ |
| abstract public function createProvider(): iterable; |
| |
| /** |
| * @return iterable<array{0: string, 1: string|null}> |
| */ |
| public function unsupportedSchemeProvider(): iterable |
| { |
| return []; |
| } |
| |
| /** |
| * @return iterable<array{0: string, 1: string|null}> |
| */ |
| public function incompleteDsnProvider(): iterable |
| { |
| return []; |
| } |
| |
| /** |
| * @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 = null) |
| { |
| $factory = $this->createFactory(); |
| |
| $dsn = new Dsn($dsn); |
| |
| $this->expectException(UnsupportedSchemeException::class); |
| if (null !== $message) { |
| $this->expectExceptionMessage($message); |
| } |
| |
| $factory->create($dsn); |
| } |
| |
| /** |
| * @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 ?? $this->client = new MockHttpClient(); |
| } |
| |
| protected function getLogger(): LoggerInterface |
| { |
| return $this->logger ?? $this->logger = $this->createMock(LoggerInterface::class); |
| } |
| |
| protected function getDefaultLocale(): string |
| { |
| return $this->defaultLocale ?? $this->defaultLocale = 'en'; |
| } |
| |
| protected function getLoader(): LoaderInterface |
| { |
| return $this->loader ?? $this->loader = $this->createMock(LoaderInterface::class); |
| } |
| |
| protected function getXliffFileDumper(): XliffFileDumper |
| { |
| return $this->xliffFileDumper ?? $this->xliffFileDumper = $this->createMock(XliffFileDumper::class); |
| } |
| } |