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@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@0: $ref = array('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@0: #line: 27 Chris@0: trace: { Chris@0: %sExceptionCasterTest.php:27: { Chris@0: : { Chris@0: : return new \Exception(''.$msg); Chris@0: : } Chris@0: } Chris@0: %sExceptionCasterTest.php:%d: { Chris@0: : $ref = array('foo'); Chris@0: : $e = $this->getTestException('foo', $ref); Chris@0: : Chris@0: arguments: { Chris@0: $msg: "foo" Chris@0: &$ref: array:1 [ …1] Chris@0: } Chris@0: } Chris@0: %A Chris@0: EODUMP; Chris@0: Chris@0: $this->assertDumpMatchesFormat($expectedDump, $e); Chris@0: $this->assertSame(array('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@0: %sExceptionCasterTest.php:27: { Chris@0: : { Chris@0: : return new \Exception(''.$msg); Chris@0: : } Chris@0: } Chris@0: %sExceptionCasterTest.php:%d: { Chris@0: : { Chris@0: : $e = $this->getTestException(2); Chris@0: : Chris@0: arguments: { Chris@0: $msg: 2 Chris@0: } Chris@0: } 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@0: #line: 27 Chris@0: trace: { Chris@0: %sExceptionCasterTest.php:27: { Chris@0: : { Chris@0: : return new \Exception(''.$msg); Chris@0: : } Chris@0: } Chris@0: %sExceptionCasterTest.php:%d: { Chris@0: : { Chris@0: : $e = $this->getTestException(1); Chris@0: : ExceptionCaster::$traceArgs = false; Chris@0: } 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@0: #line: 27 Chris@0: trace: { Chris@0: %sExceptionCasterTest.php: 27 Chris@0: %sExceptionCasterTest.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@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@0: #line: 27 Chris@0: trace: { Chris@0: %s%eVarDumper%eTests%eCaster%eExceptionCasterTest.php: 27 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@0: require_once dirname(__DIR__).'/Fixtures/Twig.php'; Chris@0: Chris@0: $f = array( Chris@0: new FrameStub(array( Chris@0: 'file' => dirname(__DIR__).'/Fixtures/Twig.php', Chris@0: 'line' => 20, Chris@0: 'class' => '__TwigTemplate_VarDumperFixture_u75a09', Chris@0: )), Chris@0: new FrameStub(array( Chris@0: '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@0: )), Chris@0: ); Chris@0: Chris@0: $expectedDump = <<<'EODUMP' Chris@0: array:2 [ Chris@0: 0 => { Chris@0: class: "__TwigTemplate_VarDumperFixture_u75a09" Chris@0: src: { Chris@0: %sTwig.php:1: { Chris@0: : Chris@0: : foo bar Chris@0: : 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@0: %sExceptionCasterTest.php:2: { Chris@0: : foo bar Chris@0: : twig source Chris@0: : Chris@0: } Chris@0: } Chris@0: } Chris@0: ] Chris@0: Chris@0: EODUMP; Chris@0: Chris@0: $this->assertDumpMatchesFormat($expectedDump, $f); Chris@0: } Chris@0: }