StreamLoggerTest.php 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. <?php
  2. /*
  3. * This file is part of Mustache.php.
  4. *
  5. * (c) 2010-2016 Justin Hileman
  6. *
  7. * For the full copyright and license information, please view the LICENSE
  8. * file that was distributed with this source code.
  9. */
  10. /**
  11. * @group unit
  12. */
  13. class Mustache_Test_Logger_StreamLoggerTest extends PHPUnit_Framework_TestCase
  14. {
  15. /**
  16. * @dataProvider acceptsStreamData
  17. */
  18. public function testAcceptsStream($name, $stream)
  19. {
  20. $logger = new Mustache_Logger_StreamLogger($stream);
  21. $logger->log(Mustache_Logger::CRITICAL, 'message');
  22. $this->assertEquals("CRITICAL: message\n", file_get_contents($name));
  23. }
  24. public function acceptsStreamData()
  25. {
  26. $one = tempnam(sys_get_temp_dir(), 'mustache-test');
  27. $two = tempnam(sys_get_temp_dir(), 'mustache-test');
  28. return array(
  29. array($one, $one),
  30. array($two, fopen($two, 'a')),
  31. );
  32. }
  33. /**
  34. * @expectedException Mustache_Exception_LogicException
  35. */
  36. public function testPrematurelyClosedStreamThrowsException()
  37. {
  38. $stream = tmpfile();
  39. $logger = new Mustache_Logger_StreamLogger($stream);
  40. fclose($stream);
  41. $logger->log(Mustache_Logger::CRITICAL, 'message');
  42. }
  43. /**
  44. * @dataProvider getLevels
  45. */
  46. public function testLoggingThresholds($logLevel, $level, $shouldLog)
  47. {
  48. $stream = tmpfile();
  49. $logger = new Mustache_Logger_StreamLogger($stream, $logLevel);
  50. $logger->log($level, 'logged');
  51. rewind($stream);
  52. $result = fread($stream, 1024);
  53. if ($shouldLog) {
  54. $this->assertContains('logged', $result);
  55. } else {
  56. $this->assertEmpty($result);
  57. }
  58. }
  59. public function getLevels()
  60. {
  61. // $logLevel, $level, $shouldLog
  62. return array(
  63. // identities
  64. array(Mustache_Logger::EMERGENCY, Mustache_Logger::EMERGENCY, true),
  65. array(Mustache_Logger::ALERT, Mustache_Logger::ALERT, true),
  66. array(Mustache_Logger::CRITICAL, Mustache_Logger::CRITICAL, true),
  67. array(Mustache_Logger::ERROR, Mustache_Logger::ERROR, true),
  68. array(Mustache_Logger::WARNING, Mustache_Logger::WARNING, true),
  69. array(Mustache_Logger::NOTICE, Mustache_Logger::NOTICE, true),
  70. array(Mustache_Logger::INFO, Mustache_Logger::INFO, true),
  71. array(Mustache_Logger::DEBUG, Mustache_Logger::DEBUG, true),
  72. // one above
  73. array(Mustache_Logger::ALERT, Mustache_Logger::EMERGENCY, true),
  74. array(Mustache_Logger::CRITICAL, Mustache_Logger::ALERT, true),
  75. array(Mustache_Logger::ERROR, Mustache_Logger::CRITICAL, true),
  76. array(Mustache_Logger::WARNING, Mustache_Logger::ERROR, true),
  77. array(Mustache_Logger::NOTICE, Mustache_Logger::WARNING, true),
  78. array(Mustache_Logger::INFO, Mustache_Logger::NOTICE, true),
  79. array(Mustache_Logger::DEBUG, Mustache_Logger::INFO, true),
  80. // one below
  81. array(Mustache_Logger::EMERGENCY, Mustache_Logger::ALERT, false),
  82. array(Mustache_Logger::ALERT, Mustache_Logger::CRITICAL, false),
  83. array(Mustache_Logger::CRITICAL, Mustache_Logger::ERROR, false),
  84. array(Mustache_Logger::ERROR, Mustache_Logger::WARNING, false),
  85. array(Mustache_Logger::WARNING, Mustache_Logger::NOTICE, false),
  86. array(Mustache_Logger::NOTICE, Mustache_Logger::INFO, false),
  87. array(Mustache_Logger::INFO, Mustache_Logger::DEBUG, false),
  88. );
  89. }
  90. /**
  91. * @dataProvider getLogMessages
  92. */
  93. public function testLogging($level, $message, $context, $expected)
  94. {
  95. $stream = tmpfile();
  96. $logger = new Mustache_Logger_StreamLogger($stream, Mustache_Logger::DEBUG);
  97. $logger->log($level, $message, $context);
  98. rewind($stream);
  99. $result = fread($stream, 1024);
  100. $this->assertEquals($expected, $result);
  101. }
  102. public function getLogMessages()
  103. {
  104. // $level, $message, $context, $expected
  105. return array(
  106. array(Mustache_Logger::DEBUG, 'debug message', array(), "DEBUG: debug message\n"),
  107. array(Mustache_Logger::INFO, 'info message', array(), "INFO: info message\n"),
  108. array(Mustache_Logger::NOTICE, 'notice message', array(), "NOTICE: notice message\n"),
  109. array(Mustache_Logger::WARNING, 'warning message', array(), "WARNING: warning message\n"),
  110. array(Mustache_Logger::ERROR, 'error message', array(), "ERROR: error message\n"),
  111. array(Mustache_Logger::CRITICAL, 'critical message', array(), "CRITICAL: critical message\n"),
  112. array(Mustache_Logger::ALERT, 'alert message', array(), "ALERT: alert message\n"),
  113. array(Mustache_Logger::EMERGENCY, 'emergency message', array(), "EMERGENCY: emergency message\n"),
  114. // with context
  115. array(
  116. Mustache_Logger::ERROR,
  117. 'error message',
  118. array('name' => 'foo', 'number' => 42),
  119. "ERROR: error message\n",
  120. ),
  121. // with interpolation
  122. array(
  123. Mustache_Logger::ERROR,
  124. 'error {name}-{number}',
  125. array('name' => 'foo', 'number' => 42),
  126. "ERROR: error foo-42\n",
  127. ),
  128. // with iterpolation false positive
  129. array(
  130. Mustache_Logger::ERROR,
  131. 'error {nothing}',
  132. array('name' => 'foo', 'number' => 42),
  133. "ERROR: error {nothing}\n",
  134. ),
  135. // with interpolation injection
  136. array(
  137. Mustache_Logger::ERROR,
  138. '{foo}',
  139. array('foo' => '{bar}', 'bar' => 'FAIL'),
  140. "ERROR: {bar}\n",
  141. ),
  142. );
  143. }
  144. public function testChangeLoggingLevels()
  145. {
  146. $stream = tmpfile();
  147. $logger = new Mustache_Logger_StreamLogger($stream);
  148. $logger->setLevel(Mustache_Logger::ERROR);
  149. $this->assertEquals(Mustache_Logger::ERROR, $logger->getLevel());
  150. $logger->log(Mustache_Logger::WARNING, 'ignore this');
  151. $logger->setLevel(Mustache_Logger::INFO);
  152. $this->assertEquals(Mustache_Logger::INFO, $logger->getLevel());
  153. $logger->log(Mustache_Logger::WARNING, 'log this');
  154. $logger->setLevel(Mustache_Logger::CRITICAL);
  155. $this->assertEquals(Mustache_Logger::CRITICAL, $logger->getLevel());
  156. $logger->log(Mustache_Logger::ERROR, 'ignore this');
  157. rewind($stream);
  158. $result = fread($stream, 1024);
  159. $this->assertEquals("WARNING: log this\n", $result);
  160. }
  161. /**
  162. * @expectedException Mustache_Exception_InvalidArgumentException
  163. */
  164. public function testThrowsInvalidArgumentExceptionWhenSettingUnknownLevels()
  165. {
  166. $logger = new Mustache_Logger_StreamLogger(tmpfile());
  167. $logger->setLevel('bacon');
  168. }
  169. /**
  170. * @expectedException Mustache_Exception_InvalidArgumentException
  171. */
  172. public function testThrowsInvalidArgumentExceptionWhenLoggingUnknownLevels()
  173. {
  174. $logger = new Mustache_Logger_StreamLogger(tmpfile());
  175. $logger->log('bacon', 'CODE BACON ERROR!');
  176. }
  177. }