ILIAS  trunk Revision v11.0_alpha-2638-g80c1d007f79
IntermediateTest.php
Go to the documentation of this file.
1 <?php
2 
19 declare(strict_types=1);
20 
22 
28 use stdClass;
30 
31 class 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')]
129  public function testTransformWithTransformedValues(): void
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:30