function testExplicitlyNamedVariables() { $injector = new Phemto(); $injector->forVariable('first')->willUse('phemto\\acceptance\\NeededForFirst'); $injector->forVariable('second')->willUse('phemto\\acceptance\\NeededForSecond'); $this->assertEquals($injector->create('phemto\\acceptance\\VariablesInConstructor'), new VariablesInConstructor(new NeededForFirst(), new NeededForSecond())); }
public function testUsingApplicationConfigValue() { $injector = new Phemto(); $injector->forVariable(ConfigValue::CONFIG_NAME)->willUse(SomeApplicationConfig::class); $injector->forVariable('property')->useConfig('config_param1'); $object = $injector->create(SomeClassNeedConfigValue::class); $this->assertEquals((new SomeApplicationConfig())->data['config_param1'], $object->property); }
public function testInstantiateListOfDependenciesDeclareInTopContext() { $injector = new Phemto(); $injector->forVariable('dependencies')->willUse(new ListOf(AutomaticallyInstantiatedDependency::class)); $object = $injector->create(RequiresDependencies::class); $this->assertInstanceOf(AutomaticallyInstantiatedDependency::class, $object->dependencies[0]); }
function testSetterInjectionStopsAtFirstMissingArgument() { $injector = new Phemto(); $injector->forVariable('maybe')->willUse('phemto\\acceptance\\MaybeThis'); $injector->forVariable('unlikely')->willUse('phemto\\acceptance\\MaybeThis'); $injector->forType('phemto\\acceptance\\OptionalArgumentsInSetter')->call('readyToGo'); $expected = new OptionalArgumentsInSetter(); $expected->readyToGo(new MaybeThis(), null, new MaybeThis()); $this->assertEquals($injector->create('phemto\\acceptance\\OptionalArgumentsInSetter'), $expected); }
function testInjectingString() { $injector = new Phemto(); $injector->forVariable('thing')->useString('100'); $this->assertEquals($injector->create('phemto\\acceptance\\WrapAnything'), new WrapAnything('100')); }