Chris@0: Chris@0: * Chris@0: * For the full copyright and license information, please view the LICENSE Chris@0: * file that was distributed with this source code. Chris@0: */ Chris@0: Chris@0: namespace Symfony\Component\VarDumper\Tests\Caster; Chris@0: Chris@0: use PHPUnit\Framework\TestCase; Chris@12: use Symfony\Component\VarDumper\Caster\Caster; Chris@0: use Symfony\Component\VarDumper\Caster\ExceptionCaster; Chris@0: use Symfony\Component\VarDumper\Caster\FrameStub; Chris@0: use Symfony\Component\VarDumper\Cloner\VarCloner; Chris@0: use Symfony\Component\VarDumper\Dumper\HtmlDumper; Chris@0: use Symfony\Component\VarDumper\Test\VarDumperTestTrait; Chris@0: Chris@0: class ExceptionCasterTest extends TestCase Chris@0: { Chris@0: use VarDumperTestTrait; Chris@0: Chris@0: private function getTestException($msg, &$ref = null) Chris@0: { Chris@0: return new \Exception(''.$msg); Chris@0: } Chris@0: Chris@0: protected function tearDown() Chris@0: { Chris@0: ExceptionCaster::$srcContext = 1; Chris@0: ExceptionCaster::$traceArgs = true; Chris@0: } Chris@0: Chris@0: public function testDefaultSettings() Chris@0: { Chris@17: $ref = ['foo']; Chris@0: $e = $this->getTestException('foo', $ref); Chris@0: Chris@0: $expectedDump = <<<'EODUMP' Chris@0: Exception { Chris@0: #message: "foo" Chris@0: #code: 0 Chris@0: #file: "%sExceptionCasterTest.php" Chris@12: #line: 28 Chris@0: trace: { Chris@12: %s%eTests%eCaster%eExceptionCasterTest.php:28 { Chris@12: › { Chris@12: › return new \Exception(''.$msg); Chris@12: › } Chris@0: } Chris@12: %s%eTests%eCaster%eExceptionCasterTest.php:40 { …} Chris@12: Symfony\Component\VarDumper\Tests\Caster\ExceptionCasterTest->testDefaultSettings() {} Chris@0: %A Chris@0: EODUMP; Chris@0: Chris@0: $this->assertDumpMatchesFormat($expectedDump, $e); Chris@17: $this->assertSame(['foo'], $ref); Chris@0: } Chris@0: Chris@0: public function testSeek() Chris@0: { Chris@0: $e = $this->getTestException(2); Chris@0: Chris@0: $expectedDump = <<<'EODUMP' Chris@0: { Chris@12: %s%eTests%eCaster%eExceptionCasterTest.php:28 { Chris@12: › { Chris@12: › return new \Exception(''.$msg); Chris@12: › } Chris@0: } Chris@12: %s%eTests%eCaster%eExceptionCasterTest.php:65 { …} Chris@12: Symfony\Component\VarDumper\Tests\Caster\ExceptionCasterTest->testSeek() {} Chris@0: %A Chris@0: EODUMP; Chris@0: Chris@0: $this->assertStringMatchesFormat($expectedDump, $this->getDump($e, 'trace')); Chris@0: } Chris@0: Chris@0: public function testNoArgs() Chris@0: { Chris@0: $e = $this->getTestException(1); Chris@0: ExceptionCaster::$traceArgs = false; Chris@0: Chris@0: $expectedDump = <<<'EODUMP' Chris@0: Exception { Chris@0: #message: "1" Chris@0: #code: 0 Chris@0: #file: "%sExceptionCasterTest.php" Chris@12: #line: 28 Chris@0: trace: { Chris@12: %sExceptionCasterTest.php:28 { Chris@12: › { Chris@12: › return new \Exception(''.$msg); Chris@12: › } Chris@0: } Chris@12: %s%eTests%eCaster%eExceptionCasterTest.php:84 { …} Chris@12: Symfony\Component\VarDumper\Tests\Caster\ExceptionCasterTest->testNoArgs() {} Chris@0: %A Chris@0: EODUMP; Chris@0: Chris@0: $this->assertDumpMatchesFormat($expectedDump, $e); Chris@0: } Chris@0: Chris@0: public function testNoSrcContext() Chris@0: { Chris@0: $e = $this->getTestException(1); Chris@0: ExceptionCaster::$srcContext = -1; Chris@0: Chris@0: $expectedDump = <<<'EODUMP' Chris@0: Exception { Chris@0: #message: "1" Chris@0: #code: 0 Chris@0: #file: "%sExceptionCasterTest.php" Chris@12: #line: 28 Chris@0: trace: { Chris@12: %s%eTests%eCaster%eExceptionCasterTest.php:28 Chris@12: %s%eTests%eCaster%eExceptionCasterTest.php:%d Chris@0: %A Chris@0: EODUMP; Chris@0: Chris@0: $this->assertDumpMatchesFormat($expectedDump, $e); Chris@0: } Chris@0: Chris@0: public function testHtmlDump() Chris@0: { Chris@13: if (ini_get('xdebug.file_link_format') || get_cfg_var('xdebug.file_link_format')) { Chris@13: $this->markTestSkipped('A custom file_link_format is defined.'); Chris@13: } Chris@13: Chris@0: $e = $this->getTestException(1); Chris@0: ExceptionCaster::$srcContext = -1; Chris@0: Chris@0: $cloner = new VarCloner(); Chris@0: $cloner->setMaxItems(1); Chris@0: $dumper = new HtmlDumper(); Chris@0: $dumper->setDumpHeader(''); Chris@0: $dumper->setDumpBoundaries('', ''); Chris@0: $dump = $dumper->dump($cloner->cloneVar($e)->withRefHandles(false), true); Chris@0: Chris@0: $expectedDump = <<<'EODUMP' Chris@0: Exception { Chris@0: #message: "1" Chris@0: #code: 0 Chris@0: #file: "%s%eVarDumper%eTests%eCaster%eExceptionCasterTest.php" Chris@12: #line: 28 Chris@0: trace: { Chris@0: %s%eVarDumper%eTests%eCaster%eExceptionCasterTest.php:28 Chris@0: …%d Chris@0: } Chris@0: } Chris@0: Chris@0: EODUMP; Chris@0: Chris@0: $this->assertStringMatchesFormat($expectedDump, $dump); Chris@0: } Chris@0: Chris@0: /** Chris@0: * @requires function Twig\Template::getSourceContext Chris@0: */ Chris@0: public function testFrameWithTwig() Chris@0: { Chris@17: require_once \dirname(__DIR__).'/Fixtures/Twig.php'; Chris@0: Chris@17: $f = [ Chris@17: new FrameStub([ Chris@17: 'file' => \dirname(__DIR__).'/Fixtures/Twig.php', Chris@0: 'line' => 20, Chris@0: 'class' => '__TwigTemplate_VarDumperFixture_u75a09', Chris@17: ]), Chris@17: new FrameStub([ Chris@17: 'file' => \dirname(__DIR__).'/Fixtures/Twig.php', Chris@0: 'line' => 21, Chris@0: 'class' => '__TwigTemplate_VarDumperFixture_u75a09', Chris@0: 'object' => new \__TwigTemplate_VarDumperFixture_u75a09(null, __FILE__), Chris@17: ]), Chris@17: ]; Chris@0: Chris@0: $expectedDump = <<<'EODUMP' Chris@0: array:2 [ Chris@0: 0 => { Chris@0: class: "__TwigTemplate_VarDumperFixture_u75a09" Chris@0: src: { Chris@12: %sTwig.php:1 { Chris@12: › Chris@12: › foo bar Chris@12: › twig source Chris@0: } Chris@0: } Chris@0: } Chris@0: 1 => { Chris@0: class: "__TwigTemplate_VarDumperFixture_u75a09" Chris@0: object: __TwigTemplate_VarDumperFixture_u75a09 { Chris@0: %A Chris@0: } Chris@0: src: { Chris@12: %sExceptionCasterTest.php:2 { Chris@12: › foo bar Chris@12: › twig source Chris@12: › Chris@0: } Chris@0: } Chris@0: } Chris@0: ] Chris@0: Chris@0: EODUMP; Chris@0: Chris@0: $this->assertDumpMatchesFormat($expectedDump, $f); Chris@0: } Chris@12: Chris@12: public function testExcludeVerbosity() Chris@12: { Chris@12: $e = $this->getTestException('foo'); Chris@12: Chris@12: $expectedDump = <<<'EODUMP' Chris@12: Exception { Chris@12: #message: "foo" Chris@12: #code: 0 Chris@12: #file: "%sExceptionCasterTest.php" Chris@12: #line: 28 Chris@0: } Chris@12: EODUMP; Chris@12: Chris@12: $this->assertDumpMatchesFormat($expectedDump, $e, Caster::EXCLUDE_VERBOSE); Chris@12: } Chris@12: }