public function testGetMethodParameters() { $definition = new ClassDefinition('Foo'); $definition->addMethodParameter("setVar", "var", array('type' => null, 'required' => true, 'default' => 'test')); $this->assertNull($definition->getMethodParameters("Bar", "setVar")); $this->assertEquals(array('Foo::setVar:var' => array("var", null, true, 'test')), $definition->getMethodParameters("Foo", "setVar")); }
public function testClassDefinitionHasMethods() { $definition = new ClassDefinition('Foo'); $this->assertFalse($definition->hasMethods('Foo')); $definition->addMethod('doBar'); $this->assertTrue($definition->hasMethods('Foo')); }
public function testHasMethodAvoidAskingFromDefinitionsWhichDoNotIncludeClass() { $builderDefinition = new BuilderDefinition(); $definitionClass = new ClassDefinition('foo'); $definitionClass->addMethod('doFoo'); $definitionList = new DefinitionList(array($builderDefinition, $definitionClass)); $this->assertTrue($definitionList->hasMethod('foo', 'doFoo')); }
public function testGetClassSupertypes() { $definitionClassA = new ClassDefinition("A"); $superTypesA = array("superA"); $definitionClassA->setSupertypes($superTypesA); $definitionClassB = new ClassDefinition("B"); $definitionClassB->setSupertypes(array("superB")); $definitionList = new DefinitionList(array($definitionClassA, $definitionClassB)); $this->assertEquals($superTypesA, $definitionList->getClassSupertypes("A")); }
public function testHasMethod() { $definitionClass = new ClassDefinition('foo'); $definitionClass->addMethod('doFoo'); $definitionList = new DefinitionList(array($definitionClass)); $this->assertTrue($definitionList->hasMethod('foo', 'doFoo')); $this->assertFalse($definitionList->hasMethod('foo', 'doBar')); $definitionClass->addMethod('doBar'); $this->assertTrue($definitionList->hasMethod('foo', 'doBar')); }
/** * @group ZF2-142 */ public function testDiWillInjectDefaultParameters() { $di = new Di(); $classDef = new Definition\ClassDefinition('ZendTest\\Di\\TestAsset\\ConstructorInjection\\OptionalParameters'); $classDef->addMethod('__construct', true); $classDef->addMethodParameter('__construct', 'a', array('type' => false, 'required' => false, 'default' => null)); $classDef->addMethodParameter('__construct', 'b', array('type' => false, 'required' => false, 'default' => 'defaultConstruct')); $classDef->addMethodParameter('__construct', 'c', array('type' => false, 'required' => false, 'default' => array())); $di->definitions()->addDefinition($classDef, false); $optionalParams = $di->newInstance('ZendTest\\Di\\TestAsset\\ConstructorInjection\\OptionalParameters'); $this->assertSame(null, $optionalParams->a); $this->assertSame('defaultConstruct', $optionalParams->b); $this->assertSame(array(), $optionalParams->c); }
public function testAddMethodSetsCorrectConstructorType() { $definition = new ClassDefinition('Foo'); $definition->addMethod('__construct'); $this->assertEquals(array('__construct' => Di::METHOD_IS_CONSTRUCTOR), $definition->getMethods('Foo')); }
/** * @group SetterInjection * @group SupertypeResolution */ public function testInjectionForSetterInjectionWillConsultSupertypeDefinitionInClassDefinition() { $di = new Di(); // for setter injection, the dependency is not required, thus it must be forced $classDef = new Definition\ClassDefinition('ZendTest\\Di\\TestAsset\\SetterInjection\\B'); $classDef->addMethod('setA', true); $di->definitions()->addDefinition($classDef, false); // top of stack b/c Runtime is already there $c = $di->get('ZendTest\\Di\\TestAsset\\SetterInjection\\C'); $this->assertInstanceOf('ZendTest\\Di\\TestAsset\\SetterInjection\\C', $c); $this->assertInstanceOf('ZendTest\\Di\\TestAsset\\SetterInjection\\A', $c->a); }
/** * @group ZF2-260 */ public function testDiWillInjectClassNameAsStringAtCallTime() { $di = new Di(); $classDef = new Definition\ClassDefinition('ZendTest\\Di\\TestAsset\\SetterInjection\\D'); $classDef->addMethod('setA', true); $classDef->addMethodParameter('setA', 'a', array('type' => false, 'required' => true)); $di->definitions()->addDefinition($classDef, false); $d = $di->get('ZendTest\\Di\\TestAsset\\SetterInjection\\D', array('a' => 'ZendTest\\Di\\TestAsset\\SetterInjection\\A')); $this->assertSame($d->a, 'ZendTest\\Di\\TestAsset\\SetterInjection\\A'); }
public function testDiWillInjectDependenciesForAlias() { $di = new Di; // for setter injection, the dependency is not required, thus it must be forced $classDef = new Definition\ClassDefinition('ZendTest\Di\TestAsset\SetterInjection\B'); $classDef->addMethod('setA', false); $classDef->addMethodParameter('setA', 'a', array('type' => 'ZendTest\Di\TestAsset\SetterInjection\A', 'required' => false)); $di->definitions()->addDefinition($classDef, false); $di->instanceManager()->addAlias('b_alias', 'ZendTest\Di\TestAsset\SetterInjection\B'); $di->instanceManager()->setInjections('b_alias', array('ZendTest\Di\TestAsset\SetterInjection\A')); $b = $di->get('b_alias'); $this->assertInstanceOf('ZendTest\Di\TestAsset\SetterInjection\A', $b->a); }
public function testInjectionCanHandleMultipleInjectionsWithMultipleArguments() { $definitionList = new DefinitionList(array($classdef = new Definition\ClassDefinition('ZendTest\\Di\\TestAsset\\InjectionClasses\\A'), new Definition\RuntimeDefinition())); $classdef->addMethod('injectSplitDependency'); $classdef->addMethodParameter('injectSplitDependency', 'b', array('required' => true, 'type' => 'ZendTest\\Di\\TestAsset\\InjectionClasses\\B')); $classdef->addMethodParameter('injectSplitDependency', 'somestring', array('required' => true, 'type' => null)); /** * First test that this works with a single call */ $di = new Di($definitionList); $di->instanceManager()->setInjections('ZendTest\\Di\\TestAsset\\InjectionClasses\\A', array('injectSplitDependency' => array('b' => 'ZendTest\\Di\\TestAsset\\InjectionClasses\\B', 'somestring' => 'bs-id'))); $a = $di->newInstance('ZendTest\\Di\\TestAsset\\InjectionClasses\\A'); $this->assertInstanceOf('ZendTest\\Di\\TestAsset\\InjectionClasses\\B', $a->bs[0]); $this->assertEquals('bs-id', $a->bs[0]->id); /** * Next test that this works with multiple calls */ $di = new Di($definitionList); $di->instanceManager()->setInjections('ZendTest\\Di\\TestAsset\\InjectionClasses\\A', array('injectSplitDependency' => array(array('b' => 'ZendTest\\Di\\TestAsset\\InjectionClasses\\B', 'somestring' => 'bs-id'), array('b' => 'ZendTest\\Di\\TestAsset\\InjectionClasses\\C', 'somestring' => 'bs-id-for-c')))); $a = $di->newInstance('ZendTest\\Di\\TestAsset\\InjectionClasses\\A'); $this->assertInstanceOf('ZendTest\\Di\\TestAsset\\InjectionClasses\\B', $a->bs[0]); $this->assertEquals('bs-id', $a->bs[0]->id); $this->assertInstanceOf('ZendTest\\Di\\TestAsset\\InjectionClasses\\C', $a->bs[1]); $this->assertEquals('bs-id-for-c', $a->bs[1]->id); }
public function testDiWillInjectDependenciesForInstance() { $di = new Di(); // for setter injection, the dependency is not required, thus it must be forced $classDef = new Definition\ClassDefinition('ZendTest\\Di\\TestAsset\\SetterInjection\\B'); $classDef->addMethod('setA', true); $di->definitions()->addDefinition($classDef, false); // top of stack b/c Runtime is already there $b = new TestAsset\SetterInjection\B(); $di->injectDependencies($b); $this->assertInstanceOf('ZendTest\\Di\\TestAsset\\SetterInjection\\A', $b->a); }