* * 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 PHPUnit\Framework\TestCase; use Symfony\Component\VarDumper\Caster\ExceptionCaster; use Symfony\Component\VarDumper\Caster\FrameStub; use Symfony\Component\VarDumper\Cloner\VarCloner; use Symfony\Component\VarDumper\Dumper\HtmlDumper; use Symfony\Component\VarDumper\Test\VarDumperTestTrait; class ExceptionCasterTest extends TestCase { use VarDumperTestTrait; private function getTestException($msg, &$ref = null) { return new \Exception(''.$msg); } protected function tearDown() { ExceptionCaster::$srcContext = 1; ExceptionCaster::$traceArgs = true; } public function testDefaultSettings() { $ref = array('foo'); $e = $this->getTestException('foo', $ref); $expectedDump = <<<'EODUMP' Exception { #message: "foo" #code: 0 #file: "%sExceptionCasterTest.php" #line: 27 trace: { %sExceptionCasterTest.php:27: { : { : return new \Exception(''.$msg); : } } %sExceptionCasterTest.php:%d: { : $ref = array('foo'); : $e = $this->getTestException('foo', $ref); : arguments: { $msg: "foo" &$ref: array:1 [ …1] } } %A EODUMP; $this->assertDumpMatchesFormat($expectedDump, $e); $this->assertSame(array('foo'), $ref); } public function testSeek() { $e = $this->getTestException(2); $expectedDump = <<<'EODUMP' { %sExceptionCasterTest.php:27: { : { : return new \Exception(''.$msg); : } } %sExceptionCasterTest.php:%d: { : { : $e = $this->getTestException(2); : arguments: { $msg: 2 } } %A EODUMP; $this->assertStringMatchesFormat($expectedDump, $this->getDump($e, 'trace')); } public function testNoArgs() { $e = $this->getTestException(1); ExceptionCaster::$traceArgs = false; $expectedDump = <<<'EODUMP' Exception { #message: "1" #code: 0 #file: "%sExceptionCasterTest.php" #line: 27 trace: { %sExceptionCasterTest.php:27: { : { : return new \Exception(''.$msg); : } } %sExceptionCasterTest.php:%d: { : { : $e = $this->getTestException(1); : ExceptionCaster::$traceArgs = false; } %A EODUMP; $this->assertDumpMatchesFormat($expectedDump, $e); } public function testNoSrcContext() { $e = $this->getTestException(1); ExceptionCaster::$srcContext = -1; $expectedDump = <<<'EODUMP' Exception { #message: "1" #code: 0 #file: "%sExceptionCasterTest.php" #line: 27 trace: { %sExceptionCasterTest.php: 27 %sExceptionCasterTest.php: %d %A EODUMP; $this->assertDumpMatchesFormat($expectedDump, $e); } public function testHtmlDump() { $e = $this->getTestException(1); ExceptionCaster::$srcContext = -1; $cloner = new VarCloner(); $cloner->setMaxItems(1); $dumper = new HtmlDumper(); $dumper->setDumpHeader(''); $dumper->setDumpBoundaries('', ''); $dump = $dumper->dump($cloner->cloneVar($e)->withRefHandles(false), true); $expectedDump = <<<'EODUMP' Exception { #message: "1" #code: 0 #file: "%s%eVarDumper%eTests%eCaster%eExceptionCasterTest.php" #line: 27 trace: { %s%eVarDumper%eTests%eCaster%eExceptionCasterTest.php: 27 …%d } } EODUMP; $this->assertStringMatchesFormat($expectedDump, $dump); } /** * @requires function Twig\Template::getSourceContext */ public function testFrameWithTwig() { require_once dirname(__DIR__).'/Fixtures/Twig.php'; $f = array( new FrameStub(array( 'file' => dirname(__DIR__).'/Fixtures/Twig.php', 'line' => 20, 'class' => '__TwigTemplate_VarDumperFixture_u75a09', )), new FrameStub(array( 'file' => dirname(__DIR__).'/Fixtures/Twig.php', 'line' => 21, 'class' => '__TwigTemplate_VarDumperFixture_u75a09', 'object' => new \__TwigTemplate_VarDumperFixture_u75a09(null, __FILE__), )), ); $expectedDump = <<<'EODUMP' array:2 [ 0 => { class: "__TwigTemplate_VarDumperFixture_u75a09" src: { %sTwig.php:1: { : : foo bar : twig source } } } 1 => { class: "__TwigTemplate_VarDumperFixture_u75a09" object: __TwigTemplate_VarDumperFixture_u75a09 { %A } src: { %sExceptionCasterTest.php:2: { : foo bar : twig source : } } } ] EODUMP; $this->assertDumpMatchesFormat($expectedDump, $f); } }