19declare(strict_types=1);
23use PHPUnit\Framework\TestCase;
57 $component =
new class () implements
Component {
59 array | \ArrayAccess &$define,
60 array | \ArrayAccess &$implement,
61 array | \ArrayAccess &$use,
62 array | \ArrayAccess &$contribute,
63 array | \ArrayAccess &$seek,
64 array | \ArrayAccess &$provide,
65 array | \ArrayAccess &$pull,
66 array | \ArrayAccess &$internal,
71 $result = $this->reader->read($component);
73 $this->assertEquals(
new D\
OfComponent($component), $result);
78 $component =
new class () implements
Component {
80 array | \ArrayAccess &$define,
81 array | \ArrayAccess &$implement,
82 array | \ArrayAccess &$use,
83 array | \ArrayAccess &$contribute,
84 array | \ArrayAccess &$seek,
85 array | \ArrayAccess &$provide,
86 array | \ArrayAccess &$pull,
87 array | \ArrayAccess &$internal,
89 $define[] = TestInterface::class;
92 $result = $this->reader->read($component);
94 $name =
new D\Name(TestInterface::class);
95 $define =
new D\Define($name,
false);
97 $this->assertEquals(
new D\
OfComponent($component, $define), $result);
102 $this->expectException(\LogicException::class);
104 $result = $this->reader->read(
new class () implements
Component {
105 public function init(
106 array | \ArrayAccess &$define,
107 array | \ArrayAccess &$implement,
108 array | \ArrayAccess &$use,
109 array | \ArrayAccess &$contribute,
110 array | \ArrayAccess &$seek,
111 array | \ArrayAccess &$provide,
112 array | \ArrayAccess &$pull,
113 array | \ArrayAccess &$internal,
115 $define[TestInterface::class] = fn() =>
new class ($use[ILIAS\Component\Service::class]) implements
TestInterface {};
122 $this->expectException(\LogicException::class);
124 $result = $this->reader->read(
new class () implements
Component {
125 public function init(
126 array | \ArrayAccess &$define,
127 array | \ArrayAccess &$implement,
128 array | \ArrayAccess &$use,
129 array | \ArrayAccess &$contribute,
130 array | \ArrayAccess &$seek,
131 array | \ArrayAccess &$provide,
132 array | \ArrayAccess &$pull,
133 array | \ArrayAccess &$internal,
135 $implement[TestInterface::class] =
null;
142 $component =
new class () implements
Component {
143 public function init(
144 array | \ArrayAccess &$define,
145 array | \ArrayAccess &$implement,
146 array | \ArrayAccess &$use,
147 array | \ArrayAccess &$contribute,
148 array | \ArrayAccess &$seek,
149 array | \ArrayAccess &$provide,
150 array | \ArrayAccess &$pull,
151 array | \ArrayAccess &$internal,
156 $result = $this->reader->read($component);
158 $name = TestInterface::class;
159 $implement =
new D\Out(
D\OutType::IMPLEMENT, $name, [
"class" => ImplementsTestInterface::class,
"position" => 0], []);
161 $this->assertEquals(
new D\
OfComponent($component, $implement), $result);
166 $this->expectException(\LogicException::class);
168 $result = $this->reader->read(
new class () implements
Component {
169 public function init(
170 array | \ArrayAccess &$define,
171 array | \ArrayAccess &$implement,
172 array | \ArrayAccess &$use,
173 array | \ArrayAccess &$contribute,
174 array | \ArrayAccess &$seek,
175 array | \ArrayAccess &$provide,
176 array | \ArrayAccess &$pull,
177 array | \ArrayAccess &$internal,
179 $implement[TestInterface::class] = fn() =>
new class () {};
186 $component =
new class () implements
Component {
187 public function init(
188 array | \ArrayAccess &$define,
189 array | \ArrayAccess &$implement,
190 array | \ArrayAccess &$use,
191 array | \ArrayAccess &$contribute,
192 array | \ArrayAccess &$seek,
193 array | \ArrayAccess &$provide,
194 array | \ArrayAccess &$pull,
195 array | \ArrayAccess &$internal,
197 $implement[TestInterface::class] = fn() =>
new ImplementsTestInterface($use[TestInterface::class], $seek[TestInterface::class], $pull[TestInterface::class], $internal[
"something"]);
203 $result = $this->reader->read($component);
205 $name = TestInterface::class;
206 $use =
new D\In(
D\InType::USE, $name);
207 $seek =
new D\In(
D\InType::SEEK, $name);
208 $pull =
new D\In(
D\InType::PULL, $name);
211 $implement =
new D\Out(
D\OutType::IMPLEMENT, $name, [
"class" => ImplementsTestInterface::class,
"position" => 0], [$use, $seek, $pull, $internal_in]);
213 $expected =
new D\OfComponent($component, $use, $seek, $pull, $internal_in, $internal_out, $implement);
215 $this->assertEquals($expected, $result);
217 $this->assertEquals([$implement], $result[(
string) $implement]);
218 $this->assertEquals([$use], $result[(
string) $use]);
219 $this->assertEquals([$seek], $result[(
string) $seek]);
220 $this->assertEquals([$pull], $result[(
string) $pull]);
221 $this->assertEquals([$internal_in], $result[(
string) $internal_in]);
222 $this->assertEquals([$internal_out], $result[(
string) $internal_out]);
227 $component =
new class () implements
Component {
228 public function init(
229 array | \ArrayAccess &$define,
230 array | \ArrayAccess &$implement,
231 array | \ArrayAccess &$use,
232 array | \ArrayAccess &$contribute,
233 array | \ArrayAccess &$seek,
234 array | \ArrayAccess &$provide,
235 array | \ArrayAccess &$pull,
236 array | \ArrayAccess &$internal,
242 $result = $this->reader->read($component);
244 $name = TestInterface::class;
245 $implement =
new D\Out(
D\OutType::IMPLEMENT, $name, [
"class" => ImplementsTestInterface::class,
"position" => 0], []);
246 $implement2 =
new D\Out(
D\OutType::IMPLEMENT, $name, [
"class" => Implements2TestInterface::class,
"position" => 1], []);
248 $this->assertEquals(
new D\
OfComponent($component, $implement, $implement2), $result);
249 $this->assertCount(2, $result[(
string) $implement]);
254 $this->expectException(\LogicException::class);
256 $result = $this->reader->read(
new class () implements
Component {
257 public function init(
258 array | \ArrayAccess &$define,
259 array | \ArrayAccess &$implement,
260 array | \ArrayAccess &$use,
261 array | \ArrayAccess &$contribute,
262 array | \ArrayAccess &$seek,
263 array | \ArrayAccess &$provide,
264 array | \ArrayAccess &$pull,
265 array | \ArrayAccess &$internal,
267 $foo = $use[TestInterface::class];
274 $this->expectException(\LogicException::class);
276 $result = $this->reader->read(
new class () implements
Component {
277 public function init(
278 array | \ArrayAccess &$define,
279 array | \ArrayAccess &$implement,
280 array | \ArrayAccess &$use,
281 array | \ArrayAccess &$contribute,
282 array | \ArrayAccess &$seek,
283 array | \ArrayAccess &$provide,
284 array | \ArrayAccess &$pull,
285 array | \ArrayAccess &$internal,
287 $contribute[TestInterface::class] =
null;
294 $component =
new class () implements
Component {
295 public function init(
296 array | \ArrayAccess &$define,
297 array | \ArrayAccess &$implement,
298 array | \ArrayAccess &$use,
299 array | \ArrayAccess &$contribute,
300 array | \ArrayAccess &$seek,
301 array | \ArrayAccess &$provide,
302 array | \ArrayAccess &$pull,
303 array | \ArrayAccess &$internal,
308 $result = $this->reader->read($component);
310 $name = TestInterface::class;
311 $contribute =
new D\Out(
D\OutType::CONTRIBUTE, $name, [
"position" => 0], []);
313 $this->assertEquals(
new D\
OfComponent($component, $contribute), $result);
318 $this->expectException(\LogicException::class);
320 $result = $this->reader->read(
new class () implements
Component {
321 public function init(
322 array | \ArrayAccess &$define,
323 array | \ArrayAccess &$implement,
324 array | \ArrayAccess &$use,
325 array | \ArrayAccess &$contribute,
326 array | \ArrayAccess &$seek,
327 array | \ArrayAccess &$provide,
328 array | \ArrayAccess &$pull,
329 array | \ArrayAccess &$internal,
331 $contribute[TestInterface::class] = fn() =>
new class () {};
338 $component =
new class () implements
Component {
339 public function init(
340 array | \ArrayAccess &$define,
341 array | \ArrayAccess &$implement,
342 array | \ArrayAccess &$use,
343 array | \ArrayAccess &$contribute,
344 array | \ArrayAccess &$seek,
345 array | \ArrayAccess &$provide,
346 array | \ArrayAccess &$pull,
347 array | \ArrayAccess &$internal,
349 $contribute[TestInterface::class] = fn() =>
new ImplementsTestInterface($use[TestInterface::class], $seek[TestInterface::class], $pull[TestInterface::class], $internal[
"something"]);
353 $result = $this->reader->read($component);
355 $name = TestInterface::class;
356 $use =
new D\In(
D\InType::USE, $name);
357 $seek =
new D\In(
D\InType::SEEK, $name);
358 $pull =
new D\In(
D\InType::PULL, $name);
361 $contribute =
new D\Out(
D\OutType::CONTRIBUTE, $name, [
"position" => 0], [$use, $seek, $pull, $internal_in]);
363 $expected =
new D\OfComponent($component, $use, $seek, $pull, $internal_in, $internal_out, $contribute);
365 $this->assertEquals([$contribute], $result[(
string) $contribute]);
366 $this->assertEquals([$use], $result[(
string) $use]);
367 $this->assertEquals([$seek], $result[(
string) $seek]);
368 $this->assertEquals([$pull], $result[(
string) $pull]);
369 $this->assertEquals([$internal_in], $result[(
string) $internal_in]);
370 $this->assertEquals([$internal_out], $result[(
string) $internal_out]);
375 $this->expectException(\LogicException::class);
377 $result = $this->reader->read(
new class () implements
Component {
378 public function init(
379 array | \ArrayAccess &$define,
380 array | \ArrayAccess &$implement,
381 array | \ArrayAccess &$use,
382 array | \ArrayAccess &$contribute,
383 array | \ArrayAccess &$seek,
384 array | \ArrayAccess &$provide,
385 array | \ArrayAccess &$pull,
386 array | \ArrayAccess &$internal,
388 $foo = $seek[TestInterface::class];
395 $this->expectException(\LogicException::class);
397 $result = $this->reader->read(
new class () implements
Component {
398 public function init(
399 array | \ArrayAccess &$define,
400 array | \ArrayAccess &$implement,
401 array | \ArrayAccess &$use,
402 array | \ArrayAccess &$contribute,
403 array | \ArrayAccess &$seek,
404 array | \ArrayAccess &$provide,
405 array | \ArrayAccess &$pull,
406 array | \ArrayAccess &$internal,
408 $provide[TestInterface::class] =
null;
415 $component =
new class () implements
Component {
416 public function init(
417 array | \ArrayAccess &$define,
418 array | \ArrayAccess &$implement,
419 array | \ArrayAccess &$use,
420 array | \ArrayAccess &$contribute,
421 array | \ArrayAccess &$seek,
422 array | \ArrayAccess &$provide,
423 array | \ArrayAccess &$pull,
424 array | \ArrayAccess &$internal,
429 $result = $this->reader->read($component);
431 $name = TestInterface::class;
432 $provide =
new D\Out(
D\OutType::PROVIDE, $name,
null, []);
434 $this->assertEquals(
new D\
OfComponent($component, $provide), $result);
439 $this->expectException(\LogicException::class);
441 $result = $this->reader->read(
new class () implements
Component {
442 public function init(
443 array | \ArrayAccess &$define,
444 array | \ArrayAccess &$implement,
445 array | \ArrayAccess &$use,
446 array | \ArrayAccess &$contribute,
447 array | \ArrayAccess &$seek,
448 array | \ArrayAccess &$provide,
449 array | \ArrayAccess &$pull,
450 array | \ArrayAccess &$internal,
452 $provide[TestInterface::class] = fn() =>
new class () {};
459 $component =
new class () implements
Component {
460 public function init(
461 array | \ArrayAccess &$define,
462 array | \ArrayAccess &$implement,
463 array | \ArrayAccess &$use,
464 array | \ArrayAccess &$contribute,
465 array | \ArrayAccess &$seek,
466 array | \ArrayAccess &$provide,
467 array | \ArrayAccess &$pull,
468 array | \ArrayAccess &$internal,
470 $provide[TestInterface::class] = fn() =>
new ImplementsTestInterface($use[TestInterface::class], $seek[TestInterface::class], $pull[TestInterface::class], $internal[
"something"]);
475 $result = $this->reader->read($component);
477 $name = TestInterface::class;
478 $use =
new D\In(
D\InType::USE, $name);
479 $seek =
new D\In(
D\InType::SEEK, $name);
480 $pull =
new D\In(
D\InType::PULL, $name);
483 $provide =
new D\Out(
D\OutType::PROVIDE, $name,
null, [$use, $seek, $pull, $internal_in]);
485 $expected =
new D\OfComponent($component, $use, $seek, $pull, $internal_in, $internal_out, $provide);
487 $this->assertEquals($expected, $result);
489 $this->assertEquals([$provide], $result[(
string) $provide]);
490 $this->assertEquals([$use], $result[(
string) $use]);
491 $this->assertEquals([$seek], $result[(
string) $seek]);
492 $this->assertEquals([$pull], $result[(
string) $pull]);
493 $this->assertEquals([$internal_in], $result[(
string) $internal_in]);
494 $this->assertEquals([$internal_out], $result[(
string) $internal_out]);
499 $this->expectException(\LogicException::class);
501 $result = $this->reader->read(
new class () implements
Component {
502 public function init(
503 array | \ArrayAccess &$define,
504 array | \ArrayAccess &$implement,
505 array | \ArrayAccess &$use,
506 array | \ArrayAccess &$contribute,
507 array | \ArrayAccess &$seek,
508 array | \ArrayAccess &$provide,
509 array | \ArrayAccess &$pull,
510 array | \ArrayAccess &$internal,
512 $foo = $pull[TestInterface::class];
519 $this->expectException(\LogicException::class);
521 $raw_name =
"some_name";
523 $result = $this->reader->read(
new class ($raw_name) implements
Component {
525 protected string $raw_name
529 public function init(
530 array | \ArrayAccess &$define,
531 array | \ArrayAccess &$implement,
532 array | \ArrayAccess &$use,
533 array | \ArrayAccess &$contribute,
534 array | \ArrayAccess &$seek,
535 array | \ArrayAccess &$provide,
536 array | \ArrayAccess &$pull,
537 array | \ArrayAccess &$internal,
539 $internal[$this->raw_name] = fn() => $internal[$this->raw_name];
546 $raw_name =
"some_name";
549 $result = $this->reader->read(
new class ($raw_name,
$results) implements
Component {
551 protected string $raw_name,
556 public function init(
557 array | \ArrayAccess &$define,
558 array | \ArrayAccess &$implement,
559 array | \ArrayAccess &$use,
560 array | \ArrayAccess &$contribute,
561 array | \ArrayAccess &$seek,
562 array | \ArrayAccess &$provide,
563 array | \ArrayAccess &$pull,
564 array | \ArrayAccess &$internal,
566 $provide[TestInterface::class] = fn() =>
new class (
568 $use[TestInterface::class],
569 $seek[TestInterface::class],
570 $pull[TestInterface::class]
586 $this->assertInstanceOf(TestInterface::class,
$results[0]);
587 $this->assertEquals([],
$results[1]);
588 $this->assertInstanceOf(TestInterface::class,
$results[2]);
593 $raw_name =
"some_name";
596 $result = $this->reader->read(
new class ($raw_name,
$results) implements
Component {
598 protected string $raw_name,
603 public function init(
604 array | \ArrayAccess &$define,
605 array | \ArrayAccess &$implement,
606 array | \ArrayAccess &$use,
607 array | \ArrayAccess &$contribute,
608 array | \ArrayAccess &$seek,
609 array | \ArrayAccess &$provide,
610 array | \ArrayAccess &$pull,
611 array | \ArrayAccess &$internal,
613 $provide[TestInterface::class] = fn() =>
new class (
631 $internal[
"foo"] = fn() => $use[TestInterface::class];
632 $internal[
"bar"] = fn() => $seek[TestInterface::class];
633 $internal[
"baz"] = fn() => $pull[TestInterface2::class];
637 $this->assertInstanceOf(TestInterface::class,
$results[0]);
638 $this->assertEquals([],
$results[1]);
639 $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.
An public asset that is a resource of some component.
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