ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
IntermediateTest.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
22
27use PHPUnit\Framework\TestCase;
28use stdClass;
29use PHPUnit\Framework\Attributes\Depends;
30
31class IntermediateTest extends TestCase
32{
33 public function testConstruct(): void
34 {
35 $intermediate = new Intermediate('input');
36
37 $this->assertInstanceOf(Intermediate::class, $intermediate);
38 }
39
40 public function testValue(): void
41 {
42 $intermediate = new Intermediate('input');
43
44 $this->assertEquals(\ord('i'), $intermediate->value());
45 }
46
47 #[Depends('testValue')]
48 public function testAccept(): void
49 {
50 $intermediate = new Intermediate('input');
51
52 $this->assertEquals(\ord('i'), $intermediate->value());
53
54 $next = $intermediate->accept();
55 $this->assertTrue($next->isOK());
56 $this->assertEquals(\ord('n'), $next->value()->value());
57 }
58
59 public function testReject(): void
60 {
61 $intermediate = new Intermediate('input');
62
63 $next = $intermediate->reject();
64 $this->assertFalse($next->isOK());
65 }
66
67 #[Depends('testValue')]
68 #[Depends('testAccept')]
69 public function testAccepted(): void
70 {
71 $expected = 'in';
72 $intermediate = new Intermediate('input');
73 $this->assertEquals([], $intermediate->accepted());
74 $accepted = $intermediate->accept()->value()->accept()->value()->accepted();
75 $this->assertIsArray($accepted);
76 $actual = '';
77 foreach ($accepted as $character) {
78 $this->assertInstanceOf(Character::class, $character);
79 $actual .= $character->value();
80 }
81 $this->assertEquals($expected, $actual);
82 }
83
84 #[Depends('testAccept')]
85 public function testDone(): void
86 {
87 $intermediate = new Intermediate('ab');
88 $this->assertFalse($intermediate->done());
89 $this->assertTrue($intermediate->accept()->value()->accept()->value()->done());
90 }
91
92 #[Depends('testAccepted')]
93 #[Depends('testValue')]
94 public function testOnlyTodo(): void
95 {
96 $intermediate = new Intermediate('ab');
97 $intermediate = $intermediate->accept()->value()->onlyTodo();
98 $this->assertEmpty($intermediate->accepted());
99 $this->assertEquals(\ord('b'), $intermediate->value());
100 }
101
102 #[Depends('testAccept')]
103 public function testTransformOnlyWithCharacters(): void
104 {
105 $intermediate = new Intermediate('hej');
106 $intermediate = $intermediate->accept()->value();
107
108 $ok = new Ok('transformed');
109
110 $result = $intermediate->transform(function (string $accepted) use ($ok): Result {
111 $this->assertEquals('h', $accepted);
112 return $ok;
113 });
114
115 $this->assertEquals($ok, $result);
116 }
117
118 #[Depends('testAccepted')]
119 public function testPush(): void
120 {
121 $intermediate = new Intermediate('hej');
122 $value = new stdClass();
123 $this->assertEmpty($intermediate->accepted());
124 $this->assertEquals([$value], $intermediate->push([$value])->accepted());
125 }
126
127 #[Depends('testPush')]
128 #[Depends('testAccept')]
130 {
131 $intermediate = new Intermediate('hej');
132 $intermediate = $intermediate->accept()->value();
133
134 $dummy = new stdClass();
135 $ok = new Ok('transformed');
136
137 $intermediate = $intermediate->push([$dummy]);
138
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]);
144 return $ok;
145 });
146
147 $this->assertEquals($ok, $result);
148 }
149}
A result encapsulates a value or an error and simplifies the handling of those.
Definition: Ok.php:31
Class for internal usage of Intermediate.
Definition: Character.php:27
A result encapsulates a value or an error and simplifies the handling of those.
Definition: Result.php:29