Skip to content

Commit 4cbf8ac

Browse files
committed
test: Update tests
1 parent af98022 commit 4cbf8ac

18 files changed

+220
-751
lines changed

src/Internal/DefaultProcessor.php renamed to src/Context/DefaultProcessor.php

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@
22

33
declare(strict_types=1);
44

5-
namespace RoadRunner\PsrLogger\Internal;
5+
namespace RoadRunner\PsrLogger\Context;
66

7-
use RoadRunner\PsrLogger\Internal\ContextProcessor\DateTimeProcessor;
8-
use RoadRunner\PsrLogger\Internal\ContextProcessor\FallbackProcessor;
9-
use RoadRunner\PsrLogger\Internal\ContextProcessor\StringableProcessor;
10-
use RoadRunner\PsrLogger\Internal\ContextProcessor\ThrowableProcessor;
7+
use RoadRunner\PsrLogger\Context\ObjectProcessor\DateTimeProcessor;
8+
use RoadRunner\PsrLogger\Context\ObjectProcessor\FallbackProcessor;
9+
use RoadRunner\PsrLogger\Context\ObjectProcessor\StringableProcessor;
10+
use RoadRunner\PsrLogger\Context\ObjectProcessor\ThrowableProcessor;
1111

1212
final class DefaultProcessor
1313
{
@@ -23,6 +23,7 @@ public static function createDefault(): self
2323
new ThrowableProcessor(),
2424
new FallbackProcessor(),
2525
];
26+
return $self;
2627
}
2728

