From 0b1be13309eca7f5ae5455d8745f9b90a000789c Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Mon, 22 Dec 2014 09:20:39 +0100 Subject: [PATCH] [VarDumper] fix and test PdoCaster --- .../Component/VarDumper/Caster/PdoCaster.php | 2 +- .../VarDumper/Tests/Caster/PdoCasterTest.php | 58 +++++++++++++++++++ 2 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 src/Symfony/Component/VarDumper/Tests/Caster/PdoCasterTest.php diff --git a/src/Symfony/Component/VarDumper/Caster/PdoCaster.php b/src/Symfony/Component/VarDumper/Caster/PdoCaster.php index c476d7797cbe..0f9c919794cc 100644 --- a/src/Symfony/Component/VarDumper/Caster/PdoCaster.php +++ b/src/Symfony/Component/VarDumper/Caster/PdoCaster.php @@ -71,7 +71,7 @@ public static function castPdo(\PDO $c, array $a, Stub $stub, $isNested) try { $a[$attr] = 'ERRMODE' === $attr ? $errmode : $c->getAttribute(constant("PDO::ATTR_{$attr}")); - if (isset($values[$a[$attr]])) { + if ($values && isset($values[$a[$attr]])) { $a[$attr] = new ConstStub($values[$a[$attr]], $a[$attr]); } } catch (\Exception $m) { diff --git a/src/Symfony/Component/VarDumper/Tests/Caster/PdoCasterTest.php b/src/Symfony/Component/VarDumper/Tests/Caster/PdoCasterTest.php new file mode 100644 index 000000000000..5125e17d9dd5 --- /dev/null +++ b/src/Symfony/Component/VarDumper/Tests/Caster/PdoCasterTest.php @@ -0,0 +1,58 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\VarDumper\Tests\Caster; + +use Symfony\Component\VarDumper\Caster\PdoCaster; +use Symfony\Component\VarDumper\Cloner\Stub; + +/** + * @author Nicolas Grekas + */ +class PdoCasterTest extends \PHPUnit_Framework_TestCase +{ + public function testCastPdo() + { + if (!extension_loaded('pdo_sqlite')) { + $this->markTestSkipped('pdo_sqlite extension is required'); + } + + $pdo = new \PDO('sqlite::memory:'); + $pdo->setAttribute(\PDO::ATTR_STATEMENT_CLASS, array('PDOStatement', array($pdo))); + + $cast = PdoCaster::castPdo($pdo, array(), new Stub(), false); + $attr = $cast["\0~\0attributes"]; + + $this->assertInstanceOf('Symfony\Component\VarDumper\Caster\ConstStub', $attr['CASE']); + $this->assertSame('NATURAL', $attr['CASE']->class); + $this->assertSame('BOTH', $attr['DEFAULT_FETCH_MODE']->class); + + $xCast = array( + "\0~\0inTransaction" => false, + "\0~\0attributes" => array( + 'CASE' => $attr['CASE'], + 'ERRMODE' => $attr['ERRMODE'], + 'PERSISTENT' => false, + 'DRIVER_NAME' => 'sqlite', + 'ORACLE_NULLS' => $attr['ORACLE_NULLS'], + 'CLIENT_VERSION' => $pdo->getAttribute(\PDO::ATTR_CLIENT_VERSION), + 'SERVER_VERSION' => $pdo->getAttribute(\PDO::ATTR_SERVER_VERSION), + 'STATEMENT_CLASS' => array( + 'PDOStatement', + array($pdo), + ), + 'DEFAULT_FETCH_MODE' => $attr['DEFAULT_FETCH_MODE'], + ), + ); + + $this->assertSame($xCast, $cast); + } +}