/tests/Whoops/Handler/PlainTextHandlerTest.php

https://gitlab.com/lighty/whoops · PHP · 354 lines · 218 code · 54 blank · 82 comment · 0 complexity · 2fa9941b96e327bbbb03679905f6a553 MD5 · raw file

  1. <?php
  2. /**
  3. * Whoops - php errors for cool kids
  4. * @author Filipe Dobreira <http://github.com/filp>
  5. */
  6. namespace Whoops\Handler;
  7. use RuntimeException;
  8. use StdClass;
  9. use Whoops\TestCase;
  10. class PlainTextHandlerTest extends TestCase
  11. {
  12. /**
  13. * @throws InvalidArgumentException If argument is not null or a LoggerInterface
  14. * @param Psr\Log\LoggerInterface|null $logger
  15. * @return Whoops\Handler\PlainTextHandler
  16. */
  17. private function getHandler($logger = null)
  18. {
  19. return new PlainTextHandler($logger);
  20. }
  21. /**
  22. * @return RuntimeException
  23. */
  24. public function getException($message = 'test message')
  25. {
  26. return new RuntimeException($message);
  27. }
  28. /**
  29. * @param bool $withTrace
  30. * @param bool $withTraceArgs
  31. * @param bool $loggerOnly
  32. * @return array
  33. */
  34. private function getPlainTextFromHandler(
  35. $withTrace = false,
  36. $withTraceArgs = false,
  37. $traceFunctionArgsOutputLimit = 1024,
  38. $loggerOnly = false
  39. ) {
  40. $handler = $this->getHandler();
  41. $handler->addTraceToOutput($withTrace);
  42. $handler->addTraceFunctionArgsToOutput($withTraceArgs);
  43. $handler->setTraceFunctionArgsOutputLimit($traceFunctionArgsOutputLimit);
  44. $handler->loggerOnly($loggerOnly);
  45. $run = $this->getRunInstance();
  46. $run->pushHandler($handler);
  47. $run->register();
  48. $exception = $this->getException();
  49. ob_start();
  50. $run->handleException($exception);
  51. return ob_get_clean();
  52. }
  53. /**
  54. * @covers Whoops\Handler\PlainTextHandler::__construct
  55. * @covers Whoops\Handler\PlainTextHandler::setLogger
  56. * @expectedException InvalidArgumentException
  57. */
  58. public function testConstructor()
  59. {
  60. $logger = new StdClass(); // guaranteed to be invalid!
  61. $this->getHandler($logger);
  62. }
  63. /**
  64. * @covers Whoops\Handler\PlainTextHandler::setLogger
  65. * @expectedException InvalidArgumentException
  66. */
  67. public function testSetLogger()
  68. {
  69. $logger = new StdClass(); // guaranteed to be invalid!
  70. $this->getHandler()->setLogger($logger);
  71. }
  72. /**
  73. * @covers Whoops\Handler\PlainTextHandler::addTraceToOutput
  74. */
  75. public function testAddTraceToOutput()
  76. {
  77. $handler = $this->getHandler();
  78. $handler->addTraceToOutput(true);
  79. $this->assertEquals(true, $handler->addTraceToOutput());
  80. $handler->addTraceToOutput(false);
  81. $this->assertEquals(false, $handler->addTraceToOutput());
  82. $handler->addTraceToOutput(null);
  83. $this->assertEquals(null, $handler->addTraceToOutput());
  84. $handler->addTraceToOutput(1);
  85. $this->assertEquals(true, $handler->addTraceToOutput());
  86. $handler->addTraceToOutput(0);
  87. $this->assertEquals(false, $handler->addTraceToOutput());
  88. $handler->addTraceToOutput('');
  89. $this->assertEquals(false, $handler->addTraceToOutput());
  90. $handler->addTraceToOutput('false');
  91. $this->assertEquals(true, $handler->addTraceToOutput());
  92. }
  93. /**
  94. * @covers Whoops\Handler\PlainTextHandler::addTraceFunctionArgsToOutput
  95. */
  96. public function testAddTraceFunctionArgsToOutput()
  97. {
  98. $handler = $this->getHandler();
  99. $handler->addTraceFunctionArgsToOutput(true);
  100. $this->assertEquals(true, $handler->addTraceFunctionArgsToOutput());
  101. $handler->addTraceFunctionArgsToOutput(false);
  102. $this->assertEquals(false, $handler->addTraceFunctionArgsToOutput());
  103. $handler->addTraceFunctionArgsToOutput(null);
  104. $this->assertEquals(null, $handler->addTraceFunctionArgsToOutput());
  105. $handler->addTraceFunctionArgsToOutput(1);
  106. $this->assertEquals(1, $handler->addTraceFunctionArgsToOutput());
  107. $handler->addTraceFunctionArgsToOutput(0);
  108. $this->assertEquals(0, $handler->addTraceFunctionArgsToOutput());
  109. $handler->addTraceFunctionArgsToOutput('');
  110. $this->assertEquals(false, $handler->addTraceFunctionArgsToOutput());
  111. $handler->addTraceFunctionArgsToOutput('false');
  112. $this->assertEquals(true, $handler->addTraceFunctionArgsToOutput());
  113. }
  114. /**
  115. * @covers Whoops\Handler\PlainTextHandler::setTraceFunctionArgsOutputLimit
  116. * @covers Whoops\Handler\PlainTextHandler::getTraceFunctionArgsOutputLimit
  117. */
  118. public function testGetSetTraceFunctionArgsOutputLimit()
  119. {
  120. $addTraceFunctionArgsToOutput = 10240;
  121. $handler = $this->getHandler();
  122. $handler->setTraceFunctionArgsOutputLimit($addTraceFunctionArgsToOutput);
  123. $this->assertEquals($addTraceFunctionArgsToOutput, $handler->getTraceFunctionArgsOutputLimit());
  124. $handler->setTraceFunctionArgsOutputLimit('1024kB');
  125. $this->assertEquals(1024, $handler->getTraceFunctionArgsOutputLimit());
  126. $handler->setTraceFunctionArgsOutputLimit('true');
  127. $this->assertEquals(0, $handler->getTraceFunctionArgsOutputLimit());
  128. }
  129. /**
  130. * @covers Whoops\Handler\PlainTextHandler::loggerOnly
  131. */
  132. public function testLoggerOnly()
  133. {
  134. $handler = $this->getHandler();
  135. $handler->loggerOnly(true);
  136. $this->assertEquals(true, $handler->loggerOnly());
  137. $handler->loggerOnly(false);
  138. $this->assertEquals(false, $handler->loggerOnly());
  139. $handler->loggerOnly(null);
  140. $this->assertEquals(null, $handler->loggerOnly());
  141. $handler->loggerOnly(1);
  142. $this->assertEquals(true, $handler->loggerOnly());
  143. $handler->loggerOnly(0);
  144. $this->assertEquals(false, $handler->loggerOnly());
  145. $handler->loggerOnly('');
  146. $this->assertEquals(false, $handler->loggerOnly());
  147. $handler->loggerOnly('false');
  148. $this->assertEquals(true, $handler->loggerOnly());
  149. }
  150. /**
  151. * @covers Whoops\Handler\PlainTextHandler::addTraceToOutput
  152. * @covers Whoops\Handler\PlainTextHandler::handle
  153. */
  154. public function testReturnsWithoutFramesOutput()
  155. {
  156. $text = $this->getPlainTextFromHandler(
  157. $withTrace = false,
  158. $withTraceArgs = true,
  159. $traceFunctionArgsOutputLimit = 1024,
  160. $loggerOnly = false
  161. );
  162. // Check that the response has the correct value:
  163. // Check that the trace is NOT returned:
  164. $this->assertEquals(
  165. sprintf(
  166. "%s: %s in file %s on line %d\n",
  167. get_class($this->getException()),
  168. 'test message',
  169. __FILE__,
  170. 30
  171. ),
  172. $text
  173. );
  174. }
  175. /**
  176. * @covers Whoops\Handler\PlainTextHandler::addTraceToOutput
  177. * @covers Whoops\Handler\PlainTextHandler::getTraceOutput
  178. * @covers Whoops\Handler\PlainTextHandler::canOutput
  179. * @covers Whoops\Handler\PlainTextHandler::handle
  180. */
  181. public function testReturnsWithFramesOutput()
  182. {
  183. $text = $this->getPlainTextFromHandler(
  184. $withTrace = true,
  185. $withTraceArgs = false,
  186. $traceFunctionArgsOutputLimit = 1024,
  187. $loggerOnly = false
  188. );
  189. // Check that the response has the correct value:
  190. $this->assertContains('Stack trace:', $text);
  191. // Check that the trace is returned:
  192. $this->assertContains(
  193. sprintf(
  194. '%3d. %s->%s() %s:%d',
  195. 2,
  196. 'Whoops\Handler\PlainTextHandlerTest',
  197. 'getException',
  198. __FILE__,
  199. 55
  200. ),
  201. $text
  202. );
  203. }
  204. /**
  205. * @covers Whoops\Handler\PlainTextHandler::addTraceToOutput
  206. * @covers Whoops\Handler\PlainTextHandler::addTraceFunctionArgsToOutput
  207. * @covers Whoops\Handler\PlainTextHandler::getTraceOutput
  208. * @covers Whoops\Handler\PlainTextHandler::getFrameArgsOutput
  209. * @covers Whoops\Handler\PlainTextHandler::canOutput
  210. * @covers Whoops\Handler\PlainTextHandler::handle
  211. */
  212. public function testReturnsWithFramesAndArgsOutput()
  213. {
  214. $text = $this->getPlainTextFromHandler(
  215. $withTrace = true,
  216. $withTraceArgs = true,
  217. $traceFunctionArgsOutputLimit = 2048,
  218. $loggerOnly = false
  219. );
  220. $lines = explode("\n", $text);
  221. // Check that the trace is returned with all arguments:
  222. $this->assertGreaterThan(60, count($lines));
  223. // Check that the response has the correct value:
  224. $this->assertContains('Stack trace:', $text);
  225. // Check that the trace is returned:
  226. $this->assertContains(
  227. sprintf(
  228. '%3d. %s->%s() %s:%d',
  229. 2,
  230. 'Whoops\Handler\PlainTextHandlerTest',
  231. 'getException',
  232. __FILE__,
  233. 55
  234. ),
  235. $text
  236. );
  237. // Check that the trace arguments are returned:
  238. $this->assertContains(sprintf(
  239. '%s string(%d) "%s"',
  240. PlainTextHandler::VAR_DUMP_PREFIX,
  241. strlen('test message'),
  242. 'test message'
  243. ), $text
  244. );
  245. }
  246. /**
  247. * @covers Whoops\Handler\PlainTextHandler::addTraceToOutput
  248. * @covers Whoops\Handler\PlainTextHandler::addTraceFunctionArgsToOutput
  249. * @covers Whoops\Handler\PlainTextHandler::getTraceOutput
  250. * @covers Whoops\Handler\PlainTextHandler::getFrameArgsOutput
  251. * @covers Whoops\Handler\PlainTextHandler::canOutput
  252. * @covers Whoops\Handler\PlainTextHandler::handle
  253. */
  254. public function testReturnsWithFramesAndLimitedArgsOutput()
  255. {
  256. $text = $this->getPlainTextFromHandler(
  257. $withTrace = true,
  258. $withTraceArgs = 3,
  259. $traceFunctionArgsOutputLimit = 1024,
  260. $loggerOnly = false
  261. );
  262. // Check that the response has the correct value:
  263. $this->assertContains('Stack trace:', $text);
  264. // Check that the trace is returned:
  265. $this->assertContains(
  266. sprintf(
  267. '%3d. %s->%s() %s:%d',
  268. 2,
  269. 'Whoops\Handler\PlainTextHandlerTest',
  270. 'getException',
  271. __FILE__,
  272. 55
  273. ),
  274. $text
  275. );
  276. // Check that the trace arguments are returned:
  277. $this->assertContains(sprintf(
  278. '%s string(%d) "%s"',
  279. PlainTextHandler::VAR_DUMP_PREFIX,
  280. strlen('test message'),
  281. 'test message'
  282. ), $text
  283. );
  284. }
  285. /**
  286. * @covers Whoops\Handler\PlainTextHandler::loggerOnly
  287. * @covers Whoops\Handler\PlainTextHandler::handle
  288. */
  289. public function testReturnsWithLoggerOnlyOutput()
  290. {
  291. $text = $this->getPlainTextFromHandler(
  292. $withTrace = true,
  293. $withTraceArgs = true,
  294. $traceFunctionArgsOutputLimit = 1024,
  295. $loggerOnly = true
  296. );
  297. // Check that the response has the correct value:
  298. $this->assertEquals('', $text);
  299. }
  300. }