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);
 }
示例#3
0
 /**
  * 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);
     }
 }