231 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			231 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | ||
| 
 | ||
| /*
 | ||
|  * This file is part of the Symfony package.
 | ||
|  *
 | ||
|  * (c) Fabien Potencier <fabien@symfony.com>
 | ||
|  *
 | ||
|  * 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\Caster;
 | ||
| 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: 28
 | ||
|   trace: {
 | ||
|     %s%eTests%eCaster%eExceptionCasterTest.php:28 {
 | ||
|       › {
 | ||
|       ›     return new \Exception(''.$msg);
 | ||
|       › }
 | ||
|     }
 | ||
|     %s%eTests%eCaster%eExceptionCasterTest.php:40 { …}
 | ||
|     Symfony\Component\VarDumper\Tests\Caster\ExceptionCasterTest->testDefaultSettings() {}
 | ||
| %A
 | ||
| EODUMP;
 | ||
| 
 | ||
|         $this->assertDumpMatchesFormat($expectedDump, $e);
 | ||
|         $this->assertSame(array('foo'), $ref);
 | ||
|     }
 | ||
| 
 | ||
|     public function testSeek()
 | ||
|     {
 | ||
|         $e = $this->getTestException(2);
 | ||
| 
 | ||
|         $expectedDump = <<<'EODUMP'
 | ||
| {
 | ||
|   %s%eTests%eCaster%eExceptionCasterTest.php:28 {
 | ||
|     › {
 | ||
|     ›     return new \Exception(''.$msg);
 | ||
|     › }
 | ||
|   }
 | ||
|   %s%eTests%eCaster%eExceptionCasterTest.php:65 { …}
 | ||
|   Symfony\Component\VarDumper\Tests\Caster\ExceptionCasterTest->testSeek() {}
 | ||
| %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: 28
 | ||
|   trace: {
 | ||
|     %sExceptionCasterTest.php:28 {
 | ||
|       › {
 | ||
|       ›     return new \Exception(''.$msg);
 | ||
|       › }
 | ||
|     }
 | ||
|     %s%eTests%eCaster%eExceptionCasterTest.php:84 { …}
 | ||
|     Symfony\Component\VarDumper\Tests\Caster\ExceptionCasterTest->testNoArgs() {}
 | ||
| %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: 28
 | ||
|   trace: {
 | ||
|     %s%eTests%eCaster%eExceptionCasterTest.php:28
 | ||
|     %s%eTests%eCaster%eExceptionCasterTest.php:%d
 | ||
| %A
 | ||
| EODUMP;
 | ||
| 
 | ||
|         $this->assertDumpMatchesFormat($expectedDump, $e);
 | ||
|     }
 | ||
| 
 | ||
|     public function testHtmlDump()
 | ||
|     {
 | ||
|         if (ini_get('xdebug.file_link_format') || get_cfg_var('xdebug.file_link_format')) {
 | ||
|             $this->markTestSkipped('A custom file_link_format is defined.');
 | ||
|         }
 | ||
| 
 | ||
|         $e = $this->getTestException(1);
 | ||
|         ExceptionCaster::$srcContext = -1;
 | ||
| 
 | ||
|         $cloner = new VarCloner();
 | ||
|         $cloner->setMaxItems(1);
 | ||
|         $dumper = new HtmlDumper();
 | ||
|         $dumper->setDumpHeader('<foo></foo>');
 | ||
|         $dumper->setDumpBoundaries('<bar>', '</bar>');
 | ||
|         $dump = $dumper->dump($cloner->cloneVar($e)->withRefHandles(false), true);
 | ||
| 
 | ||
|         $expectedDump = <<<'EODUMP'
 | ||
| <foo></foo><bar><span class=sf-dump-note>Exception</span> {<samp>
 | ||
|   #<span class=sf-dump-protected title="Protected property">message</span>: "<span class=sf-dump-str>1</span>"
 | ||
|   #<span class=sf-dump-protected title="Protected property">code</span>: <span class=sf-dump-num>0</span>
 | ||
|   #<span class=sf-dump-protected title="Protected property">file</span>: "<span class=sf-dump-str title="%sExceptionCasterTest.php
 | ||
| %d characters"><span class="sf-dump-ellipsis sf-dump-ellipsis-path">%s%eVarDumper</span><span class=sf-dump-ellipsis>%e</span>Tests%eCaster%eExceptionCasterTest.php</span>"
 | ||
|   #<span class=sf-dump-protected title="Protected property">line</span>: <span class=sf-dump-num>28</span>
 | ||
|   <span class=sf-dump-meta>trace</span>: {<samp>
 | ||
|     <span class=sf-dump-meta title="%sExceptionCasterTest.php
 | ||
| Stack level %d."><span class="sf-dump-ellipsis sf-dump-ellipsis-path">%s%eVarDumper</span><span class=sf-dump-ellipsis>%e</span>Tests%eCaster%eExceptionCasterTest.php</span>:<span class=sf-dump-num>28</span>
 | ||
|      …%d
 | ||
|   </samp>}
 | ||
| </samp>}
 | ||
| </bar>
 | ||
| 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);
 | ||
|     }
 | ||
| 
 | ||
|     public function testExcludeVerbosity()
 | ||
|     {
 | ||
|         $e = $this->getTestException('foo');
 | ||
| 
 | ||
|         $expectedDump = <<<'EODUMP'
 | ||
| Exception {
 | ||
|   #message: "foo"
 | ||
|   #code: 0
 | ||
|   #file: "%sExceptionCasterTest.php"
 | ||
|   #line: 28
 | ||
| }
 | ||
| EODUMP;
 | ||
| 
 | ||
|         $this->assertDumpMatchesFormat($expectedDump, $e, Caster::EXCLUDE_VERBOSE);
 | ||
|     }
 | ||
| }
 | 
