aspect/tests/ReturnModificationTest.php
2025-12-22 17:54:16 -03:00

91 lines
2.4 KiB
PHP

<?php
use PHPUnit\Framework\TestCase;
use Tests\Aspects\ModifyingAspect;
use Tests\Classes\ModifyingClass;
final class ReturnModificationTest extends TestCase
{
private ModifyingClass $instance;
protected function setUp(): void
{
$this->instance = new ModifyingClass();
ModifyingAspect::reset();
}
public function testAfterReturningOriginalValueDoesNotModifyResult(): void
{
ModifyingAspect::$modifier = fn($result) => $result;
$result = $this->instance->getValue();
$this->assertEquals(42, $result);
}
public function testAfterCanModifyIntegerResult(): void
{
ModifyingAspect::$modifier = fn($result) => $result * 2;
$result = $this->instance->getValue();
$this->assertEquals(84, $result);
}
public function testAfterCanModifyStringResult(): void
{
ModifyingAspect::$modifier = fn($result) => strtoupper($result);
$result = $this->instance->getString();
$this->assertEquals('ORIGINAL', $result);
}
public function testAfterCanIncrementIntegerResult(): void
{
ModifyingAspect::$modifier = fn($result) => $result + 100;
$result = $this->instance->getValue();
$this->assertEquals(142, $result);
}
public function testAfterCanModifyArrayResult(): void
{
ModifyingAspect::$modifier = fn($result) => array_merge($result, ['added' => 'new']);
$result = $this->instance->getArray();
$this->assertEquals(['key' => 'value', 'added' => 'new'], $result);
}
public function testAfterCanFilterArrayResult(): void
{
ModifyingAspect::$modifier = fn($result) => array_filter($result, fn($v) => $v !== 'value');
$result = $this->instance->getArray();
$this->assertEquals([], $result);
}
public function testMultipleCallsWithDifferentModifiers(): void
{
ModifyingAspect::$modifier = fn($result) => $result * 2;
$result1 = $this->instance->getValue();
ModifyingAspect::$modifier = fn($result) => $result + 10;
$result2 = $this->instance->getValue();
$this->assertEquals(84, $result1);
$this->assertEquals(52, $result2);
}
public function testNoModifierReturnsOriginalValue(): void
{
// ModifyingAspect::$modifier is null, so after() returns original value
$result = $this->instance->getValue();
$this->assertEquals(42, $result);
}
}