19declare(strict_types=1);
27use PHPUnit\Framework\TestCase;
29use PHPUnit\Framework\Attributes\Depends;
37 $this->assertInstanceOf(Intermediate::class, $intermediate);
44 $this->assertEquals(\ord(
'i'), $intermediate->value());
47 #[Depends('testValue')]
52 $this->assertEquals(\ord(
'i'), $intermediate->value());
54 $next = $intermediate->accept();
55 $this->assertTrue($next->isOK());
56 $this->assertEquals(\ord(
'n'), $next->value()->value());
63 $next = $intermediate->reject();
64 $this->assertFalse($next->isOK());
67 #[Depends('testValue')]
68 #[Depends('testAccept')]
73 $this->assertEquals([], $intermediate->accepted());
74 $accepted = $intermediate->accept()->value()->accept()->value()->accepted();
75 $this->assertIsArray($accepted);
77 foreach ($accepted as $character) {
78 $this->assertInstanceOf(Character::class, $character);
79 $actual .= $character->value();
81 $this->assertEquals($expected, $actual);
84 #[Depends('testAccept')]
88 $this->assertFalse($intermediate->done());
89 $this->assertTrue($intermediate->accept()->value()->accept()->value()->done());
92 #[Depends('testAccepted')]
93 #[Depends('testValue')]
97 $intermediate = $intermediate->accept()->value()->onlyTodo();
98 $this->assertEmpty($intermediate->accepted());
99 $this->assertEquals(\ord(
'b'), $intermediate->value());
102 #[Depends('testAccept')]
106 $intermediate = $intermediate->accept()->value();
108 $ok =
new Ok(
'transformed');
110 $result = $intermediate->transform(
function (
string $accepted) use ($ok):
Result {
111 $this->assertEquals(
'h', $accepted);
115 $this->assertEquals($ok, $result);
118 #[Depends('testAccepted')]
122 $value =
new stdClass();
123 $this->assertEmpty($intermediate->accepted());
124 $this->assertEquals([$value], $intermediate->push([$value])->accepted());
127 #[Depends('testPush')]
128 #[Depends('testAccept')]
132 $intermediate = $intermediate->accept()->value();
134 $dummy =
new stdClass();
135 $ok =
new Ok(
'transformed');
137 $intermediate = $intermediate->push([$dummy]);
139 $result = $intermediate->transform(
function (array $accepted) use ($dummy, $ok):
Result {
140 $this->assertCount(2, $accepted);
141 $this->assertInstanceOf(Character::class, $accepted[0]);
142 $this->assertEquals(
'h', $accepted[0]->value());
143 $this->assertEquals($dummy, $accepted[1]);
147 $this->assertEquals($ok, $result);
A result encapsulates a value or an error and simplifies the handling of those.
Class for internal usage of Intermediate.
A result encapsulates a value or an error and simplifies the handling of those.