<?php
use PHPUnit\Framework\TestCase;

class Issue1351Test extends TestCase
{
    protected $instance;

    /**
     * @runInSeparateProcess
     */
    public function testFailurePre()
    {
        $this->instance = new ChildProcessClass1351();
        $this->assertFalse(true, 'Expected failure.');
    }

    public function testFailurePost()
    {
        $this->assertNull($this->instance);
        $this->assertFalse(class_exists(ChildProcessClass1351::class, false), 'ChildProcessClass1351 is not loaded.');
    }

    /**
     * @runInSeparateProcess
     */
    public function testExceptionPre()
    {
        $this->instance = new ChildProcessClass1351();
        try {
            throw new LogicException('Expected exception.');
        } catch (LogicException $e) {
            throw new RuntimeException('Expected rethrown exception.', 0, $e);
        }
    }

    public function testExceptionPost()
    {
        $this->assertNull($this->instance);
        $this->assertFalse(class_exists(ChildProcessClass1351::class, false), 'ChildProcessClass1351 is not loaded.');
    }

    public function testPhpCoreLanguageException()
    {
        // User-space code cannot instantiate a PDOException with a string code,
        // so trigger a real one.
        $connection = new PDO('sqlite::memory:');
        $connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $connection->query("DELETE FROM php_wtf WHERE exception_code = 'STRING'");
    }
}
