<?php

namespace Doctrine\Tests\DBAL\Driver;

use Doctrine\DBAL\Connection;
use Doctrine\DBAL\Platforms\SqlitePlatform;
use Doctrine\DBAL\Schema\SqliteSchemaManager;

class AbstractSQLiteDriverTest extends AbstractDriverTest
{
    public function testReturnsDatabaseName()
    {
        $params = array(
            'user'     => 'foo',
            'password' => 'bar',
            'dbname'   => 'baz',
            'path'     => 'bloo',
        );

        $connection = $this->getConnectionMock();

        $connection->expects($this->once())
            ->method('getParams')
            ->will($this->returnValue($params));

        $this->assertSame($params['path'], $this->driver->getDatabase($connection));
    }

    protected function createDriver()
    {
        return $this->getMockForAbstractClass('Doctrine\DBAL\Driver\AbstractSQLiteDriver');
    }

    protected function createPlatform()
    {
        return new SqlitePlatform();
    }

    protected function createSchemaManager(Connection $connection)
    {
        return new SqliteSchemaManager($connection);
    }

    protected function getExceptionConversionData()
    {
        return array(
            self::EXCEPTION_CONNECTION => array(
                array(null, null, 'unable to open database file'),
            ),
            self::EXCEPTION_INVALID_FIELD_NAME => array(
                array(null, null, 'has no column named'),
            ),
            self::EXCEPTION_NON_UNIQUE_FIELD_NAME => array(
                array(null, null, 'ambiguous column name'),
            ),
            self::EXCEPTION_NOT_NULL_CONSTRAINT_VIOLATION => array(
                array(null, null, 'may not be NULL'),
            ),
            self::EXCEPTION_READ_ONLY => array(
                array(null, null, 'attempt to write a readonly database'),
            ),
            self::EXCEPTION_SYNTAX_ERROR => array(
                array(null, null, 'syntax error'),
            ),
            self::EXCEPTION_TABLE_EXISTS => array(
                array(null, null, 'already exists'),
            ),
            self::EXCEPTION_TABLE_NOT_FOUND => array(
                array(null, null, 'no such table:'),
            ),
            self::EXCEPTION_UNIQUE_CONSTRAINT_VIOLATION => array(
                array(null, null, 'must be unique'),
                array(null, null, 'is not unique'),
                array(null, null, 'are not unique'),
            ),
        );
    }
}