implements decorators pipeline

This commit is contained in:
Fabio Ivona
2021-10-08 15:29:35 +02:00
parent d802e88148
commit e92d9bfaae
5 changed files with 202 additions and 10 deletions

View File

@ -0,0 +1,56 @@
<?php
use function PHPUnit\Framework\assertEquals;
use function PHPUnit\Framework\assertInstanceOf;
class Number
{
public $value;
public function __construct($value)
{
$this->value = $value;
}
}
class Character
{
public $value;
public function __construct($value)
{
$this->value = $value;
}
}
expect()->decorate('toBe', function ($next, $expected) {
if ($this->value instanceof Character) {
assertInstanceOf(Character::class, $expected);
assertEquals($this->value->value, $expected->value);
return;
}
$next($expected);
});
expect()->decorate('toBe', function ($next, $expected) {
if ($this->value instanceof Number) {
assertInstanceOf(Number::class, $expected);
assertEquals($this->value->value, $expected->value);
return;
}
$next($expected);
});
test('pass', function () {
$number = new Number(1);
$letter = new Character('A');
expect($number)->toBe(new Number(1));
expect($letter)->toBe(new Character('A'));
expect(3)->toBe(3);
});