RegistryTest.php 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. <?php declare(strict_types=1);
  2. /*
  3. * This file is part of the Monolog package.
  4. *
  5. * (c) Jordi Boggiano <j.boggiano@seld.be>
  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 Monolog;
  11. use PHPUnit\Framework\Attributes\DataProvider;
  12. class RegistryTest extends \PHPUnit\Framework\TestCase
  13. {
  14. protected function setUp(): void
  15. {
  16. Registry::clear();
  17. }
  18. /**
  19. * @covers Monolog\Registry::hasLogger
  20. */
  21. #[DataProvider('hasLoggerProvider')]
  22. public function testHasLogger(array $loggersToAdd, array $loggersToCheck, array $expectedResult)
  23. {
  24. foreach ($loggersToAdd as $loggerToAdd) {
  25. Registry::addLogger($loggerToAdd);
  26. }
  27. foreach ($loggersToCheck as $index => $loggerToCheck) {
  28. $this->assertSame($expectedResult[$index], Registry::hasLogger($loggerToCheck));
  29. }
  30. }
  31. public static function hasLoggerProvider()
  32. {
  33. $logger1 = new Logger('test1');
  34. $logger2 = new Logger('test2');
  35. $logger3 = new Logger('test3');
  36. return [
  37. // only instances
  38. [
  39. [$logger1],
  40. [$logger1, $logger2],
  41. [true, false],
  42. ],
  43. // only names
  44. [
  45. [$logger1],
  46. ['test1', 'test2'],
  47. [true, false],
  48. ],
  49. // mixed case
  50. [
  51. [$logger1, $logger2],
  52. ['test1', $logger2, 'test3', $logger3],
  53. [true, true, false, false],
  54. ],
  55. ];
  56. }
  57. /**
  58. * @covers Monolog\Registry::clear
  59. */
  60. public function testClearClears()
  61. {
  62. Registry::addLogger(new Logger('test1'), 'log');
  63. Registry::clear();
  64. $this->expectException('\InvalidArgumentException');
  65. Registry::getInstance('log');
  66. }
  67. /**
  68. * @covers Monolog\Registry::addLogger
  69. * @covers Monolog\Registry::removeLogger
  70. */
  71. #[DataProvider('removedLoggerProvider')]
  72. public function testRemovesLogger($loggerToAdd, $remove)
  73. {
  74. Registry::addLogger($loggerToAdd);
  75. Registry::removeLogger($remove);
  76. $this->expectException('\InvalidArgumentException');
  77. Registry::getInstance($loggerToAdd->getName());
  78. }
  79. public static function removedLoggerProvider()
  80. {
  81. $logger1 = new Logger('test1');
  82. return [
  83. [$logger1, $logger1],
  84. [$logger1, 'test1'],
  85. ];
  86. }
  87. /**
  88. * @covers Monolog\Registry::addLogger
  89. * @covers Monolog\Registry::getInstance
  90. * @covers Monolog\Registry::__callStatic
  91. */
  92. public function testGetsSameLogger()
  93. {
  94. $logger1 = new Logger('test1');
  95. $logger2 = new Logger('test2');
  96. Registry::addLogger($logger1, 'test1');
  97. Registry::addLogger($logger2);
  98. $this->assertSame($logger1, Registry::getInstance('test1'));
  99. $this->assertSame($logger2, Registry::test2());
  100. }
  101. /**
  102. * @covers Monolog\Registry::getInstance
  103. */
  104. public function testFailsOnNonExistentLogger()
  105. {
  106. $this->expectException(\InvalidArgumentException::class);
  107. Registry::getInstance('test1');
  108. }
  109. /**
  110. * @covers Monolog\Registry::addLogger
  111. */
  112. public function testReplacesLogger()
  113. {
  114. $log1 = new Logger('test1');
  115. $log2 = new Logger('test2');
  116. Registry::addLogger($log1, 'log');
  117. Registry::addLogger($log2, 'log', true);
  118. $this->assertSame($log2, Registry::getInstance('log'));
  119. }
  120. /**
  121. * @covers Monolog\Registry::addLogger
  122. */
  123. public function testFailsOnUnspecifiedReplacement()
  124. {
  125. $log1 = new Logger('test1');
  126. $log2 = new Logger('test2');
  127. Registry::addLogger($log1, 'log');
  128. $this->expectException(\InvalidArgumentException::class);
  129. Registry::addLogger($log2, 'log');
  130. }
  131. }