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: }