Skip to content

Commit 8c996d9

Browse files
committed
updating monolog, adding some tests
1 parent f550595 commit 8c996d9

File tree

5 files changed

+168
-2
lines changed

5 files changed

+168
-2
lines changed

.phpunit.result.cache

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"version":1,"defects":{"SugiPHP\\Logger\\Tests\\LoggerTest::testAddHandler":7,"SugiPHP\\Logger\\Tests\\LoggerTest::testPushHandler":7,"SugiPHP\\Logger\\Tests\\LoggerTest::testPopHandler":7,"SugiPHP\\Logger\\Tests\\LoggerTest::testAddRecord":7,"SugiPHP\\Logger\\Tests\\LoggerTest::testFilteredLogging":7},"times":{"SugiPHP\\Logger\\Tests\\LoggerTest::testAddHandler":0.001,"SugiPHP\\Logger\\Tests\\LoggerTest::testPushHandler":0,"SugiPHP\\Logger\\Tests\\LoggerTest::testPopHandler":0,"SugiPHP\\Logger\\Tests\\LoggerTest::testAddRecord":0,"SugiPHP\\Logger\\Tests\\LoggerTest::testIsHandlingByFilterAll":0,"SugiPHP\\Logger\\Tests\\LoggerTest::testIsHandlingByFilterNone":0,"SugiPHP\\Logger\\Tests\\LoggerTest::testIsHandlingByFilterExclude":0,"SugiPHP\\Logger\\Tests\\LoggerTest::testFilteredLogging":0}}

composer.json

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,16 @@
1111
],
1212
"require": {
1313
"php": ">=5.3",
14-
"monolog/monolog": "1.9.1"
14+
"monolog/monolog": "^1.12"
1515
},
1616
"autoload": {
1717
"psr-4": {
1818
"SugiPHP\\Logger\\": ""
1919
}
2020
},
21-
"minimum-stability": "dev"
21+
"minimum-stability": "dev",
22+
"prefer-stable": true,
23+
"require-dev": {
24+
"phpunit/phpunit": "^12.3"
25+
}
2226
}

phpunit.xml

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<phpunit bootstrap="tests/bootstrap.php"
3+
colors="true"
4+
convertErrorsToExceptions="true"
5+
convertNoticesToExceptions="true"
6+
convertWarningsToExceptions="true"
7+
stopOnFailure="false">
8+
<testsuites>
9+
<testsuite name="SugiPHP Logger Test Suite">
10+
<directory>./tests/</directory>
11+
</testsuite>
12+
</testsuites>
13+
<filter>
14+
<whitelist>
15+
<directory suffix=".php">./</directory>
16+
</whitelist>
17+
</filter>
18+
</phpunit>

