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()
testImplementWithoutImplementation()
testContributeWithWrongImplementation()
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
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()