diff --git a/tests/Functional/BlobTest.php b/tests/Functional/BlobTest.php index a6ddb467857..63e33f019be 100644 --- a/tests/Functional/BlobTest.php +++ b/tests/Functional/BlobTest.php @@ -2,11 +2,10 @@ namespace Doctrine\DBAL\Tests\Functional; -use Doctrine\DBAL\Driver\OCI8\Driver as OCI8Driver; -use Doctrine\DBAL\Driver\PDO; use Doctrine\DBAL\ParameterType; use Doctrine\DBAL\Schema\Table; use Doctrine\DBAL\Tests\FunctionalTestCase; +use Doctrine\DBAL\Tests\TestUtil; use Doctrine\DBAL\Types\Type; use function fopen; @@ -17,7 +16,7 @@ class BlobTest extends FunctionalTestCase { protected function setUp(): void { - if ($this->connection->getDriver() instanceof PDO\OCI\Driver) { + if (TestUtil::isDriverOneOf('pdo_oci')) { // inserting BLOBs as streams on Oracle requires Oracle-specific SQL syntax which is currently not supported // see http://php.net/manual/en/pdo.lobs.php#example-1035 self::markTestSkipped('DBAL doesn\'t support storing LOBs represented as streams using PDO_OCI'); @@ -50,7 +49,7 @@ public function testInsert(): void public function testInsertProcessesStream(): void { // https://github.com/doctrine/dbal/issues/3290 - if ($this->connection->getDriver() instanceof OCI8Driver) { + if (TestUtil::isDriverOneOf('oci8')) { self::markTestIncomplete('The oci8 driver does not support stream resources as parameters'); } @@ -106,7 +105,7 @@ public function testUpdate(): void public function testUpdateProcessesStream(): void { // https://github.com/doctrine/dbal/issues/3290 - if ($this->connection->getDriver() instanceof OCI8Driver) { + if (TestUtil::isDriverOneOf('oci8')) { self::markTestIncomplete('The oci8 driver does not support stream resources as parameters'); } @@ -133,7 +132,7 @@ public function testUpdateProcessesStream(): void public function testBindParamProcessesStream(): void { - if ($this->connection->getDriver() instanceof OCI8Driver) { + if (TestUtil::isDriverOneOf('oci8')) { self::markTestIncomplete('The oci8 driver does not support stream resources as parameters'); } diff --git a/tests/Functional/ConnectionTest.php b/tests/Functional/ConnectionTest.php index 864d0fccc53..da129919c2e 100644 --- a/tests/Functional/ConnectionTest.php +++ b/tests/Functional/ConnectionTest.php @@ -4,11 +4,10 @@ use Doctrine\DBAL\Connection; use Doctrine\DBAL\ConnectionException; -use Doctrine\DBAL\Driver\AbstractSQLServerDriver; use Doctrine\DBAL\Driver\Connection as DriverConnection; -use Doctrine\DBAL\Driver\IBMDB2; use Doctrine\DBAL\Driver\PDO\Connection as PDOConnection; use Doctrine\DBAL\DriverManager; +use Doctrine\DBAL\Exception\DriverException; use Doctrine\DBAL\Exception\UniqueConstraintViolationException; use Doctrine\DBAL\ParameterType; use Doctrine\DBAL\Platforms\AbstractPlatform; @@ -69,7 +68,7 @@ public function testTransactionNestingBehavior(): void $this->connection->insert(self::TABLE, ['id' => 1]); self::fail('Expected exception to be thrown because of the unique constraint.'); } catch (Throwable $e) { - $this->assertIsUniqueConstraintException($e); + self::assertInstanceOf(UniqueConstraintViolationException::class, $e); $this->connection->rollBack(); self::assertSame(1, $this->connection->getTransactionNestingLevel()); } @@ -144,7 +143,7 @@ public function testTransactionNestingBehaviorWithSavepoints(): void $this->connection->insert(self::TABLE, ['id' => 1]); self::fail('Expected exception to be thrown because of the unique constraint.'); } catch (Throwable $e) { - $this->assertIsUniqueConstraintException($e); + self::assertInstanceOf(UniqueConstraintViolationException::class, $e); $this->connection->rollBack(); self::assertSame(1, $this->connection->getTransactionNestingLevel()); } @@ -241,7 +240,7 @@ public function testTransactionBehaviorWithRollback(): void $this->connection->insert(self::TABLE, ['id' => 1]); self::fail('Expected exception to be thrown because of the unique constraint.'); } catch (Throwable $e) { - $this->assertIsUniqueConstraintException($e); + self::assertInstanceOf(UniqueConstraintViolationException::class, $e); self::assertSame(1, $this->connection->getTransactionNestingLevel()); $this->connection->rollBack(); self::assertSame(0, $this->connection->getTransactionNestingLevel()); @@ -269,7 +268,7 @@ public function testTransactionalWithException(): void }); self::fail('Expected exception to be thrown because of the unique constraint.'); } catch (Throwable $e) { - $this->assertIsUniqueConstraintException($e); + self::assertInstanceOf(UniqueConstraintViolationException::class, $e); self::assertSame(0, $this->connection->getTransactionNestingLevel()); } } @@ -393,31 +392,39 @@ public function testPersistentConnection(): void self::assertTrue($pdo->getAttribute(PDO::ATTR_PERSISTENT)); } - private function createTestTable(): void + public function testExceptionOnExecuteStatement(): void { - $table = new Table(self::TABLE); - $table->addColumn('id', 'integer'); - $table->setPrimaryKey(['id']); + $this->expectException(DriverException::class); - $this->dropAndCreateTable($table); + $this->connection->executeStatement('foo'); + } - $this->connection->insert(self::TABLE, ['id' => 1]); + public function testExceptionOnExecuteQuery(): void + { + $this->expectException(DriverException::class); + + $this->connection->executeQuery('foo'); } - private function assertIsUniqueConstraintException(Throwable $exception): void + /** + * Some drivers do not check the query server-side even though emulated prepared statements are disabled, + * so an exception is thrown only eventually. + */ + public function testExceptionOnPrepareAndExecute(): void { - if ($this->connection->getDriver() instanceof IBMDB2\Driver) { - // The IBM DB2 driver currently doesn't instantiate specialized exceptions + $this->expectException(DriverException::class); - return; - } + $this->connection->prepare('foo')->executeStatement(); + } - if ($this->connection->getDriver() instanceof AbstractSQLServerDriver) { - // The SQL Server drivers currently don't instantiate specialized exceptions + private function createTestTable(): void + { + $table = new Table(self::TABLE); + $table->addColumn('id', 'integer'); + $table->setPrimaryKey(['id']); - return; - } + $this->dropAndCreateTable($table); - self::assertInstanceOf(UniqueConstraintViolationException::class, $exception); + $this->connection->insert(self::TABLE, ['id' => 1]); } } diff --git a/tests/Functional/Driver/IBMDB2/ConnectionTest.php b/tests/Functional/Driver/IBMDB2/ConnectionTest.php index bd63c410cd4..656032f2a33 100644 --- a/tests/Functional/Driver/IBMDB2/ConnectionTest.php +++ b/tests/Functional/Driver/IBMDB2/ConnectionTest.php @@ -3,10 +3,10 @@ namespace Doctrine\DBAL\Tests\Functional\Driver\IBMDB2; use Doctrine\DBAL\Driver\IBMDB2\Connection; -use Doctrine\DBAL\Driver\IBMDB2\Driver; use Doctrine\DBAL\Driver\IBMDB2\Exception\ConnectionFailed; use Doctrine\DBAL\Driver\IBMDB2\Exception\PrepareFailed; use Doctrine\DBAL\Tests\FunctionalTestCase; +use Doctrine\DBAL\Tests\TestUtil; use ReflectionProperty; use function db2_close; @@ -18,11 +18,11 @@ class ConnectionTest extends FunctionalTestCase { protected function setUp(): void { - if ($this->connection->getDriver() instanceof Driver) { + if (TestUtil::isDriverOneOf('ibm_db2')) { return; } - $this->markTestSkipped('ibm_db2 only test.'); + self::markTestSkipped('This test requires the ibm_db2 driver.'); } protected function tearDown(): void diff --git a/tests/Functional/Driver/IBMDB2/DriverTest.php b/tests/Functional/Driver/IBMDB2/DriverTest.php index 2a21d9c6a6c..ae97171491a 100644 --- a/tests/Functional/Driver/IBMDB2/DriverTest.php +++ b/tests/Functional/Driver/IBMDB2/DriverTest.php @@ -5,6 +5,7 @@ use Doctrine\DBAL\Driver as DriverInterface; use Doctrine\DBAL\Driver\IBMDB2\Driver; use Doctrine\DBAL\Tests\Functional\Driver\AbstractDriverTest; +use Doctrine\DBAL\Tests\TestUtil; /** * @requires extension ibm_db2 @@ -15,11 +16,11 @@ protected function setUp(): void { parent::setUp(); - if ($this->connection->getDriver() instanceof Driver) { + if (TestUtil::isDriverOneOf('ibm_db2')) { return; } - self::markTestSkipped('ibm_db2 only test.'); + self::markTestSkipped('This test requires the ibm_db2 driver.'); } public function testConnectsWithoutDatabaseNameParameter(): void diff --git a/tests/Functional/Driver/IBMDB2/StatementTest.php b/tests/Functional/Driver/IBMDB2/StatementTest.php index 39592169ea6..6b00d72b7cb 100644 --- a/tests/Functional/Driver/IBMDB2/StatementTest.php +++ b/tests/Functional/Driver/IBMDB2/StatementTest.php @@ -4,9 +4,9 @@ namespace Doctrine\DBAL\Tests\Functional\Driver\IBMDB2; -use Doctrine\DBAL\Driver\IBMDB2\Driver; use Doctrine\DBAL\Driver\IBMDB2\Exception\StatementError; use Doctrine\DBAL\Tests\FunctionalTestCase; +use Doctrine\DBAL\Tests\TestUtil; use const E_ALL; use const E_NOTICE; @@ -19,11 +19,11 @@ class StatementTest extends FunctionalTestCase { protected function setUp(): void { - if ($this->connection->getDriver() instanceof Driver) { + if (TestUtil::isDriverOneOf('ibm_db2')) { return; } - self::markTestSkipped('ibm_db2 only test.'); + self::markTestSkipped('This test requires the ibm_db2 driver.'); } public function testExecutionErrorsAreNotSuppressed(): void diff --git a/tests/Functional/Driver/Mysqli/ConnectionTest.php b/tests/Functional/Driver/Mysqli/ConnectionTest.php index 83dbaffdc1f..9c434d94fda 100644 --- a/tests/Functional/Driver/Mysqli/ConnectionTest.php +++ b/tests/Functional/Driver/Mysqli/ConnectionTest.php @@ -19,11 +19,11 @@ class ConnectionTest extends FunctionalTestCase { protected function setUp(): void { - if ($this->connection->getDriver() instanceof Driver) { + if (TestUtil::isDriverOneOf('mysqli')) { return; } - self::markTestSkipped('MySQLi only test.'); + self::markTestSkipped('This test requires the mysqli driver.'); } public function testSupportedDriverOptions(): void diff --git a/tests/Functional/Driver/Mysqli/DriverTest.php b/tests/Functional/Driver/Mysqli/DriverTest.php index f426a34d7d9..58990520f6d 100644 --- a/tests/Functional/Driver/Mysqli/DriverTest.php +++ b/tests/Functional/Driver/Mysqli/DriverTest.php @@ -5,6 +5,7 @@ use Doctrine\DBAL\Driver as DriverInterface; use Doctrine\DBAL\Driver\Mysqli\Driver; use Doctrine\DBAL\Tests\Functional\Driver\AbstractDriverTest; +use Doctrine\DBAL\Tests\TestUtil; /** * @requires extension mysqli @@ -15,11 +16,11 @@ protected function setUp(): void { parent::setUp(); - if ($this->connection->getDriver() instanceof Driver) { + if (TestUtil::isDriverOneOf('mysqli')) { return; } - self::markTestSkipped('MySQLi only test.'); + self::markTestSkipped('This test requires the mysqli driver.'); } protected function createDriver(): DriverInterface diff --git a/tests/Functional/Driver/OCI8/ConnectionTest.php b/tests/Functional/Driver/OCI8/ConnectionTest.php index 92b1272f87c..4276f8d704b 100644 --- a/tests/Functional/Driver/OCI8/ConnectionTest.php +++ b/tests/Functional/Driver/OCI8/ConnectionTest.php @@ -2,9 +2,9 @@ namespace Doctrine\DBAL\Tests\Functional\Driver\OCI8; -use Doctrine\DBAL\Driver\OCI8\Driver; use Doctrine\DBAL\Schema\Table; use Doctrine\DBAL\Tests\FunctionalTestCase; +use Doctrine\DBAL\Tests\TestUtil; /** * @requires extension oci8 @@ -13,11 +13,11 @@ class ConnectionTest extends FunctionalTestCase { protected function setUp(): void { - if ($this->connection->getDriver() instanceof Driver) { + if (TestUtil::isDriverOneOf('oci8')) { return; } - self::markTestSkipped('oci8 only test.'); + self::markTestSkipped('This test requires the oci8 driver.'); } public function testLastInsertIdAcceptsFqn(): void diff --git a/tests/Functional/Driver/OCI8/DriverTest.php b/tests/Functional/Driver/OCI8/DriverTest.php index 5fb7af9089c..82cda7950ee 100644 --- a/tests/Functional/Driver/OCI8/DriverTest.php +++ b/tests/Functional/Driver/OCI8/DriverTest.php @@ -5,6 +5,7 @@ use Doctrine\DBAL\Driver as DriverInterface; use Doctrine\DBAL\Driver\OCI8\Driver; use Doctrine\DBAL\Tests\Functional\Driver\AbstractDriverTest; +use Doctrine\DBAL\Tests\TestUtil; /** * @requires extension oci8 @@ -15,11 +16,11 @@ protected function setUp(): void { parent::setUp(); - if ($this->connection->getDriver() instanceof Driver) { + if (TestUtil::isDriverOneOf('oci8')) { return; } - self::markTestSkipped('oci8 only test.'); + self::markTestSkipped('This test requires the oci8 driver.'); } public function testConnectsWithoutDatabaseNameParameter(): void diff --git a/tests/Functional/Driver/OCI8/ResultTest.php b/tests/Functional/Driver/OCI8/ResultTest.php index a59b5c11971..e92a7a2ad92 100644 --- a/tests/Functional/Driver/OCI8/ResultTest.php +++ b/tests/Functional/Driver/OCI8/ResultTest.php @@ -4,7 +4,6 @@ namespace Doctrine\DBAL\Tests\Functional\Driver\OCI8; -use Doctrine\DBAL\Driver\OCI8\Driver; use Doctrine\DBAL\Exception\DriverException; use Doctrine\DBAL\Tests\FunctionalTestCase; use Doctrine\DBAL\Tests\TestUtil; @@ -32,11 +31,11 @@ protected function setUp(): void { $this->connectionParams = TestUtil::getConnectionParams(); - if ($this->connection->getDriver() instanceof Driver) { + if (TestUtil::isDriverOneOf('oci8')) { return; } - self::markTestSkipped('oci8 only test.'); + self::markTestSkipped('This test requires the oci8 driver.'); } protected function tearDown(): void diff --git a/tests/Functional/Driver/OCI8/StatementTest.php b/tests/Functional/Driver/OCI8/StatementTest.php index 98383c1e5d4..44eed36a92d 100644 --- a/tests/Functional/Driver/OCI8/StatementTest.php +++ b/tests/Functional/Driver/OCI8/StatementTest.php @@ -2,8 +2,8 @@ namespace Doctrine\DBAL\Tests\Functional\Driver\OCI8; -use Doctrine\DBAL\Driver\OCI8\Driver; use Doctrine\DBAL\Tests\FunctionalTestCase; +use Doctrine\DBAL\Tests\TestUtil; /** * @requires extension oci8 @@ -12,11 +12,11 @@ class StatementTest extends FunctionalTestCase { protected function setUp(): void { - if ($this->connection->getDriver() instanceof Driver) { + if (TestUtil::isDriverOneOf('oci8')) { return; } - self::markTestSkipped('oci8 only test.'); + self::markTestSkipped('This test requires the oci8 driver.'); } /** diff --git a/tests/Functional/Driver/PDO/ConnectionTest.php b/tests/Functional/Driver/PDO/ConnectionTest.php deleted file mode 100644 index 317efc8288a..00000000000 --- a/tests/Functional/Driver/PDO/ConnectionTest.php +++ /dev/null @@ -1,93 +0,0 @@ -connection->getWrappedConnection(); - - if (! $driverConnection instanceof Connection) { - self::markTestSkipped('PDO connection only test.'); - } - - $this->driverConnection = $driverConnection; - } - - protected function tearDown(): void - { - $this->markConnectionNotReusable(); - } - - public function testThrowsWrappedExceptionOnConstruct(): void - { - $this->expectException(Exception::class); - - new Connection('foo'); - } - - public function testThrowsWrappedExceptionOnExec(): void - { - $this->expectException(Exception::class); - - $this->driverConnection->exec('foo'); - } - - public function testThrowsWrappedExceptionOnPrepare(): void - { - $driver = $this->connection->getDriver(); - - if ($driver instanceof PDO\SQLSrv\Driver) { - self::markTestSkipped('pdo_sqlsrv does not allow setting PDO::ATTR_EMULATE_PREPARES at connection level.'); - } - - // Some PDO adapters do not check the query server-side - // even though emulated prepared statements are disabled, - // so an exception is thrown only eventually. - if ( - $driver instanceof PDO\OCI\Driver - || $driver instanceof PDO\PgSQL\Driver - ) { - self::markTestSkipped(sprintf( - 'The underlying implementation of the %s driver does not check the query to be prepared server-side.', - get_class($driver) - )); - } - - // Emulated prepared statements have to be disabled for this test - // so that PDO actually communicates with the database server to check the query. - $this->driverConnection - ->getWrappedConnection() - ->setAttribute(\PDO::ATTR_EMULATE_PREPARES, false); - - $this->expectException(Exception::class); - - $this->driverConnection->prepare('foo'); - } - - public function testThrowsWrappedExceptionOnQuery(): void - { - $this->expectException(Exception::class); - - $this->driverConnection->query('foo'); - } -} diff --git a/tests/Functional/Driver/PDO/MySQL/DriverTest.php b/tests/Functional/Driver/PDO/MySQL/DriverTest.php index 8eda92b3107..e50328485e1 100644 --- a/tests/Functional/Driver/PDO/MySQL/DriverTest.php +++ b/tests/Functional/Driver/PDO/MySQL/DriverTest.php @@ -5,6 +5,7 @@ use Doctrine\DBAL\Driver as DriverInterface; use Doctrine\DBAL\Driver\PDO\MySQL\Driver; use Doctrine\DBAL\Tests\Functional\Driver\AbstractDriverTest; +use Doctrine\DBAL\Tests\TestUtil; /** * @requires extension pdo_mysql @@ -15,11 +16,11 @@ protected function setUp(): void { parent::setUp(); - if ($this->connection->getDriver() instanceof Driver) { + if (TestUtil::isDriverOneOf('pdo_mysql')) { return; } - self::markTestSkipped('pdo_mysql only test.'); + self::markTestSkipped('This test requires the pdo_mysql driver.'); } protected function createDriver(): DriverInterface diff --git a/tests/Functional/Driver/PDO/OCI/DriverTest.php b/tests/Functional/Driver/PDO/OCI/DriverTest.php index ebaebcf55f0..d3ba5f25e35 100644 --- a/tests/Functional/Driver/PDO/OCI/DriverTest.php +++ b/tests/Functional/Driver/PDO/OCI/DriverTest.php @@ -5,6 +5,7 @@ use Doctrine\DBAL\Driver as DriverInterface; use Doctrine\DBAL\Driver\PDO\OCI\Driver; use Doctrine\DBAL\Tests\Functional\Driver\AbstractDriverTest; +use Doctrine\DBAL\Tests\TestUtil; /** * @requires extension pdo_oci @@ -15,11 +16,11 @@ protected function setUp(): void { parent::setUp(); - if ($this->connection->getDriver() instanceof Driver) { + if (TestUtil::isDriverOneOf('pdo_oci')) { return; } - self::markTestSkipped('PDO_OCI only test.'); + self::markTestSkipped('This test requires the pdo_oci driver.'); } public function testConnectsWithoutDatabaseNameParameter(): void diff --git a/tests/Functional/Driver/PDO/PgSQL/ConnectionTest.php b/tests/Functional/Driver/PDO/PgSQL/ConnectionTest.php index 592eea5092a..8f56ff4e1a6 100644 --- a/tests/Functional/Driver/PDO/PgSQL/ConnectionTest.php +++ b/tests/Functional/Driver/PDO/PgSQL/ConnectionTest.php @@ -2,9 +2,9 @@ namespace Doctrine\DBAL\Tests\Functional\Driver\PDO\PgSQL; -use Doctrine\DBAL\Driver\PDO\PgSQL\Driver; use Doctrine\DBAL\DriverManager; use Doctrine\DBAL\Tests\FunctionalTestCase; +use Doctrine\DBAL\Tests\TestUtil; /** * @requires extension pdo_pgsql @@ -13,11 +13,11 @@ class ConnectionTest extends FunctionalTestCase { protected function setUp(): void { - if ($this->connection->getDriver() instanceof Driver) { + if (TestUtil::isDriverOneOf('pdo_pgsql')) { return; } - self::markTestSkipped('pdo_pgsql only test.'); + self::markTestSkipped('This test requires the pdo_pgsql driver.'); } /** diff --git a/tests/Functional/Driver/PDO/PgSQL/DriverTest.php b/tests/Functional/Driver/PDO/PgSQL/DriverTest.php index c774b0f4a47..531c0e097c7 100644 --- a/tests/Functional/Driver/PDO/PgSQL/DriverTest.php +++ b/tests/Functional/Driver/PDO/PgSQL/DriverTest.php @@ -21,11 +21,11 @@ protected function setUp(): void { parent::setUp(); - if ($this->connection->getDriver() instanceof Driver) { + if (TestUtil::isDriverOneOf('pdo_pgsql')) { return; } - self::markTestSkipped('pdo_pgsql only test.'); + self::markTestSkipped('This test requires the pdo_pgsql driver.'); } /** diff --git a/tests/Functional/Driver/PDO/SQLSrv/DriverTest.php b/tests/Functional/Driver/PDO/SQLSrv/DriverTest.php index fea7407851f..2603ca0bd60 100644 --- a/tests/Functional/Driver/PDO/SQLSrv/DriverTest.php +++ b/tests/Functional/Driver/PDO/SQLSrv/DriverTest.php @@ -20,11 +20,11 @@ protected function setUp(): void { parent::setUp(); - if ($this->connection->getDriver() instanceof Driver) { + if (TestUtil::isDriverOneOf('pdo_sqlsrv')) { return; } - self::markTestSkipped('pdo_sqlsrv only test.'); + self::markTestSkipped('This test requires the pdo_sqlsrv driver.'); } protected function createDriver(): DriverInterface diff --git a/tests/Functional/Driver/PDO/SQLite/DriverTest.php b/tests/Functional/Driver/PDO/SQLite/DriverTest.php index 728a7952dde..0868bf9bf54 100644 --- a/tests/Functional/Driver/PDO/SQLite/DriverTest.php +++ b/tests/Functional/Driver/PDO/SQLite/DriverTest.php @@ -5,6 +5,7 @@ use Doctrine\DBAL\Driver as DriverInterface; use Doctrine\DBAL\Driver\PDO\SQLite\Driver; use Doctrine\DBAL\Tests\Functional\Driver\AbstractDriverTest; +use Doctrine\DBAL\Tests\TestUtil; /** * @requires extension pdo_sqlite @@ -15,11 +16,11 @@ protected function setUp(): void { parent::setUp(); - if ($this->connection->getDriver() instanceof Driver) { + if (TestUtil::isDriverOneOf('pdo_sqlite')) { return; } - self::markTestSkipped('pdo_sqlite only test.'); + self::markTestSkipped('This test requires the pdo_sqlite driver.'); } public function testReturnsDatabaseNameWithoutDatabaseNameParameter(): void diff --git a/tests/Functional/Driver/SQLSrv/DriverTest.php b/tests/Functional/Driver/SQLSrv/DriverTest.php index 702e8cabbca..c6c98491008 100644 --- a/tests/Functional/Driver/SQLSrv/DriverTest.php +++ b/tests/Functional/Driver/SQLSrv/DriverTest.php @@ -5,6 +5,7 @@ use Doctrine\DBAL\Driver as DriverInterface; use Doctrine\DBAL\Driver\SQLSrv\Driver; use Doctrine\DBAL\Tests\Functional\Driver\AbstractDriverTest; +use Doctrine\DBAL\Tests\TestUtil; /** * @requires extension sqlsrv @@ -15,11 +16,11 @@ protected function setUp(): void { parent::setUp(); - if ($this->connection->getDriver() instanceof Driver) { + if (TestUtil::isDriverOneOf('sqlsrv')) { return; } - self::markTestSkipped('sqlsrv only test.'); + self::markTestSkipped('This test requires the sqlsrv driver.'); } protected function createDriver(): DriverInterface diff --git a/tests/Functional/Driver/SQLSrv/StatementTest.php b/tests/Functional/Driver/SQLSrv/StatementTest.php index 3064962d88c..a99066c7d3a 100644 --- a/tests/Functional/Driver/SQLSrv/StatementTest.php +++ b/tests/Functional/Driver/SQLSrv/StatementTest.php @@ -3,8 +3,8 @@ namespace Doctrine\DBAL\Tests\Functional\Driver\SQLSrv; use Doctrine\DBAL\Driver\Exception; -use Doctrine\DBAL\Driver\SQLSrv\Driver; use Doctrine\DBAL\Tests\FunctionalTestCase; +use Doctrine\DBAL\Tests\TestUtil; /** * @requires extension sqlsrv @@ -13,11 +13,11 @@ class StatementTest extends FunctionalTestCase { protected function setUp(): void { - if ($this->connection->getDriver() instanceof Driver) { + if (TestUtil::isDriverOneOf('sqlsrv')) { return; } - self::markTestSkipped('sqlsrv only test'); + self::markTestSkipped('This test requires the sqlsrv driver.'); } public function testFailureToPrepareResultsInException(): void diff --git a/tests/Functional/ExceptionTest.php b/tests/Functional/ExceptionTest.php index a16f8257f99..92da673a3f0 100644 --- a/tests/Functional/ExceptionTest.php +++ b/tests/Functional/ExceptionTest.php @@ -2,7 +2,6 @@ namespace Doctrine\DBAL\Tests\Functional; -use Doctrine\DBAL\Driver\AbstractSQLServerDriver; use Doctrine\DBAL\DriverManager; use Doctrine\DBAL\Exception; use Doctrine\DBAL\Platforms\SqlitePlatform; @@ -323,7 +322,7 @@ public function testInvalidPassword(): void public function testInvalidHost(): void { - if ($this->connection->getDriver() instanceof AbstractSQLServerDriver) { + if (TestUtil::isDriverOneOf('pdo_sqlsrv', 'sqlsrv')) { self::markTestSkipped( 'Some sqlsrv and pdo_sqlsrv versions do not provide the exception code or SQLSTATE for login timeout' ); diff --git a/tests/Functional/LockMode/NoneTest.php b/tests/Functional/LockMode/NoneTest.php index b5f9ccde145..35420b3ad87 100644 --- a/tests/Functional/LockMode/NoneTest.php +++ b/tests/Functional/LockMode/NoneTest.php @@ -5,7 +5,6 @@ namespace Doctrine\DBAL\Tests\Functional\LockMode; use Doctrine\DBAL\Connection; -use Doctrine\DBAL\Driver\OCI8; use Doctrine\DBAL\Exception; use Doctrine\DBAL\LockMode; use Doctrine\DBAL\Platforms\SqlitePlatform; @@ -22,7 +21,7 @@ class NoneTest extends FunctionalTestCase public function setUp(): void { - if ($this->connection->getDriver() instanceof OCI8\Driver) { + if (TestUtil::isDriverOneOf('oci8')) { // https://github.com/doctrine/dbal/issues/4417 self::markTestSkipped('This test fails on OCI8 for a currently unknown reason'); } diff --git a/tests/Functional/ParameterTypes/AsciiTest.php b/tests/Functional/ParameterTypes/AsciiTest.php index 70c56540173..36180fdecad 100644 --- a/tests/Functional/ParameterTypes/AsciiTest.php +++ b/tests/Functional/ParameterTypes/AsciiTest.php @@ -4,15 +4,15 @@ namespace Doctrine\DBAL\Tests\Functional\ParameterTypes; -use Doctrine\DBAL\Driver\AbstractSQLServerDriver; use Doctrine\DBAL\ParameterType; use Doctrine\DBAL\Tests\FunctionalTestCase; +use Doctrine\DBAL\Tests\TestUtil; class AsciiTest extends FunctionalTestCase { public function testAsciiBinding(): void { - if (! $this->connection->getDriver() instanceof AbstractSQLServerDriver) { + if (! TestUtil::isDriverOneOf('sqlsrv', 'pdo_sqlsrv')) { self::markTestSkipped('Driver does not support ascii string binding'); } diff --git a/tests/Functional/ResultTest.php b/tests/Functional/ResultTest.php index 5690ca6ef3b..7b252997c75 100644 --- a/tests/Functional/ResultTest.php +++ b/tests/Functional/ResultTest.php @@ -2,11 +2,10 @@ namespace Doctrine\DBAL\Tests\Functional; -use Doctrine\DBAL\Driver\IBMDB2; -use Doctrine\DBAL\Driver\Mysqli; use Doctrine\DBAL\Exception; use Doctrine\DBAL\Result; use Doctrine\DBAL\Tests\FunctionalTestCase; +use Doctrine\DBAL\Tests\TestUtil; class ResultTest extends FunctionalTestCase { @@ -15,9 +14,7 @@ class ResultTest extends FunctionalTestCase */ public function testExceptionHandling(callable $method): void { - $driver = $this->connection->getDriver(); - - if (! $driver instanceof Mysqli\Driver && ! $driver instanceof IBMDB2\Driver) { + if (! TestUtil::isDriverOneOf('mysqli', 'ibm_db2')) { self::markTestSkipped('This test works only with the mysqli and ibm_db2 drivers.'); } diff --git a/tests/Functional/SQL/ParserTest.php b/tests/Functional/SQL/ParserTest.php index 81421d373a6..2f2b5b045d6 100644 --- a/tests/Functional/SQL/ParserTest.php +++ b/tests/Functional/SQL/ParserTest.php @@ -4,15 +4,15 @@ namespace Doctrine\DBAL\Tests\Functional\SQL; -use Doctrine\DBAL\Driver\PDO\PgSQL; use Doctrine\DBAL\Tests\FunctionalTestCase; +use Doctrine\DBAL\Tests\TestUtil; class ParserTest extends FunctionalTestCase { public function testPostgreSQLJSONBQuestionOperator(): void { - if (! $this->connection->getDriver() instanceof PgSQL\Driver) { - self::markTestSkipped('This test works only with pdo_pgsql.'); + if (! TestUtil::isDriverOneOf('pdo_pgsql')) { + self::markTestSkipped('This test requires the pdo_pgsql driver.'); } self::assertTrue($this->connection->fetchOne('SELECT \'{"a":null}\'::jsonb ?? :key', ['key' => 'a'])); diff --git a/tests/Functional/StatementTest.php b/tests/Functional/StatementTest.php index 76676b82b82..f9e8bad259b 100644 --- a/tests/Functional/StatementTest.php +++ b/tests/Functional/StatementTest.php @@ -3,11 +3,11 @@ namespace Doctrine\DBAL\Tests\Functional; use Doctrine\DBAL\Driver\Exception; -use Doctrine\DBAL\Driver\PDO; use Doctrine\DBAL\ParameterType; use Doctrine\DBAL\Result; use Doctrine\DBAL\Schema\Table; use Doctrine\DBAL\Tests\FunctionalTestCase; +use Doctrine\DBAL\Tests\TestUtil; use Doctrine\DBAL\Types\Type; use function base64_decode; @@ -25,7 +25,7 @@ protected function setUp(): void public function testStatementIsReusableAfterFreeingResult(): void { - if ($this->connection->getDriver() instanceof PDO\OCI\Driver) { + if (TestUtil::isDriverOneOf('pdo_oci')) { self::markTestIncomplete('See https://bugs.php.net/bug.php?id=77181'); } @@ -48,7 +48,7 @@ public function testStatementIsReusableAfterFreeingResult(): void public function testReuseStatementWithLongerResults(): void { - if ($this->connection->getDriver() instanceof PDO\OCI\Driver) { + if (TestUtil::isDriverOneOf('pdo_oci')) { self::markTestIncomplete('PDO_OCI doesn\'t support fetching blobs via PDOStatement::fetchAll()'); } @@ -84,7 +84,7 @@ public function testReuseStatementWithLongerResults(): void public function testFetchLongBlob(): void { - if ($this->connection->getDriver() instanceof PDO\OCI\Driver) { + if (TestUtil::isDriverOneOf('pdo_oci')) { // inserting BLOBs as streams on Oracle requires Oracle-specific SQL syntax which is currently not supported // see http://php.net/manual/en/pdo.lobs.php#example-1035 self::markTestSkipped('DBAL doesn\'t support storing LOBs represented as streams using PDO_OCI'); @@ -149,7 +149,7 @@ public function testIncompletelyFetchedStatementDoesNotBlockConnection(): void public function testReuseStatementAfterFreeingResult(): void { - if ($this->connection->getDriver() instanceof PDO\OCI\Driver) { + if (TestUtil::isDriverOneOf('pdo_oci')) { self::markTestIncomplete('See https://bugs.php.net/bug.php?id=77181'); } diff --git a/tests/Functional/TypeConversionTest.php b/tests/Functional/TypeConversionTest.php index 427e3308fe3..1e9e16db139 100644 --- a/tests/Functional/TypeConversionTest.php +++ b/tests/Functional/TypeConversionTest.php @@ -3,9 +3,9 @@ namespace Doctrine\DBAL\Tests\Functional; use DateTime; -use Doctrine\DBAL\Driver\PDO; use Doctrine\DBAL\Schema\Table; use Doctrine\DBAL\Tests\FunctionalTestCase; +use Doctrine\DBAL\Tests\TestUtil; use Doctrine\DBAL\Types\Type; use stdClass; @@ -116,7 +116,7 @@ public static function floatProvider(): iterable */ public function testIdempotentConversionToString(string $type, $originalValue): void { - if ($type === 'text' && $this->connection->getDriver() instanceof PDO\OCI\Driver) { + if ($type === 'text' && TestUtil::isDriverOneOf('pdo_oci')) { // inserting BLOBs as streams on Oracle requires Oracle-specific SQL syntax which is currently not supported // see http://php.net/manual/en/pdo.lobs.php#example-1035 self::markTestSkipped('DBAL doesn\'t support storing LOBs represented as streams using PDO_OCI'); diff --git a/tests/Functional/Types/BinaryTest.php b/tests/Functional/Types/BinaryTest.php index 2d19467e671..0afeeac90b6 100644 --- a/tests/Functional/Types/BinaryTest.php +++ b/tests/Functional/Types/BinaryTest.php @@ -4,11 +4,10 @@ namespace Doctrine\DBAL\Tests\Functional\Types; -use Doctrine\DBAL\Driver\IBMDB2\Driver; -use Doctrine\DBAL\Driver\PDO; use Doctrine\DBAL\ParameterType; use Doctrine\DBAL\Schema\Table; use Doctrine\DBAL\Tests\FunctionalTestCase; +use Doctrine\DBAL\Tests\TestUtil; use function is_resource; use function random_bytes; @@ -19,7 +18,7 @@ class BinaryTest extends FunctionalTestCase { protected function setUp(): void { - if ($this->connection->getDriver() instanceof PDO\OCI\Driver) { + if (TestUtil::isDriverOneOf('pdo_oci')) { self::markTestSkipped('PDO_OCI doesn\'t support binding binary values'); } @@ -43,7 +42,7 @@ public function testInsertAndSelect(): void $value2 = random_bytes(64); /** @see https://bugs.php.net/bug.php?id=76322 */ - if ($this->connection->getDriver() instanceof Driver) { + if (TestUtil::isDriverOneOf('ibm_db2')) { $value1 = str_replace("\x00", "\xFF", $value1); $value2 = str_replace("\x00", "\xFF", $value2); } diff --git a/tests/TestUtil.php b/tests/TestUtil.php index 1e88ed90f66..3af71543992 100644 --- a/tests/TestUtil.php +++ b/tests/TestUtil.php @@ -16,6 +16,7 @@ use function explode; use function extension_loaded; use function implode; +use function in_array; use function is_string; use function strlen; use function strpos; @@ -233,6 +234,11 @@ public static function getPrivilegedConnection(): Connection return DriverManager::getConnection(self::getPrivilegedConnectionParameters()); } + public static function isDriverOneOf(string ...$names): bool + { + return in_array(self::getConnectionParams()['driver'], $names, true); + } + /** * Generates a query that will return the given rows without the need to create a temporary table. *