19 declare(strict_types=1);
36 $this->assertInstanceOf(Intermediate::class, $intermediate);
43 $this->assertEquals(ord(
'i'), $intermediate->value());
53 $this->assertEquals(ord(
'i'), $intermediate->value());
55 $next = $intermediate->accept();
56 $this->assertTrue($next->isOK());
57 $this->assertEquals(ord(
'n'), $next->value()->value());
64 $next = $intermediate->reject();
65 $this->assertFalse($next->isOK());
76 $this->assertEquals([], $intermediate->accepted());
77 $accepted = $intermediate->accept()->value()->accept()->value()->accepted();
78 $this->assertTrue(is_array($accepted));
80 foreach ($accepted as $character) {
81 $this->assertInstanceOf(Character::class, $character);
82 $actual .= $character->value();
84 $this->assertEquals($expected, $actual);
93 $this->assertFalse($intermediate->done());
94 $this->assertTrue($intermediate->accept()->value()->accept()->value()->done());
105 $intermediate = $intermediate->accept()->value()->onlyTodo();
106 $this->assertEmpty($intermediate->accepted());
107 $this->assertEquals(ord(
'b'), $intermediate->value());
116 $intermediate = $intermediate->accept()->value();
118 $ok =
new Ok(
'transformed');
120 $result = $intermediate->transform(
function (
string $accepted) use ($ok):
Result {
121 $this->assertEquals(
'h', $accepted);
125 $this->assertEquals($ok, $result);
135 $this->assertEmpty($intermediate->accepted());
136 $this->assertEquals([$value], $intermediate->push([$value])->accepted());
146 $intermediate = $intermediate->accept()->value();
149 $ok =
new Ok(
'transformed');
151 $intermediate = $intermediate->push([$dummy]);
153 $result = $intermediate->transform(
function (array $accepted) use ($dummy, $ok):
Result {
154 $this->assertEquals(2, count($accepted));
155 $this->assertInstanceOf(Character::class, $accepted[0]);
156 $this->assertEquals(
'h', $accepted[0]->value());
157 $this->assertEquals($dummy, $accepted[1]);
161 $this->assertEquals($ok, $result);
A result encapsulates a value or an error and simplifies the handling of those.