OCI8StatementTest.php 1.33 KB
Newer Older
1 2
<?php

3
namespace Doctrine\DBAL\Tests\Driver\OCI8;
4

5 6
use Doctrine\DBAL\Driver\OCI8\OCI8Exception;
use Doctrine\DBAL\Driver\OCI8\OCI8Statement;
7
use PHPUnit\Framework\TestCase;
8

9
use function extension_loaded;
10

11
class OCI8StatementTest extends TestCase
12
{
13
    protected function setUp(): void
14
    {
Sergei Morozov's avatar
Sergei Morozov committed
15
        if (! extension_loaded('oci8')) {
16 17
            $this->markTestSkipped('oci8 is not installed.');
        }
18

19 20
        parent::setUp();
    }
21

22
    /**
23
     * @dataProvider nonTerminatedLiteralProvider
24
     */
25
    public function testConvertNonTerminatedLiteral(string $sql, string $message): void
26
    {
27
        $this->expectException(OCI8Exception::class);
28
        $this->expectExceptionMessageMatches($message);
29
        OCI8Statement::convertPositionalToNamedPlaceholders($sql);
30 31
    }

32 33 34
    /**
     * @return array<string, array<int, mixed>>
     */
35
    public static function nonTerminatedLiteralProvider(): iterable
36
    {
Sergei Morozov's avatar
Sergei Morozov committed
37 38
        return [
            'no-matching-quote' => [
39 40
                "SELECT 'literal FROM DUAL",
                '/offset 7/',
Sergei Morozov's avatar
Sergei Morozov committed
41 42
            ],
            'no-matching-double-quote' => [
43 44
                'SELECT 1 "COL1 FROM DUAL',
                '/offset 9/',
Sergei Morozov's avatar
Sergei Morozov committed
45 46
            ],
            'incorrect-escaping-syntax' => [
47 48
                "SELECT 'quoted \\'string' FROM DUAL",
                '/offset 23/',
Sergei Morozov's avatar
Sergei Morozov committed
49 50
            ],
        ];
51
    }
52
}