19declare(strict_types=1);
23use PHPUnit\Framework\TestCase;
55 $component =
new class () implements
Component {
57 array | \ArrayAccess &$define,
58 array | \ArrayAccess &$implement,
59 array | \ArrayAccess &$use,
60 array | \ArrayAccess &$contribute,
61 array | \ArrayAccess &$seek,
62 array | \ArrayAccess &$provide,
63 array | \ArrayAccess &$pull,
64 array | \ArrayAccess &$internal,
69 $result = $this->reader->read($component);
71 $this->assertEquals(
new D\OfComponent($component), $result);
76 $component =
new class () implements
Component {
78 array | \ArrayAccess &$define,
79 array | \ArrayAccess &$implement,
80 array | \ArrayAccess &$use,
81 array | \ArrayAccess &$contribute,
82 array | \ArrayAccess &$seek,
83 array | \ArrayAccess &$provide,
84 array | \ArrayAccess &$pull,
85 array | \ArrayAccess &$internal,
87 $define[] = TestInterface::class;
90 $result = $this->reader->read($component);
92 $name =
new D\Name(TestInterface::class);
93 $define =
new D\Define($name,
false);
95 $this->assertEquals(
new D\OfComponent($component, $define), $result);
100 $this->expectException(\LogicException::class);
102 $result = $this->reader->read(
new class () implements
Component {
103 public function init(
104 array | \ArrayAccess &$define,
105 array | \ArrayAccess &$implement,
106 array | \ArrayAccess &$use,
107 array | \ArrayAccess &$contribute,
108 array | \ArrayAccess &$seek,
109 array | \ArrayAccess &$provide,
110 array | \ArrayAccess &$pull,
111 array | \ArrayAccess &$internal,
113 $define[TestInterface::class] = fn() =>
new class ($use[ILIAS\Component\Service::class]) implements
TestInterface {};
120 $this->expectException(\LogicException::class);
122 $result = $this->reader->read(
new class () implements
Component {
123 public function init(
124 array | \ArrayAccess &$define,
125 array | \ArrayAccess &$implement,
126 array | \ArrayAccess &$use,
127 array | \ArrayAccess &$contribute,
128 array | \ArrayAccess &$seek,
129 array | \ArrayAccess &$provide,
130 array | \ArrayAccess &$pull,
131 array | \ArrayAccess &$internal,
133 $implement[TestInterface::class] =
null;
140 $component =
new class () implements
Component {
141 public function init(
142 array | \ArrayAccess &$define,
143 array | \ArrayAccess &$implement,
144 array | \ArrayAccess &$use,
145 array | \ArrayAccess &$contribute,
146 array | \ArrayAccess &$seek,
147 array | \ArrayAccess &$provide,
148 array | \ArrayAccess &$pull,
149 array | \ArrayAccess &$internal,
154 $result = $this->reader->read($component);
156 $name = TestInterface::class;
157 $implement =
new D\Out(
D\OutType::IMPLEMENT, $name, [
"class" => ImplementsTestInterface::class,
"position" => 0], []);
159 $this->assertEquals(
new D\OfComponent($component, $implement), $result);
164 $this->expectException(\LogicException::class);
166 $result = $this->reader->read(
new class () implements
Component {
167 public function init(
168 array | \ArrayAccess &$define,
169 array | \ArrayAccess &$implement,
170 array | \ArrayAccess &$use,
171 array | \ArrayAccess &$contribute,
172 array | \ArrayAccess &$seek,
173 array | \ArrayAccess &$provide,
174 array | \ArrayAccess &$pull,
175 array | \ArrayAccess &$internal,
177 $implement[TestInterface::class] = fn() =>
new class () {};
184 $component =
new class () implements
Component {
185 public function init(
186 array | \ArrayAccess &$define,
187 array | \ArrayAccess &$implement,
188 array | \ArrayAccess &$use,
189 array | \ArrayAccess &$contribute,
190 array | \ArrayAccess &$seek,
191 array | \ArrayAccess &$provide,
192 array | \ArrayAccess &$pull,
193 array | \ArrayAccess &$internal,
195 $implement[TestInterface::class] = fn() =>
new ImplementsTestInterface($use[TestInterface::class], $seek[TestInterface::class], $pull[TestInterface::class], $internal[
"something"]);
201 $result = $this->reader->read($component);
203 $name = TestInterface::class;
204 $use =
new D\In(
D\InType::USE, $name);
205 $seek =
new D\In(
D\InType::SEEK, $name);
206 $pull =
new D\In(
D\InType::PULL, $name);
209 $implement =
new D\Out(
D\OutType::IMPLEMENT, $name, [
"class" => ImplementsTestInterface::class,
"position" => 0], [$use, $seek, $pull, $internal_in]);
211 $expected =
new D\OfComponent($component, $use, $seek, $pull, $internal_in, $internal_out, $implement);
213 $this->assertEquals($expected, $result);
215 $this->assertEquals([$implement], $result[(
string) $implement]);
216 $this->assertEquals([$use], $result[(
string) $use]);
217 $this->assertEquals([$seek], $result[(
string) $seek]);
218 $this->assertEquals([$pull], $result[(
string) $pull]);
219 $this->assertEquals([$internal_in], $result[(
string) $internal_in]);
220 $this->assertEquals([$internal_out], $result[(
string) $internal_out]);
225 $component =
new class () implements
Component {
226 public function init(
227 array | \ArrayAccess &$define,
228 array | \ArrayAccess &$implement,
229 array | \ArrayAccess &$use,
230 array | \ArrayAccess &$contribute,
231 array | \ArrayAccess &$seek,
232 array | \ArrayAccess &$provide,
233 array | \ArrayAccess &$pull,
234 array | \ArrayAccess &$internal,
240 $result = $this->reader->read($component);
242 $name = TestInterface::class;
243 $implement =
new D\Out(
D\OutType::IMPLEMENT, $name, [
"class" => ImplementsTestInterface::class,
"position" => 0], []);
244 $implement2 =
new D\Out(
D\OutType::IMPLEMENT, $name, [
"class" => Implements2TestInterface::class,
"position" => 1], []);
246 $this->assertEquals(
new D\OfComponent($component, $implement, $implement2), $result);
247 $this->assertCount(2, $result[(
string) $implement]);
252 $this->expectException(\LogicException::class);
254 $result = $this->reader->read(
new class () implements
Component {
255 public function init(
256 array | \ArrayAccess &$define,
257 array | \ArrayAccess &$implement,
258 array | \ArrayAccess &$use,
259 array | \ArrayAccess &$contribute,
260 array | \ArrayAccess &$seek,
261 array | \ArrayAccess &$provide,
262 array | \ArrayAccess &$pull,
263 array | \ArrayAccess &$internal,
265 $foo = $use[TestInterface::class];
272 $this->expectException(\LogicException::class);
274 $result = $this->reader->read(
new class () implements
Component {
275 public function init(
276 array | \ArrayAccess &$define,
277 array | \ArrayAccess &$implement,
278 array | \ArrayAccess &$use,
279 array | \ArrayAccess &$contribute,
280 array | \ArrayAccess &$seek,
281 array | \ArrayAccess &$provide,
282 array | \ArrayAccess &$pull,
283 array | \ArrayAccess &$internal,
285 $contribute[TestInterface::class] =
null;
292 $component =
new class () implements
Component {
293 public function init(
294 array | \ArrayAccess &$define,
295 array | \ArrayAccess &$implement,
296 array | \ArrayAccess &$use,
297 array | \ArrayAccess &$contribute,
298 array | \ArrayAccess &$seek,
299 array | \ArrayAccess &$provide,
300 array | \ArrayAccess &$pull,
301 array | \ArrayAccess &$internal,
306 $result = $this->reader->read($component);
308 $name = TestInterface::class;
309 $contribute =
new D\Out(
D\OutType::CONTRIBUTE, $name, [
"position" => 0], []);
311 $this->assertEquals(
new D\OfComponent($component, $contribute), $result);
316 $this->expectException(\LogicException::class);
318 $result = $this->reader->read(
new class () implements
Component {
319 public function init(
320 array | \ArrayAccess &$define,
321 array | \ArrayAccess &$implement,
322 array | \ArrayAccess &$use,
323 array | \ArrayAccess &$contribute,
324 array | \ArrayAccess &$seek,
325 array | \ArrayAccess &$provide,
326 array | \ArrayAccess &$pull,
327 array | \ArrayAccess &$internal,
329 $contribute[TestInterface::class] = fn() =>
new class () {};
336 $component =
new class () implements
Component {
337 public function init(
338 array | \ArrayAccess &$define,
339 array | \ArrayAccess &$implement,
340 array | \ArrayAccess &$use,
341 array | \ArrayAccess &$contribute,
342 array | \ArrayAccess &$seek,
343 array | \ArrayAccess &$provide,
344 array | \ArrayAccess &$pull,
345 array | \ArrayAccess &$internal,
347 $contribute[TestInterface::class] = fn() =>
new ImplementsTestInterface($use[TestInterface::class], $seek[TestInterface::class], $pull[TestInterface::class], $internal[
"something"]);
351 $result = $this->reader->read($component);
353 $name = TestInterface::class;
354 $use =
new D\In(
D\InType::USE, $name);
355 $seek =
new D\In(
D\InType::SEEK, $name);
356 $pull =
new D\In(
D\InType::PULL, $name);
359 $contribute =
new D\Out(
D\OutType::CONTRIBUTE, $name, [
"position" => 0], [$use, $seek, $pull, $internal_in]);
361 $expected =
new D\OfComponent($component, $use, $seek, $pull, $internal_in, $internal_out, $contribute);
363 $this->assertEquals([$contribute], $result[(
string) $contribute]);
364 $this->assertEquals([$use], $result[(
string) $use]);
365 $this->assertEquals([$seek], $result[(
string) $seek]);
366 $this->assertEquals([$pull], $result[(
string) $pull]);
367 $this->assertEquals([$internal_in], $result[(
string) $internal_in]);
368 $this->assertEquals([$internal_out], $result[(
string) $internal_out]);
373 $this->expectException(\LogicException::class);
375 $result = $this->reader->read(
new class () implements
Component {
376 public function init(
377 array | \ArrayAccess &$define,
378 array | \ArrayAccess &$implement,
379 array | \ArrayAccess &$use,
380 array | \ArrayAccess &$contribute,
381 array | \ArrayAccess &$seek,
382 array | \ArrayAccess &$provide,
383 array | \ArrayAccess &$pull,
384 array | \ArrayAccess &$internal,
386 $foo = $seek[TestInterface::class];
393 $this->expectException(\LogicException::class);
395 $result = $this->reader->read(
new class () implements
Component {
396 public function init(
397 array | \ArrayAccess &$define,
398 array | \ArrayAccess &$implement,
399 array | \ArrayAccess &$use,
400 array | \ArrayAccess &$contribute,
401 array | \ArrayAccess &$seek,
402 array | \ArrayAccess &$provide,
403 array | \ArrayAccess &$pull,
404 array | \ArrayAccess &$internal,
406 $provide[TestInterface::class] =
null;
413 $component =
new class () implements
Component {
414 public function init(
415 array | \ArrayAccess &$define,
416 array | \ArrayAccess &$implement,
417 array | \ArrayAccess &$use,
418 array | \ArrayAccess &$contribute,
419 array | \ArrayAccess &$seek,
420 array | \ArrayAccess &$provide,
421 array | \ArrayAccess &$pull,
422 array | \ArrayAccess &$internal,
427 $result = $this->reader->read($component);
429 $name = TestInterface::class;
430 $provide =
new D\Out(
D\OutType::PROVIDE, $name,
null, []);
432 $this->assertEquals(
new D\OfComponent($component, $provide), $result);
437 $this->expectException(\LogicException::class);
439 $result = $this->reader->read(
new class () implements
Component {
440 public function init(
441 array | \ArrayAccess &$define,
442 array | \ArrayAccess &$implement,
443 array | \ArrayAccess &$use,
444 array | \ArrayAccess &$contribute,
445 array | \ArrayAccess &$seek,
446 array | \ArrayAccess &$provide,
447 array | \ArrayAccess &$pull,
448 array | \ArrayAccess &$internal,
450 $provide[TestInterface::class] = fn() =>
new class () {};
457 $component =
new class () implements
Component {
458 public function init(
459 array | \ArrayAccess &$define,
460 array | \ArrayAccess &$implement,
461 array | \ArrayAccess &$use,
462 array | \ArrayAccess &$contribute,
463 array | \ArrayAccess &$seek,
464 array | \ArrayAccess &$provide,
465 array | \ArrayAccess &$pull,
466 array | \ArrayAccess &$internal,
468 $provide[TestInterface::class] = fn() =>
new ImplementsTestInterface($use[TestInterface::class], $seek[TestInterface::class], $pull[TestInterface::class], $internal[
"something"]);
473 $result = $this->reader->read($component);
475 $name = TestInterface::class;
476 $use =
new D\In(
D\InType::USE, $name);
477 $seek =
new D\In(
D\InType::SEEK, $name);
478 $pull =
new D\In(
D\InType::PULL, $name);
481 $provide =
new D\Out(
D\OutType::PROVIDE, $name,
null, [$use, $seek, $pull, $internal_in]);
483 $expected =
new D\OfComponent($component, $use, $seek, $pull, $internal_in, $internal_out, $provide);
485 $this->assertEquals($expected, $result);
487 $this->assertEquals([$provide], $result[(
string) $provide]);
488 $this->assertEquals([$use], $result[(
string) $use]);
489 $this->assertEquals([$seek], $result[(
string) $seek]);
490 $this->assertEquals([$pull], $result[(
string) $pull]);
491 $this->assertEquals([$internal_in], $result[(
string) $internal_in]);
492 $this->assertEquals([$internal_out], $result[(
string) $internal_out]);
497 $this->expectException(\LogicException::class);
499 $result = $this->reader->read(
new class () implements
Component {
500 public function init(
501 array | \ArrayAccess &$define,
502 array | \ArrayAccess &$implement,
503 array | \ArrayAccess &$use,
504 array | \ArrayAccess &$contribute,
505 array | \ArrayAccess &$seek,
506 array | \ArrayAccess &$provide,
507 array | \ArrayAccess &$pull,
508 array | \ArrayAccess &$internal,
510 $foo = $pull[TestInterface::class];
517 $this->expectException(\LogicException::class);
519 $raw_name =
"some_name";
521 $result = $this->reader->read(
new class ($raw_name) implements
Component {
523 protected string $raw_name
527 public function init(
528 array | \ArrayAccess &$define,
529 array | \ArrayAccess &$implement,
530 array | \ArrayAccess &$use,
531 array | \ArrayAccess &$contribute,
532 array | \ArrayAccess &$seek,
533 array | \ArrayAccess &$provide,
534 array | \ArrayAccess &$pull,
535 array | \ArrayAccess &$internal,
537 $internal[$this->raw_name] = fn() => $internal[$this->raw_name];
544 $raw_name =
"some_name";
547 $result = $this->reader->read(
new class ($raw_name,
$results) implements
Component {
549 protected string $raw_name,
554 public function init(
555 array | \ArrayAccess &$define,
556 array | \ArrayAccess &$implement,
557 array | \ArrayAccess &$use,
558 array | \ArrayAccess &$contribute,
559 array | \ArrayAccess &$seek,
560 array | \ArrayAccess &$provide,
561 array | \ArrayAccess &$pull,
562 array | \ArrayAccess &$internal,
564 $provide[TestInterface::class] = fn() =>
new class (
566 $use[TestInterface::class],
567 $seek[TestInterface::class],
568 $pull[TestInterface::class]
584 $this->assertInstanceOf(TestInterface::class,
$results[0]);
585 $this->assertEquals([],
$results[1]);
586 $this->assertInstanceOf(TestInterface::class,
$results[2]);
591 $raw_name =
"some_name";
594 $result = $this->reader->read(
new class ($raw_name,
$results) implements
Component {
596 protected string $raw_name,
601 public function init(
602 array | \ArrayAccess &$define,
603 array | \ArrayAccess &$implement,
604 array | \ArrayAccess &$use,
605 array | \ArrayAccess &$contribute,
606 array | \ArrayAccess &$seek,
607 array | \ArrayAccess &$provide,
608 array | \ArrayAccess &$pull,
609 array | \ArrayAccess &$internal,
611 $provide[TestInterface::class] = fn() =>
new class (
629 $internal[
"foo"] = fn() => $use[TestInterface::class];
630 $internal[
"bar"] = fn() => $seek[TestInterface::class];
631 $internal[
"baz"] = fn() => $pull[TestInterface2::class];
635 $this->assertInstanceOf(TestInterface::class,
$results[0]);
636 $this->assertEquals([],
$results[1]);
637 $this->assertInstanceOf(TestInterface2::class,
$results[2]);
A dependency where the component needs something from the world.
A dependency where the component gives something to the world.
testDefineWithNonMinimalImplementation()
testProvideWithWrongImplementation()
testImplementWithoutImplementation()
testImplementWithElaborateImplementation()
testReaderResolvesInternal()
testContributeWithoutImplementation()
testImplementWithWrongImplementation()
testContributeWithWrongImplementation()
testImplementWithSimpleImplementation()
testProvideWithoutImplementation()
testProvideWithSimpleImplementation()
testProvideWithElaborateImplementation()
testContributeWithElaborateImplementation()
testImplementWithTwoImplementations()
testReaderProvidesMocks()
testContributeWithSimpleImplementation()
init(array|\ArrayAccess &$define, array|\ArrayAccess &$implement, array|\ArrayAccess &$use, array|\ArrayAccess &$contribute, array|\ArrayAccess &$seek, array|\ArrayAccess &$provide, array|\ArrayAccess &$pull, array|\ArrayAccess &$internal,)
__construct()
Constructor setup ILIAS global object @access public.
$a
thx to https://mlocati.github.io/php-cs-fixer-configurator for the examples