FunctionsTest.php 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. <?php
  2. declare(strict_types=1);
  3. /**
  4. * CakePHP(tm) : Rapid Development Framework (https://cakephp.org)
  5. * Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org)
  6. *
  7. * Licensed under The MIT License
  8. * For full copyright and license information, please see the LICENSE.txt
  9. * Redistributions of files must retain the above copyright notice
  10. *
  11. * @copyright Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org)
  12. * @link https://cakephp.org CakePHP(tm) Project
  13. * @since 4.5.0
  14. * @license https://opensource.org/licenses/mit-license.php MIT License
  15. */
  16. namespace Cake\Test\TestCase\Error;
  17. use Cake\Error\Debugger;
  18. use Cake\TestSuite\TestCase;
  19. use function Cake\Core\pj;
  20. use function Cake\Core\pr;
  21. use function Cake\Error\debug;
  22. use function Cake\Error\stackTrace;
  23. /**
  24. * FunctionsTest class
  25. */
  26. class FunctionsTest extends TestCase
  27. {
  28. /**
  29. * test debug()
  30. */
  31. public function testDebug(): void
  32. {
  33. ob_start();
  34. $this->assertSame('this-is-a-test', debug('this-is-a-test', false));
  35. $result = ob_get_clean();
  36. $expectedText = <<<EXPECTED
  37. %s (line %d)
  38. ########## DEBUG ##########
  39. 'this-is-a-test'
  40. ###########################
  41. EXPECTED;
  42. $expected = sprintf($expectedText, Debugger::trimPath(__FILE__), __LINE__ - 9);
  43. $this->assertSame($expected, $result);
  44. ob_start();
  45. $value = '<div>this-is-a-test</div>';
  46. $this->assertSame($value, debug($value, true));
  47. $result = ob_get_clean();
  48. $this->assertStringContainsString('<div class="cake-debug-output', $result);
  49. $this->assertStringContainsString('this-is-a-test', $result);
  50. ob_start();
  51. debug('<div>this-is-a-test</div>', true, true);
  52. $result = ob_get_clean();
  53. $expected = <<<EXPECTED
  54. <div class="cake-debug-output cake-debug" style="direction:ltr">
  55. <span><strong>%s</strong> (line <strong>%d</strong>)</span>
  56. EXPECTED;
  57. $expected = sprintf($expected, Debugger::trimPath(__FILE__), __LINE__ - 6);
  58. $this->assertStringContainsString($expected, $result);
  59. ob_start();
  60. debug('<div>this-is-a-test</div>', true, false);
  61. $result = ob_get_clean();
  62. $this->assertStringNotContainsString('(line', $result);
  63. }
  64. /**
  65. * test pr()
  66. */
  67. public function testPr(): void
  68. {
  69. ob_start();
  70. $this->assertTrue(pr(true));
  71. $result = ob_get_clean();
  72. $expected = "\n1\n\n";
  73. $this->assertSame($expected, $result);
  74. ob_start();
  75. $this->assertFalse(pr(false));
  76. $result = ob_get_clean();
  77. $expected = "\n\n\n";
  78. $this->assertSame($expected, $result);
  79. ob_start();
  80. $this->assertNull(pr(null));
  81. $result = ob_get_clean();
  82. $expected = "\n\n\n";
  83. $this->assertSame($expected, $result);
  84. ob_start();
  85. $this->assertSame(123, pr(123));
  86. $result = ob_get_clean();
  87. $expected = "\n123\n\n";
  88. $this->assertSame($expected, $result);
  89. ob_start();
  90. pr('123');
  91. $result = ob_get_clean();
  92. $expected = "\n123\n\n";
  93. $this->assertSame($expected, $result);
  94. ob_start();
  95. pr('this is a test');
  96. $result = ob_get_clean();
  97. $expected = "\nthis is a test\n\n";
  98. $this->assertSame($expected, $result);
  99. ob_start();
  100. pr(['this' => 'is', 'a' => 'test', 123 => 456]);
  101. $result = ob_get_clean();
  102. $expected = "\nArray\n(\n [this] => is\n [a] => test\n [123] => 456\n)\n\n";
  103. $this->assertSame($expected, $result);
  104. }
  105. /**
  106. * test pj()
  107. */
  108. public function testPj(): void
  109. {
  110. ob_start();
  111. $this->assertTrue(pj(true));
  112. $result = ob_get_clean();
  113. $expected = "\ntrue\n\n";
  114. $this->assertSame($expected, $result);
  115. ob_start();
  116. $this->assertFalse(pj(false));
  117. $result = ob_get_clean();
  118. $expected = "\nfalse\n\n";
  119. $this->assertSame($expected, $result);
  120. ob_start();
  121. $this->assertNull(pj(null));
  122. $result = ob_get_clean();
  123. $expected = "\nnull\n\n";
  124. $this->assertSame($expected, $result);
  125. ob_start();
  126. $this->assertSame(123, pj(123));
  127. $result = ob_get_clean();
  128. $expected = "\n123\n\n";
  129. $this->assertSame($expected, $result);
  130. ob_start();
  131. pj('123');
  132. $result = ob_get_clean();
  133. $expected = "\n\"123\"\n\n";
  134. $this->assertSame($expected, $result);
  135. ob_start();
  136. pj('this is a test');
  137. $result = ob_get_clean();
  138. $expected = "\n\"this is a test\"\n\n";
  139. $this->assertSame($expected, $result);
  140. ob_start();
  141. $value = ['this' => 'is', 'a' => 'test', 123 => 456];
  142. $this->assertSame($value, pj($value));
  143. $result = ob_get_clean();
  144. $expected = "\n{\n \"this\": \"is\",\n \"a\": \"test\",\n \"123\": 456\n}\n\n";
  145. $this->assertSame($expected, $result);
  146. }
  147. /**
  148. * Tests that the stackTrace() method is a shortcut for Debugger::trace()
  149. */
  150. public function testStackTrace(): void
  151. {
  152. ob_start();
  153. // phpcs:ignore
  154. stackTrace(); $expected = Debugger::trace();
  155. $result = ob_get_clean();
  156. $this->assertSame($expected, $result);
  157. $opts = ['args' => true];
  158. ob_start();
  159. // phpcs:ignore
  160. stackTrace($opts); $expected = Debugger::trace($opts);
  161. $result = ob_get_clean();
  162. $this->assertSame($expected, $result);
  163. $opts = ['format' => 'array'];
  164. $trace = Debugger::trace($opts);
  165. $this->assertEmpty(array_column($trace, 'args'));
  166. }
  167. }