public function testArguments() { $argument = new DependencyCallArgument(); $call = new DependencyCall('methodName'); $call->addArgument($argument); $expected = array($argument); $this->assertEquals($expected, $call->getArguments()); $call->addArgument($argument); $expected[] = $argument; $this->assertEquals($expected, $call->getArguments()); $call->clearArguments(); $this->assertNull($call->getArguments()); }
public function testGetAll() { $interface = 'zibo\\core\\di\\TestInterface'; $token1 = 'test1'; $token2 = 'test2'; $id = 'id'; $construct1 = new DependencyCall('__construct'); $construct1->addArgument(new DependencyCallArgument('value', $token1)); $construct2 = new DependencyCall('__construct'); $construct2->addArgument(new DependencyCallArgument('value', $token2)); $dependency1 = new Dependency('zibo\\core\\di\\TestObject', $id); $dependency1->addCall($construct1); $dependency2 = new Dependency('zibo\\core\\di\\TestObject'); $dependency2->addCall($construct2); $container = new DependencyContainer(); $container->addDependency($interface, $dependency1); $container->addDependency($interface, $dependency2); $this->di->setContainer($container); $expected = array($id => new TestObject($token1), 0 => new TestObject($token2)); $result = $this->di->getAll($interface); $this->assertEquals($expected, $result); }
/** * Adds a call to this dependency. * @param DependencyCall $call The call to add * @return */ public function addCall(DependencyCall $call) { if ($call->getMethodName() == '__construct') { $this->constructorArguments = $call->getArguments(); return; } $this->calls[] = $call; }
/** * Reads the calls from the provided dependency element and adds them to * the dependency instance * @param zibo\core\di\Dependency $dependency * @param DOMElement $dependencyElement * @return null */ private function readCalls(Dependency $dependency, DOMElement $dependencyElement) { $calls = array(); $callElements = $dependencyElement->getElementsByTagName(self::TAG_CALL); foreach ($callElements as $callElement) { $methodName = $callElement->getAttribute(self::ATTRIBUTE_METHOD); $call = new DependencyCall($methodName); $argumentElements = $callElement->getElementsByTagName(self::TAG_ARGUMENT); foreach ($argumentElements as $argumentElement) { $type = $argumentElement->getAttribute(self::ATTRIBUTE_TYPE); $value = $argumentElement->getAttribute(self::ATTRIBUTE_VALUE); $extra = null; switch ($type) { case DependencyCallArgument::TYPE_DEPENDENCY: $id = $argumentElement->getAttribute(self::ATTRIBUTE_ID); if ($id) { $extra = $id; } break; case DependencyCallArgument::TYPE_CONFIG: if ($argumentElement->hasAttribute(self::ATTRIBUTE_DEFAULT_VALUE)) { $extra = $argumentElement->getAttribute(self::ATTRIBUTE_DEFAULT_VALUE); } break; } $call->addArgument(new DependencyCallArgument($type, $value, $extra)); } $dependency->addCall($call); } }