91 lines
2.4 KiB
PHP
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);
|
|
}
|
|
}
|