diff --git a/.travis.yml b/.travis.yml index 1130c2025fc..eede3fb3c9f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -16,5 +16,5 @@ script: - output=$(php php-cs-fixer.phar fix -v --dry-run --level=psr2 .); if [[ $output ]]; then while read -r line; do echo -e "\e[00;31m$line\e[00m"; done <<< "$output"; false; fi; notifications: - irc: "irc.freenode.org#zftalk.2" + irc: "irc.freenode.org#zftalk.dev" email: false diff --git a/library/Zend/Di/Definition/ClassDefinition.php b/library/Zend/Di/Definition/ClassDefinition.php index 58262eb5714..a3a5f007818 100644 --- a/library/Zend/Di/Definition/ClassDefinition.php +++ b/library/Zend/Di/Definition/ClassDefinition.php @@ -136,6 +136,9 @@ public function hasClass($class) */ public function getClassSupertypes($class) { + if ($this->class !== $class) { + return array(); + } return $this->supertypes; } @@ -144,6 +147,9 @@ public function getClassSupertypes($class) */ public function getInstantiator($class) { + if ($this->class !== $class) { + return null; + } return $this->instantiator; } @@ -160,6 +166,9 @@ public function hasMethods($class) */ public function getMethods($class) { + if ($this->class !== $class) { + return array(); + } return $this->methods; } @@ -168,6 +177,10 @@ public function getMethods($class) */ public function hasMethod($class, $method) { + if ($this->class !== $class) { + return null; + } + if (is_array($this->methods)) { return array_key_exists($method, $this->methods); } else { @@ -180,6 +193,9 @@ public function hasMethod($class, $method) */ public function hasMethodParameters($class, $method) { + if ($this->class !== $class) { + return false; + } return (array_key_exists($method, $this->methodParameters)); } @@ -188,6 +204,10 @@ public function hasMethodParameters($class, $method) */ public function getMethodParameters($class, $method) { + if ($this->class !== $class) { + return null; + } + if (array_key_exists($method, $this->methodParameters)) { return $this->methodParameters[$method]; } diff --git a/library/Zend/Di/DefinitionList.php b/library/Zend/Di/DefinitionList.php index 345bbc9425c..0ab0c411571 100644 --- a/library/Zend/Di/DefinitionList.php +++ b/library/Zend/Di/DefinitionList.php @@ -144,9 +144,13 @@ public function getClassSupertypes($class) $supertypes = array(); /** @var $definition Definition\DefinitionInterface */ foreach ($this as $definition) { - $supertypes = array_merge($supertypes, $definition->getClassSupertypes($class)); + if ($definition->hasClass($class)) { + $supertypes = array_merge($supertypes, $definition->getClassSupertypes($class)); + if (!$definition instanceof Definition\PartialMarker) { + return $supertypes; + } + } } - // @todo remove duplicates? return $supertypes; } diff --git a/tests/ZendTest/Di/Definition/ClassDefinitionTest.php b/tests/ZendTest/Di/Definition/ClassDefinitionTest.php index 39625a7c9a2..8dc2ac399c6 100644 --- a/tests/ZendTest/Di/Definition/ClassDefinitionTest.php +++ b/tests/ZendTest/Di/Definition/ClassDefinitionTest.php @@ -27,4 +27,52 @@ public function testClassDefinitionHasMethods() $definition->addMethod('doBar'); $this->assertTrue($definition->hasMethods('Foo')); } + + public function testGetClassSupertypes() + { + $definition = new ClassDefinition('Foo'); + $definition->setSupertypes(array('superFoo')); + $this->assertEquals(array(), $definition->getClassSupertypes('Bar')); + $this->assertEquals(array('superFoo'), $definition->getClassSupertypes('Foo')); + } + + public function testGetInstantiator() + { + $definition = new ClassDefinition('Foo'); + $definition->setInstantiator('__construct'); + $this->assertNull($definition->getInstantiator('Bar')); + $this->assertEquals('__construct', $definition->getInstantiator('Foo')); + } + + public function testGetMethods() + { + $definition = new ClassDefinition('Foo'); + $definition->addMethod("setVar", true); + $this->assertEquals(array(), $definition->getMethods('Bar')); + $this->assertEquals(array('setVar' => true), $definition->getMethods('Foo')); + } + + public function testHasMethod() + { + $definition = new ClassDefinition('Foo'); + $definition->addMethod("setVar", true); + $this->assertNull($definition->hasMethod('Bar', "setVar")); + $this->assertTrue($definition->hasMethod('Foo', "setVar")); + } + + public function testHasMethodParameters() + { + $definition = new ClassDefinition('Foo'); + $definition->addMethodParameter("setVar", "var", array(null, true)); + $this->assertFalse($definition->hasMethodParameters("Bar", "setVar")); + $this->assertTrue($definition->hasMethodParameters("Foo", "setVar")); + } + + public function testGetMethodParameters() + { + $definition = new ClassDefinition('Foo'); + $definition->addMethodParameter("setVar", "var", array('type' => null, 'required' => true)); + $this->assertNull($definition->getMethodParameters("Bar", "setVar")); + $this->assertEquals(array('Foo::setVar:var' => array("var", null, true)), $definition->getMethodParameters("Foo", "setVar")); + } } diff --git a/tests/ZendTest/Di/DefinitionListTest.php b/tests/ZendTest/Di/DefinitionListTest.php new file mode 100644 index 00000000000..16b83f79e97 --- /dev/null +++ b/tests/ZendTest/Di/DefinitionListTest.php @@ -0,0 +1,35 @@ +setSupertypes($superTypesA); + + $definitionClassB = new ClassDefinition("B"); + $definitionClassB->setSupertypes(array("superB")); + + $definitionList = new DefinitionList(array($definitionClassA, $definitionClassB)); + + $this->assertEquals($superTypesA, $definitionList->getClassSupertypes("A")); + + } +}