test_logger.php 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. <?php
  2. require_once 'logger.php';
  3. use WebBasics\Logger;
  4. define('NAME', 'Testlogger');
  5. define('FORMAT', '%(level): %(message)');
  6. define('LOGDIR', 'build/logs/');
  7. define('LOGFILE', 'build/temp.log');
  8. class LoggerTest extends PHPUnit_Extensions_OutputTestCase {
  9. function setUp() {
  10. $this->logger = new Logger();
  11. $this->logger->set_property('name', NAME);
  12. $this->logger->set_format(FORMAT);
  13. is_dir('build') || mkdir('build');
  14. }
  15. function assert_dumps($expected) {
  16. $this->assertEquals($this->logger->dumps(), $expected);
  17. }
  18. function test_set_directory() {
  19. $this->logger->set_directory('logs');
  20. $this->assertAttributeEquals('logs/', 'log_directory', $this->logger);
  21. $this->logger->set_directory('logs/');
  22. $this->assertAttributeEquals('logs/', 'log_directory', $this->logger);
  23. }
  24. function test_set_format() {
  25. $this->logger->set_format('foo');
  26. $this->assertAttributeEquals('foo', 'format', $this->logger);
  27. }
  28. function test_set_dump_format_success() {
  29. $this->logger->set_dump_format('html');
  30. $this->assertAttributeEquals('html', 'dump_format', $this->logger);
  31. }
  32. /**
  33. * @expectedException InvalidArgumentException
  34. */
  35. function test_set_dump_format_failure() {
  36. $this->logger->set_dump_format('foo');
  37. }
  38. function test_get_format() {
  39. $this->assertEquals($this->logger->get_format(), FORMAT);
  40. }
  41. function test_get_level() {
  42. $this->assertEquals($this->logger->get_level(), Logger::WARNING);
  43. $this->assertEquals($this->logger->get_level_name(), 'WARNING');
  44. }
  45. /**
  46. * @depends test_get_level
  47. */
  48. function test_set_level() {
  49. $this->logger->set_level('info');
  50. $this->assertEquals($this->logger->get_level(), Logger::INFO);
  51. $this->logger->set_level('DEBUG');
  52. $this->assertEquals($this->logger->get_level(), Logger::DEBUG);
  53. $this->logger->set_level('WaRnInG');
  54. $this->assertEquals($this->logger->get_level(), Logger::WARNING);
  55. $this->logger->set_level(Logger::ERROR);
  56. $this->assertEquals($this->logger->get_level(), Logger::ERROR);
  57. }
  58. function test_format() {
  59. $this->logger->error('test message');
  60. $this->assert_dumps('ERROR: test message');
  61. }
  62. function test_set_property() {
  63. $this->logger->set_property('name', 'Logger');
  64. $this->assertEquals($this->logger->get_formatted_property('name'), 'Logger');
  65. }
  66. /**
  67. * @depends test_format
  68. */
  69. function test_clear() {
  70. $this->logger->warning('test message');
  71. $this->logger->clear();
  72. $this->assert_dumps('');
  73. }
  74. /**
  75. * @depends test_set_level
  76. * @depends test_clear
  77. */
  78. function test_process_level() {
  79. $this->logger->info('test message');
  80. $this->assert_dumps('');
  81. $this->logger->warning('test message');
  82. $this->assert_dumps('WARNING: test message');
  83. $this->logger->critical('test message');
  84. $this->assert_dumps("WARNING: test message\nCRITICAL: test message");
  85. $this->logger->clear();
  86. $this->logger->set_level('debug');
  87. $this->logger->debug('test message');
  88. $this->assert_dumps('DEBUG: test message');
  89. }
  90. function test_get_formatted_property() {
  91. $this->assertEquals($this->logger->get_formatted_property('name'), NAME);
  92. $this->assertEquals($this->logger->get_formatted_property('loglevel'), 'WARNING');
  93. $this->assertRegExp('/^\d{2}-\d{2}-\d{4}$/',
  94. $this->logger->get_formatted_property('date'));
  95. $this->assertRegExp('/^\d{2}-\d{2}-\d{4} \d{2}:\d{2}:\d{2}$/',
  96. $this->logger->get_formatted_property('datetime'));
  97. $this->assertRegExp('/^\d{2}:\d{2}:\d{2}$/',
  98. $this->logger->get_formatted_property('time'));
  99. $this->setExpectedException('\InvalidArgumentException');
  100. $this->logger->get_formatted_property('foo');
  101. }
  102. function test_dumps_property_format() {
  103. $this->logger->warning('test message');
  104. $this->logger->set_format('%(name): %(level): %(message)');
  105. $this->assert_dumps(NAME.': WARNING: test message');
  106. }
  107. /**
  108. * @depends test_process_level
  109. */
  110. function test_dump_plain() {
  111. $this->logger->warning('test message');
  112. $this->expectOutputString('WARNING: test message');
  113. $this->logger->dump();
  114. }
  115. /**
  116. * @depends test_process_level
  117. */
  118. function test_dump_html() {
  119. $this->logger->warning('test message');
  120. $this->logger->set_dump_format('html');
  121. $this->expectOutputString('<strong>Log:</strong><br /><pre>WARNING: test message</pre>');
  122. $this->logger->dump();
  123. }
  124. function test_save() {
  125. $this->logger->warning('test message');
  126. $this->logger->save(LOGFILE);
  127. $this->assertStringEqualsFile(LOGFILE, 'WARNING: test message');
  128. $this->logger->warning('another test message');
  129. $this->logger->save(LOGFILE);
  130. $this->assertStringEqualsFile(LOGFILE, "WARNING: test message\nWARNING: another test message");
  131. unlink(LOGFILE);
  132. }
  133. function find_logfile() {
  134. $files = scandir(LOGDIR);
  135. $this->assertEquals(3, count($files));
  136. return $files[2];
  137. }
  138. /**
  139. * @depends test_save
  140. */
  141. function test_dump_file_regular() {
  142. $this->logger->set_directory(LOGDIR);
  143. $this->logger->set_dump_format('file');
  144. $this->logger->warning('test message');
  145. $this->logger->dump();
  146. $filename = $this->find_logfile();
  147. $this->assertStringEqualsFile(LOGDIR . $filename, 'WARNING: test message');
  148. unlink(LOGDIR . $filename);
  149. $this->assertRegExp('/^log_\d{2}-\d{2}-\d{4}_\d{2}-\d{2}-\d{2}.log$/', $filename);
  150. }
  151. function test_handle_exception() {
  152. $this->logger->set_dump_format('none');
  153. $this->logger->handle_exception(new RuntimeException('test message'));
  154. $this->assertNotEquals($this->logger->dumps(), '');
  155. }
  156. }
  157. ?>