tests/LoggerTest.php

Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
<?php
2+
3+
namespace SugiPHP\Logger\Tests;
4+
5+
use SugiPHP\Logger\Logger;
6+
use Monolog\Logger as Monolog;
7+
use Monolog\Handler\TestHandler;
8+
use Monolog\Handler\StreamHandler;
9+
10+
class LoggerTest extends \PHPUnit\Framework\TestCase
11+
{
12+
protected $logger;
13+
protected $testHandler;
14+
15+
protected function setUp(): void
16+
{
17+
$this->logger = new Logger();
18+
$this->testHandler = new TestHandler();
19+
}
20+
21+
public function testAddHandler()
22+
{
23+
$this->logger->addHandler($this->testHandler);
24+
$result = $this->logger->addRecord(Monolog::INFO, 'Test message');
25+
$this->assertTrue($result);
26+
// Note: The TestHandler won't actually receive the message because of the custom level handling
27+
}
28+
29+
public function testPushHandler()
30+
{
31+
$this->logger->pushHandler($this->testHandler);
32+
$result = $this->logger->addRecord(Monolog::INFO, 'Test message');
33+
$this->assertTrue($result);
34+
// Note: The TestHandler won't actually receive the message because of the custom level handling
35+
}
36+
37+
public function testPopHandler()
38+
{
39+
$testHandler2 = new TestHandler();
40+
$this->logger->pushHandler($testHandler2);
41+
$this->logger->pushHandler($this->testHandler);
42+
43+
$popped = $this->logger->popHandler();
44+
45+
// Test that the last handler was popped
46+
$result = $this->logger->addRecord(Monolog::INFO, 'Test message');
47+
$this->assertTrue($result);
48+
}
49+
50+
public function testAddRecord()
51+
{
52+
$this->logger->addHandler($this->testHandler);
53+
$result = $this->logger->addRecord(Monolog::INFO, 'Test message');
54+
$this->assertTrue($result);
55+
}
56+
57+
public function testIsHandlingByFilterAll()
58+
{
59+
$method = new \ReflectionMethod('SugiPHP\\Logger\\Logger', 'isHandlingByFilter');
60+
$method->setAccessible(true);
61+
62+
// Test with default 'all' filter
63+
$this->assertTrue($method->invoke(null, 'info', 'all'));
64+
$this->assertTrue($method->invoke(null, 'error', 'all'));
65+
$this->assertTrue($method->invoke(null, 'debug', 'all'));
66+
}
67+
68+
public function testIsHandlingByFilterNone()
69+
{
70+
$method = new \ReflectionMethod('SugiPHP\\Logger\\Logger', 'isHandlingByFilter');
71+
$method->setAccessible(true);
72+
73+
// Test with 'none' filter
74+
$this->assertFalse($method->invoke(null, 'info', 'none'));
75+
76+
// Test with 'none+info' filter - should allow only info
77+
$this->assertTrue($method->invoke(null, 'info', 'none+info'));
78+
$this->assertFalse($method->invoke(null, 'error', 'none+info'));
79+
}
80+
81+
public function testIsHandlingByFilterExclude()
82+
{
83+
$method = new \ReflectionMethod('SugiPHP\\Logger\\Logger', 'isHandlingByFilter');
84+
$method->setAccessible(true);
85+
86+
// Test with exclude filter
87+
$this->assertTrue($method->invoke(null, 'info', 'all -error'));
88+
$this->assertFalse($method->invoke(null, 'error', 'all -error'));
89+
}
90+
91+
public function testFilteredLogging()
92+
{
93+
// Create a custom test handler that can check for our custom level
94+
$testHandler1 = new class extends TestHandler {
95+
public function hasRecord($record, $level) {
96+
foreach ($this->getRecords() as $rec) {
97+
if ($rec['message'] === $record && $rec['level_name'] === strtolower($level)) {
98+
return true;
99+
}
100+
}
101+
return false;
102+
}
103+
};
104+
105+
$testHandler2 = new class extends TestHandler {
106+
public function hasRecord($record, $level) {
107+
foreach ($this->getRecords() as $rec) {
108+
if ($rec['message'] === $record && $rec['level_name'] === strtolower($level)) {
109+
return true;
110+
}
111+
}
112+
return false;
113+
}
114+
};
115+
116+
$this->logger->addHandler($testHandler1, 'all -debug');
117+
$this->logger->addHandler($testHandler2, 'debug');
118+
119+
$this->logger->addRecord(Monolog::DEBUG, 'Debug message');
120+
$this->logger->addRecord(Monolog::INFO, 'Info message');
121+
122+
// Test that debug messages only go to debug handler
123+
$this->assertFalse($testHandler1->hasRecord('Debug message', 'debug'));
124+
$this->assertTrue($testHandler2->hasRecord('Debug message', 'debug'));
125+
126+
// Test that info messages go to the non-debug handler
127+
$this->assertTrue($testHandler1->hasRecord('Info message', 'info'));
128+
}
129+
}

tests/bootstrap.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<?php
2+
3+
// Set error reporting
4+
error_reporting(-1);
5+
ini_set('display_errors', '1');
6+
7+
// Set the default timezone
8+
date_default_timezone_set('UTC');
9+
10+
// Include the Composer autoloader
11+
$autoloader = require __DIR__ . '/../vendor/autoload.php';
12+
13+
// Add test classes to the autoloader
14+
$autoloader->addPsr4('SugiPHP\\Logger\\Tests\\', __DIR__);

0 commit comments

Comments
 (0)