driverException = $this->createMock(TheDriverException::class); } /** * @dataProvider dataDriverException * @param string $class * @param int $reason */ public function testDriverException(string $class, int $reason): void { $result = DbalException::wrap(new $class($this->driverException, null)); $this->assertSame($reason, $result->getReason()); } public function dataDriverException(): array { return [ [LockWaitTimeoutException::class, DbalException::REASON_LOCK_WAIT_TIMEOUT], [ForeignKeyConstraintViolationException::class, DbalException::REASON_FOREIGN_KEY_VIOLATION], [NotNullConstraintViolationException::class, DbalException::REASON_NOT_NULL_CONSTRAINT_VIOLATION], [UniqueConstraintViolationException::class, DbalException::REASON_UNIQUE_CONSTRAINT_VIOLATION], [ConstraintViolationException::class, DbalException::REASON_CONSTRAINT_VIOLATION], [DatabaseObjectExistsException::class, DbalException::REASON_DATABASE_OBJECT_EXISTS], [DatabaseObjectNotFoundException::class, DbalException::REASON_DATABASE_OBJECT_NOT_FOUND], [DeadlockException::class, DbalException::REASON_DEADLOCK], [InvalidFieldNameException::class, DbalException::REASON_INVALID_FIELD_NAME], [NonUniqueFieldNameException::class, DbalException::REASON_NON_UNIQUE_FIELD_NAME], [SyntaxErrorException::class, DbalException::REASON_SYNTAX_ERROR], [ServerException::class, DbalException::REASON_SERVER], [DriverException::class, DbalException::REASON_DRIVER], ]; } public function testConnectionException(): void { $result = DbalException::wrap(ConnectionException::noActiveTransaction()); $this->assertSame(DbalException::REASON_CONNECTION_LOST, $result->getReason()); } public function testInvalidArgumentException(): void { $result = DbalException::wrap(InvalidArgumentException::fromEmptyCriteria()); $this->assertSame(DbalException::REASON_INVALID_ARGUMENT, $result->getReason()); } }