19 declare(strict_types=1);
    50         $this->reader = 
new D\Reader();
    55         $component = 
new class () implements 
Component {
    69         $result = $this->reader->read($component);
    71         $this->assertEquals(
new D\OfComponent($component), $result);
    76         $component = 
new class () implements 
Component {
    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(
   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(
   133                 $implement[TestInterface::class] = null;
   140         $component = 
new class () implements 
Component {
   141             public function init(
   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(
   177                 $implement[TestInterface::class] = fn() => 
new class () {};
   184         $component = 
new class () implements 
Component {
   185             public function init(
   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(
   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(
   265                 $foo = $use[TestInterface::class];
   272         $this->expectException(\LogicException::class);
   274         $result = $this->reader->read(
new class () implements 
Component {
   275             public function init(
   285                 $contribute[TestInterface::class] = null;
   292         $component = 
new class () implements 
Component {
   293             public function init(
   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(
   329                 $contribute[TestInterface::class] = fn() => 
new class () {};
   336         $component = 
new class () implements 
Component {
   337             public function init(
   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(
   386                 $foo = $seek[TestInterface::class];
   393         $this->expectException(\LogicException::class);
   395         $result = $this->reader->read(
new class () implements 
Component {
   396             public function init(
   406                 $provide[TestInterface::class] = null;
   413         $component = 
new class () implements 
Component {
   414             public function init(
   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(
   450                 $provide[TestInterface::class] = fn() => 
new class () {};
   457         $component = 
new class () implements 
Component {
   458             public function init(
   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(
   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(
   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(
   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(
   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]);
 testProvideWithWrongImplementation()
 
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,)
 
testContributeWithSimpleImplementation()
 
testReaderResolvesInternal()
 
testContributeWithElaborateImplementation()
 
testProvideWithoutImplementation()
 
testProvideWithSimpleImplementation()
 
testContributeWithoutImplementation()
 
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
 
testImplementWithoutImplementation()
 
testContributeWithWrongImplementation()
 
testImplementWithWrongImplementation()
 
testDefineWithNonMinimalImplementation()
 
__construct()
Constructor setup ILIAS global object  public. 
 
testProvideWithElaborateImplementation()
 
testImplementWithElaborateImplementation()
 
$a
thx to https://mlocati.github.io/php-cs-fixer-configurator for the examples 
 
testReaderProvidesMocks()
 
testImplementWithTwoImplementations()
 
testImplementWithSimpleImplementation()
 
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...