ILIAS  trunk Revision v11.0_alpha-1723-g8e69f309bab
All Data Structures Namespaces Files Functions Variables Enumerations Enumerator Modules Pages
IntermediateTest.php
Go to the documentation of this file.
1 <?php
2 
19 declare(strict_types=1);
20 
22 
28 use stdClass;
29 
30 class IntermediateTest extends TestCase
31 {
32  public function testConstruct(): void
33  {
34  $intermediate = new Intermediate('input');
35 
36  $this->assertInstanceOf(Intermediate::class, $intermediate);
37  }
38 
39  public function testValue(): void
40  {
41  $intermediate = new Intermediate('input');
42 
43  $this->assertEquals(ord('i'), $intermediate->value());
44  }
45 
49  public function testAccept(): void
50  {
51  $intermediate = new Intermediate('input');
52 
53  $this->assertEquals(ord('i'), $intermediate->value());
54 
55  $next = $intermediate->accept();
56  $this->assertTrue($next->isOK());
57  $this->assertEquals(ord('n'), $next->value()->value());
58  }
59 
60  public function testReject(): void
61  {
62  $intermediate = new Intermediate('input');
63 
64  $next = $intermediate->reject();
65  $this->assertFalse($next->isOK());
66  }
67 
72  public function testAccepted(): void
73  {
74  $expected = 'in';
75  $intermediate = new Intermediate('input');
76  $this->assertEquals([], $intermediate->accepted());
77  $accepted = $intermediate->accept()->value()->accept()->value()->accepted();
78  $this->assertTrue(is_array($accepted));
79  $actual = '';
80  foreach ($accepted as $character) {
81  $this->assertInstanceOf(Character::class, $character);
82  $actual .= $character->value();
83  }
84  $this->assertEquals($expected, $actual);
85  }
86 
90  public function testDone(): void
91  {
92  $intermediate = new Intermediate('ab');
93  $this->assertFalse($intermediate->done());
94  $this->assertTrue($intermediate->accept()->value()->accept()->value()->done());
95  }
96 
102  public function testOnlyTodo(): void
103  {
104  $intermediate = new Intermediate('ab');
105  $intermediate = $intermediate->accept()->value()->onlyTodo();
106  $this->assertEmpty($intermediate->accepted());
107  $this->assertEquals(ord('b'), $intermediate->value());
108  }
109 
113  public function testTransformOnlyWithCharacters(): void
114  {
115  $intermediate = new Intermediate('hej');
116  $intermediate = $intermediate->accept()->value();
117 
118  $ok = new Ok('transformed');
119 
120  $result = $intermediate->transform(function (string $accepted) use ($ok): Result {
121  $this->assertEquals('h', $accepted);
122  return $ok;
123  });
124 
125  $this->assertEquals($ok, $result);
126  }
127 
131  public function testPush(): void
132  {
133  $intermediate = new Intermediate('hej');
134  $value = new stdClass();
135  $this->assertEmpty($intermediate->accepted());
136  $this->assertEquals([$value], $intermediate->push([$value])->accepted());
137  }
138 
143  public function testTransformWithTransformedValues(): void
144  {
145  $intermediate = new Intermediate('hej');
146  $intermediate = $intermediate->accept()->value();
147 
148  $dummy = new stdClass();
149  $ok = new Ok('transformed');
150 
151  $intermediate = $intermediate->push([$dummy]);
152 
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]);
158  return $ok;
159  });
160 
161  $this->assertEquals($ok, $result);
162  }
163 }
A result encapsulates a value or an error and simplifies the handling of those.
Definition: Ok.php:30
testOnlyTodo()
testAccepted testAccepted testValue