public function testAliasProviderLazy() { $injector = new Injector(null); $injector->providers([Engine::class => ClassProvider::init(Engine::class)->lazy(), "AAA" => AliasProvider::init(Engine::class)]); $engine = $injector->get('AAA'); $this->assertInstanceOf(Engine::class, $engine); }
public function testProvidersSingletonLazy() { // Arrange $injector = new Injector(null); $injector->providers(['BASE_URL' => ValueProvider::init('http://sysvyz.org/')->singleton()->lazy()]); $this->assertEquals($injector->{'BASE_URL'}, 'http://sysvyz.org/'); }
public function testProvidersSingletonLazy() { $injector = new Injector(null); $injector->providers(['tire' => ValueFactoryProvider::init(function () { return new Tire(); })->lazy()->singleton()]); $this->assertEquals($injector->{'tire'}->type, 'Tire'); $injector->{'tire'}->a = "a"; $this->assertEquals($injector->{'tire'}->a, 'a'); $this->assertNotSame($injector->{'tire'}, $injector->{'tire'}); $this->assertNotInstanceOf(Tire::class, $injector->{'tire'}); $this->assertInstanceOf(LazyProxyObject::class, $injector->{'tire'}); $this->assertInstanceOf(Tire::class, $injector->{'tire'}->getInstance()); $this->assertSame($injector->{'tire'}->getInstance(), $injector->{'tire'}->getInstance()); }
public function testProvidersLazySingleton2() { // Arrange $injector = new Injector(null); $injector->providers([Tire::class => ClassProvider::init(HeavyTire::class)->singleton()->lazy()]); /** @var Tire|ProxyTrait $entity */ $entity = $injector->{Tire::class}; $this->assertInstanceOf(Tire::class, $entity); $this->assertInstanceOf(HeavyTire::class, $entity); //not $this->assertEquals($entity->type, 'HeavyTire'); $this->assertSame($entity->getInstance(), $injector->{Tire::class}->getInstance()); $entity->a = "a"; $this->assertEquals("a", $injector->{Tire::class}->a); }
public function testNonInjectableDependencyFail() { // Arrange $injector = new Injector(null); $injector->providers([NonInjectableWrapper::class => ClassProvider::init(NonInjectableWrapper::class)]); /** @var NonInjectableWrapper $wrapper */ try { $wrapper = $injector->get(NonInjectableWrapper::class); $this->assertTrue(false); } catch (InjectableException $e) { $this->assertTrue(true); } }
public function testMultiple() { // Arrange $injector = new Injector(null); $injector->providers([Engine::class => ClassProvider::init(Engine::class)]); /** @var Engine $engine */ $engine = $injector->get(Engine::class); /** @var Engine $engine2 */ $engine2 = $injector->get(Engine::class); $this->assertNotSame($engine, $engine2); }