/**
  * @test
  */
 public function If_a_service_requires_itself_in_its_init_function_this_is_not_considered_as_circular_reference()
 {
     // given
     $ServiceDefinitions = new ServiceDefinitions();
     $ServiceDefinitions->add(IdentifyingType::is(Type::fromName('tueena\\spec\\core\\stubs\\A')), ImplementingType::isTheSame(), InitFunction::is(function (A $A) {
     }));
     $Target = new ServiceDefinitionsValidator();
     // when, then
     $Target->validate($ServiceDefinitions);
 }
Пример #2
0
 /**
  * @test
  */
 public function If_a_service_is_not_defined_with_a_factory_function_the_constructor_of_that_service_gets_injected_with_the_required_services()
 {
     // given
     $serviceDefinitions = new ServiceDefinitions();
     $serviceDefinitions->add(IdentifyingType::is(Type::fromName('tueena\\spec\\core\\stubs\\D')), ImplementingType::isTheSame())->add(IdentifyingType::is(Type::fromName('tueena\\spec\\core\\stubs\\E')), ImplementingType::isTheSame());
     $ServiceFactory = new ServiceFactory($serviceDefinitions);
     $Target = new Injector($ServiceFactory);
     $PropertyDOfE = null;
     $Closure = function (\tueena\spec\core\stubs\E $E) use(&$PropertyDOfE) {
         $PropertyDOfE = $E->D;
     };
     // when
     $Target->resolve(new InjectionTargetClosure($Closure));
     // then
     $this->assertInstanceOf('tueena\\spec\\core\\stubs\\D', $PropertyDOfE);
 }
Пример #3
0
 /**
  * @test
  */
 public function The_init_function_can_be_injected()
 {
     // given
     $counter = 0;
     $ServiceDefinitions = new ServiceDefinitions();
     $ServiceDefinitions->add(IdentifyingType::is(Type::fromName('tueena\\spec\\core\\stubs\\A')), ImplementingType::isTheSame())->add(IdentifyingType::is(Type::fromName('tueena\\spec\\core\\stubs\\B')), ImplementingType::isTheSame(), InitFunction::is(function (A $A, B $B) use(&$counter) {
         $counter++;
     }));
     $Target = new ServiceFactory($ServiceDefinitions);
     $Injector = new Injector($Target);
     // when
     $Target->getService(Type::fromName('tueena\\spec\\core\\stubs\\B'), $Injector);
     // then
     //  We just have to ensure, the init function has been called. A and B must
     // have been injected.
     $this->AssertEquals(1, $counter);
 }
Пример #4
0
 /**
  * @test
  */
 public function The_getAll_method_returns_all_service_definitions()
 {
     // given
     $Target = new ServiceDefinitions();
     $Target->add(IdentifyingType::is(Type::fromName('tueena\\spec\\core\\stubs\\IMyService')), ImplementingType::isTheSame())->add(IdentifyingType::is(Type::fromName('tueena\\spec\\core\\stubs\\MyService')), ImplementingType::isTheSame());
     // when
     $result = $Target->getAll();
     // then
     $this->assertEquals(['tueena\\spec\\core\\stubs\\IMyService' => $Target->get(Type::fromName('tueena\\spec\\core\\stubs\\IMyService')), 'tueena\\spec\\core\\stubs\\MyService' => $Target->get(Type::fromName('tueena\\spec\\core\\stubs\\MyService'))], $result);
 }