2829
/**

src/Internal/ObjectProcessor.php renamed to src/Context/ObjectProcessor.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
declare(strict_types=1);
44

5-
namespace RoadRunner\PsrLogger\Internal;
5+
namespace RoadRunner\PsrLogger\Context;
66

77
/**
88
* Converts an object into a scalar or an arra for serializable logger context.

src/Internal/ContextProcessor/DateTimeProcessor.php renamed to src/Context/ObjectProcessor/DateTimeProcessor.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22

33
declare(strict_types=1);
44

5-
namespace RoadRunner\PsrLogger\Internal\ContextProcessor;
5+
namespace RoadRunner\PsrLogger\Context\ObjectProcessor;
66

7-
use RoadRunner\PsrLogger\Internal\ObjectProcessor;
7+
use RoadRunner\PsrLogger\Context\ObjectProcessor;
88

99
/**
1010
* Processor for DateTime objects.

src/Internal/ContextProcessor/FallbackProcessor.php renamed to src/Context/ObjectProcessor/FallbackProcessor.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22

33
declare(strict_types=1);
44

5-
namespace RoadRunner\PsrLogger\Internal\ContextProcessor;
5+
namespace RoadRunner\PsrLogger\Context\ObjectProcessor;
66

7-
use RoadRunner\PsrLogger\Internal\ObjectProcessor;
7+
use RoadRunner\PsrLogger\Context\ObjectProcessor;
88

99
/**
1010
* Fallback processor for unknown objects.
@@ -20,7 +20,7 @@ public function canProcess(object $value): bool
2020
return true;
2121
}
2222

23-
public function process(object $value, callable $processor): string
23+
public function process(object $value, callable $processor): array
2424
{
2525
$result = ['@class' => $value::class] + \get_object_vars($value);
2626
foreach ($result as $k => &$v) {

src/Internal/ContextProcessor/StringableProcessor.php renamed to src/Context/ObjectProcessor/StringableProcessor.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22

33
declare(strict_types=1);
44

5-
namespace RoadRunner\PsrLogger\Internal\ContextProcessor;
5+
namespace RoadRunner\PsrLogger\Context\ObjectProcessor;
66

7-
use RoadRunner\PsrLogger\Internal\ObjectProcessor;
7+
use RoadRunner\PsrLogger\Context\ObjectProcessor;
88

99
/**
1010
* Converts Stringable objects to their string representation.

src/Internal/ContextProcessor/ThrowableProcessor.php renamed to src/Context/ObjectProcessor/ThrowableProcessor.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22

33
declare(strict_types=1);
44

5-
namespace RoadRunner\PsrLogger\Internal\ContextProcessor;
5+
namespace RoadRunner\PsrLogger\Context\ObjectProcessor;
66

7-
use RoadRunner\PsrLogger\Internal\ObjectProcessor;
7+
use RoadRunner\PsrLogger\Context\ObjectProcessor;
88

99
/**
1010
* Converts exceptions to structured data containing class, message,

src/RpcLogger.php

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,21 +10,19 @@
1010
use Psr\Log\InvalidArgumentException as PsrInvalidArgumentException;
1111
use RoadRunner\Logger\Logger as AppLogger;
1212
use RoadRunner\Logger\LogLevel;
13-
use RoadRunner\PsrLogger\Internal\DefaultProcessor;
14-
use RoadRunner\PsrLogger\Internal\ObjectProcessor;
15-
use RoadRunner\PsrLogger\Internal\ContextProcessor\ObjectProcessorManager;
13+
use RoadRunner\PsrLogger\Context\DefaultProcessor;
1614

1715
class RpcLogger implements LoggerInterface
1816
{
1917
use LoggerTrait;
2018

2119
private readonly AppLogger $logger;
22-
private readonly ObjectProcessor $contextProcessor;
20+
private readonly \Closure $objectProcessor;
2321

2422
public function __construct(AppLogger $logger, ?callable $processor = null)
2523
{
2624
$this->logger = $logger;
27-
$this->contextProcessor = $processor ?? DefaultProcessor::createDefault();
25+
$this->objectProcessor = ($processor ?? DefaultProcessor::createDefault())(...);
2826
}
2927

3028
/**
@@ -45,7 +43,7 @@ public function log($level, \Stringable|string $message, array $context = []): v
4543
});
4644

4745
// Process context data for structured logging using the processor manager
48-
$processedContext = $this->contextProcessor->processContext($context);
46+
$processedContext = ($this->objectProcessor)($context);
4947

5048
match ($normalizedLevel) {
5149
PsrLogLevel::EMERGENCY,
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Context;
6+
7+
use PHPUnit\Framework\Attributes\CoversClass;
8+
use PHPUnit\Framework\Attributes\DataProvider;
9+
use PHPUnit\Framework\TestCase;
10+
use RoadRunner\PsrLogger\Context\DefaultProcessor;
11+
use RoadRunner\PsrLogger\Context\ObjectProcessor\BuiltInTypeProcessor;
12+
13+
#[CoversClass(DefaultProcessor::class)]
14+
class DefaultProcessorTest extends TestCase
15+
{
16+
private DefaultProcessor $processor;
17+
18+
public static function builtInTypeValuesProvider(): array
19+
{
20+
return [
21+
'string' => ['test string', 'test string'],
22+
'integer' => [42, 42],
23+
'float' => [3.14, 3.14],
24+
'boolean true' => [true, true],
25+
'boolean false' => [false, false],
26+
'null' => [null, null],
27+
'empty array' => [[], []],
28+
'simple array' => [[1, 2, 3], [1, 2, 3]],
29+
'associative array' => [['key' => 'value'], ['key' => 'value']],
30+
'resource' => [\fopen('php://memory', 'r'), 'stream resource'],
31+
];
32+
}
33+
34+
#[DataProvider('builtInTypeValuesProvider')]
35+
public function testCanProcessBuiltInTypes(mixed $value, mixed $expected): void
36+
{
37+
$this->assertSame($expected, ($this->processor)($value));
38+
}
39+
40+
public function testProcessNull(): void
41+
{
42+
$recursiveProcessor = static fn($v) => $v;
43+
$result = ($this->processor)(null, $recursiveProcessor);
44+
$this->assertNull($result);
45+
}
46+
47+
public function testProcessScalarValues(): void
48+
{
49+
$values = ['test string', 42, 3.14, true, false];
50+
$recursiveProcessor = static fn($v) => $v;
51+
52+
foreach ($values as $value) {
53+
$result = ($this->processor)($value, $recursiveProcessor);
54+
$this->assertSame($value, $result);
55+
}
56+
}
57+
58+
public function testProcessSimpleArray(): void
59+
{
60+
$array = [1, 2, 'three', true];
61+
$recursiveProcessor = static fn($v) => $v; // Identity function for simple values
62+
63+
$result = ($this->processor)($array, $recursiveProcessor);
64+
65+
$this->assertSame([1, 2, 'three', true], $result);
66+
}
67+
68+
public function testProcessNestedArray(): void
69+
{
70+
$array = [
71+
'level1' => [
72+
'level2' => [
73+
'value' => 'deep',
74+
],
75+
],
76+
];
77+
78+
$result = ($this->processor)($array);
79+
80+
$this->assertArrayHasKey('level1', $result);
81+
$this->assertIsArray($result['level1']);
82+
$this->assertArrayHasKey('level2', $result['level1']);
83+
$this->assertIsArray($result['level1']['level2']);
84+
$this->assertSame('deep', $result['level1']['level2']['value']);
85+
}
86+
87+
protected function setUp(): void
88+
{
89+
$this->processor = new DefaultProcessor();
90+
}
91+
}

tests/Unit/ContextProcessor/DateTimeProcessorTest.php renamed to tests/Unit/Context/ObjectProcessor/DateTimeProcessorTest.php

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22

33
declare(strict_types=1);
44

5-
namespace RoadRunner\PsrLogger\Tests\Unit\ContextProcessor;
5+
namespace Context\ObjectProcessor;
66

77
use PHPUnit\Framework\Attributes\CoversClass;
88
use PHPUnit\Framework\TestCase;
9-
use RoadRunner\PsrLogger\Internal\ContextProcessor\DateTimeProcessor;
9+
use RoadRunner\PsrLogger\Context\ObjectProcessor\DateTimeProcessor;
1010

1111
#[CoversClass(DateTimeProcessor::class)]
1212
class DateTimeProcessorTest extends TestCase
@@ -27,9 +27,6 @@ public function testCanProcessDateTimeImmutable(): void
2727

2828
public function testCannotProcessNonDateTime(): void
2929
{
30-
$this->assertFalse($this->processor->canProcess('not a datetime'));
31-
$this->assertFalse($this->processor->canProcess(123));
32-
$this->assertFalse($this->processor->canProcess([]));
3330
$this->assertFalse($this->processor->canProcess(new \stdClass()));
3431
}
3532

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Context\ObjectProcessor;
6+
7+
use PHPUnit\Framework\Attributes\CoversClass;
8+
use PHPUnit\Framework\Attributes\DataProvider;
9+
use PHPUnit\Framework\TestCase;
10+
use RoadRunner\PsrLogger\Context\ObjectProcessor\FallbackProcessor;
11+
12+
#[CoversClass(FallbackProcessor::class)]
13+
class FallbackProcessorTest extends TestCase
14+
{
15+
private FallbackProcessor $processor;
16+
17+
public static function allTypesProvider(): array
18+
{
19+
$resource = \fopen('php://memory', 'r');
20+
21+
$data = [
22+
'object' => [new \stdClass(), [
23+
'@class' => 'stdClass',
24+
]],
25+
'object with props' => [(object) ['foo' => 'bar'], [
26+
'@class' => 'stdClass',
27+
'foo' => 'bar',
28+
]],
29+
];
30+
31+
// Close the resource after creating the test data
32+
\register_shutdown_function(static function () use ($resource): void {
33+
if (\is_resource($resource)) {
34+
\fclose($resource);
35+
}
36+
});
37+
38+
return $data;
39+
}
40+
41+
#[DataProvider('allTypesProvider')]
42+
public function testProcessReturnsTypeString(object $value, mixed $expectedType): void
43+
{
44+
$recursiveProcessor = static fn($v) => $v;
45+
$result = $this->processor->process($value, $recursiveProcessor);
46+
47+
// FallbackProcessor should be able to process any object
48+
$this->assertTrue($this->processor->canProcess($value));
49+
$this->assertSame($expectedType, $result);
50+
}
51+
52+
protected function setUp(): void
53+
{
54+
$this->processor = new FallbackProcessor();
55+
}
56+
}

0 commit comments

Comments
 (0)