DumpDataCollectorTest.php 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. <?php
  2. /*
  3. * This file is part of the Symfony package.
  4. *
  5. * (c) Fabien Potencier <fabien@symfony.com>
  6. *
  7. * For the full copyright and license information, please view the LICENSE
  8. * file that was distributed with this source code.
  9. */
  10. namespace Symfony\Component\HttpKernel\Tests\DataCollector;
  11. use PHPUnit\Framework\TestCase;
  12. use Symfony\Component\HttpFoundation\Request;
  13. use Symfony\Component\HttpFoundation\RequestStack;
  14. use Symfony\Component\HttpFoundation\Response;
  15. use Symfony\Component\HttpKernel\DataCollector\DumpDataCollector;
  16. use Symfony\Component\HttpKernel\Debug\FileLinkFormatter;
  17. use Symfony\Component\VarDumper\Cloner\Data;
  18. use Symfony\Component\VarDumper\Dumper\CliDumper;
  19. use Symfony\Component\VarDumper\Server\Connection;
  20. /**
  21. * @author Nicolas Grekas <p@tchwork.com>
  22. */
  23. class DumpDataCollectorTest extends TestCase
  24. {
  25. public function testDump()
  26. {
  27. $data = new Data([[123]]);
  28. $collector = new DumpDataCollector(null, new FileLinkFormatter([]));
  29. $this->assertSame('dump', $collector->getName());
  30. $collector->dump($data);
  31. $line = __LINE__ - 1;
  32. $this->assertSame(1, $collector->getDumpsCount());
  33. $dump = $collector->getDumps('html');
  34. $this->assertArrayHasKey('data', $dump[0]);
  35. $dump[0]['data'] = preg_replace('/^.*?<pre/', '<pre', $dump[0]['data']);
  36. $dump[0]['data'] = preg_replace('/sf-dump-\d+/', 'sf-dump', $dump[0]['data']);
  37. $xDump = [
  38. [
  39. 'data' => "<pre class=sf-dump id=sf-dump data-indent-pad=\" \"><span class=sf-dump-num>123</span>\n</pre><script>Sfdump(\"sf-dump\")</script>\n",
  40. 'name' => 'DumpDataCollectorTest.php',
  41. 'file' => __FILE__,
  42. 'line' => $line,
  43. 'fileExcerpt' => false,
  44. ],
  45. ];
  46. $this->assertEquals($xDump, $dump);
  47. $this->assertStringMatchesFormat('%a;a:%d:{i:0;a:5:{s:4:"data";%c:39:"Symfony\Component\VarDumper\Cloner\Data":%a', serialize($collector));
  48. $this->assertSame(0, $collector->getDumpsCount());
  49. $this->assertSame("O:60:\"Symfony\Component\HttpKernel\DataCollector\DumpDataCollector\":1:{s:7:\"\0*\0data\";a:2:{i:0;b:0;i:1;s:5:\"UTF-8\";}}", serialize($collector));
  50. }
  51. public function testDumpWithServerConnection()
  52. {
  53. $data = new Data([[123]]);
  54. // Server is up, server dumper is used
  55. $serverDumper = $this->createMock(Connection::class);
  56. $serverDumper->expects($this->once())->method('write')->willReturn(true);
  57. $collector = new DumpDataCollector(null, null, null, null, $serverDumper);
  58. $collector->dump($data);
  59. // Collect doesn't re-trigger dump
  60. ob_start();
  61. $collector->collect(new Request(), new Response());
  62. $this->assertEmpty(ob_get_clean());
  63. $this->assertStringMatchesFormat('%a;a:%d:{i:0;a:5:{s:4:"data";%c:39:"Symfony\Component\VarDumper\Cloner\Data":%a', serialize($collector));
  64. }
  65. public function testCollectDefault()
  66. {
  67. $data = new Data([[123]]);
  68. $collector = new DumpDataCollector();
  69. $collector->dump($data);
  70. $line = __LINE__ - 1;
  71. ob_start();
  72. $collector->collect(new Request(), new Response());
  73. $output = preg_replace("/\033\[[^m]*m/", '', ob_get_clean());
  74. $this->assertSame("DumpDataCollectorTest.php on line {$line}:\n123\n", $output);
  75. $this->assertSame(1, $collector->getDumpsCount());
  76. serialize($collector);
  77. }
  78. public function testCollectHtml()
  79. {
  80. $data = new Data([[123]]);
  81. $collector = new DumpDataCollector(null, 'test://%f:%l');
  82. $collector->dump($data);
  83. $line = __LINE__ - 1;
  84. $file = __FILE__;
  85. $xOutput = <<<EOTXT
  86. <pre class=sf-dump id=sf-dump data-indent-pad=" "><a href="test://{$file}:{$line}" title="{$file}"><span class=sf-dump-meta>DumpDataCollectorTest.php</span></a> on line <span class=sf-dump-meta>{$line}</span>:
  87. <span class=sf-dump-num>123</span>
  88. </pre>
  89. EOTXT;
  90. ob_start();
  91. $response = new Response();
  92. $response->headers->set('Content-Type', 'text/html');
  93. $collector->collect(new Request(), $response);
  94. $output = ob_get_clean();
  95. $output = preg_replace('#<(script|style).*?</\1>#s', '', $output);
  96. $output = preg_replace('/sf-dump-\d+/', 'sf-dump', $output);
  97. $this->assertSame($xOutput, trim($output));
  98. $this->assertSame(1, $collector->getDumpsCount());
  99. serialize($collector);
  100. }
  101. public function testFlush()
  102. {
  103. $data = new Data([[456]]);
  104. $collector = new DumpDataCollector();
  105. $collector->dump($data);
  106. $line = __LINE__ - 1;
  107. ob_start();
  108. $collector->__destruct();
  109. $output = preg_replace("/\033\[[^m]*m/", '', ob_get_clean());
  110. $this->assertSame("DumpDataCollectorTest.php on line {$line}:\n456\n", $output);
  111. }
  112. public function testFlushNothingWhenDataDumperIsProvided()
  113. {
  114. $data = new Data([[456]]);
  115. $dumper = new CliDumper('php://output');
  116. $collector = new DumpDataCollector(null, null, null, null, $dumper);
  117. ob_start();
  118. $collector->dump($data);
  119. $line = __LINE__ - 1;
  120. $output = preg_replace("/\033\[[^m]*m/", '', ob_get_clean());
  121. $this->assertSame("DumpDataCollectorTest.php on line {$line}:\n456\n", $output);
  122. ob_start();
  123. $collector->__destruct();
  124. $this->assertEmpty(ob_get_clean());
  125. }
  126. public function testNullContentTypeWithNoDebugEnv()
  127. {
  128. $request = new Request();
  129. $requestStack = new RequestStack();
  130. $requestStack->push($request);
  131. $response = new Response('<html><head></head><body></body></html>');
  132. $response->headers->set('Content-Type', null);
  133. $response->headers->set('X-Debug-Token', 'xxxxxxxx');
  134. $collector = new DumpDataCollector(null, null, null, $requestStack);
  135. $collector->collect($request, $response);
  136. ob_start();
  137. $collector->__destruct();
  138. $this->assertEmpty(ob_get_clean());
  139. }
  140. }