Skip to content
This repository has been archived by the owner on Jan 29, 2020. It is now read-only.

Commit

Permalink
Merged Source/Master
Browse files Browse the repository at this point in the history
  • Loading branch information
francisdaigle committed Mar 13, 2013
160 parents fc7c32a + 9e0f279 + a19bb44 + 8553b0b + 02a1820 + e9dd8c9 + 5b5a91a + db9fc36 + f8b7f2b + 09edbcb + 6a99da4 + 4a9dd4d + cc4af6e + 8a07675 + c30b083 + 0c6e411 + be4dae7 + 7465e5d + 1b64e7d + 1f50979 + 92b6722 + 1d54f79 + ab5cea3 + 4f0b000 + c18caa3 + 98036b5 + 3b5c10e + a248769 + 560d3a2 + ddfdb8f + fd4ce84 + 9e4c786 + 0c0695c + 500c51d + 2f2ebee + 145abe5 + bf5d8d7 + fe0fb99 + 5f7322a + c3af80d + cf95a03 + 6a80fae + 10ed584 + 053ab77 + 495f1ba + d688369 + 56b2490 + 47a689e + f52f94e + fec9c74 + 28a9d88 + ac66d19 + 041ae5a + 63454d4 + da02d07 + 698a4d6 + 35967e7 + 427640f + 64a533c + e408635 + c004297 + b38b581 + 9a9f950 + 47a731a + 0967316 + 37f548b + 0df2db0 + e43587e + 5784352 + 93b4f40 + 3208a48 + f5dfded + 8301af5 + d4a4329 + eaf7585 + 12feb56 + 387d3ed + eb7fedd + a9a0285 + 44fa883 + 08a171a + a4b0e54 + 730ce14 + c24c880 + 80e40b3 + 20961e5 + 8cb611e + c958861 + b8b41bc + f82d7c5 + 7784cd5 + 4ed737c + 785b23e + b537b08 + 34ecc47 + 45265ad + df6c341 + efa67eb + 736f9f8 + d3b33d9 + be06520 + be3997d + e7fb236 + 5b19875 + ed60259 + ae0af2f + 761379e + 118bbd6 + 9ce360b + 4d4425a + cc47b49 + c4aa2e1 + c152f67 + bd774aa + a95f940 + fb3126d + f420aa3 + 288aa3f + 9fa9257 + 82606a6 + cbe2b1f + 46ed6e3 + 085bc16 + 5f35882 + 61d8584 + 24a5c98 + c8f7092 + ebdb37c + 3c57460 + d38a8d4 + 5725284 + 9bc667a + 5eedb7e + 0e7a856 + 306f3e6 + 104e613 + d1f2eb1 + 5c87eda + 71d8d27 + a365923 + 7f777b6 + c62bcc9 + 4bd3bc3 + a183e11 + 84e6810 + edad949 + 043bfb5 + 8e6f606 + 1c2b629 + e4251d2 + e8c20f9 + 6de8d76 + e529dce + 24f43fa + 336bb38 + d86e872 + 41e010c + 6a5ab3d + ca50dd5 + 8b8277a commit 838aade
Show file tree
Hide file tree
Showing 6 changed files with 73 additions and 8 deletions.
4 changes: 2 additions & 2 deletions composer.json
Expand Up @@ -28,8 +28,8 @@
},
"extra": {
"branch-alias": {
"dev-master": "2.4-dev",
"dev-develop": "2.5-dev"
"dev-master": "2.1-dev",
"dev-develop": "2.2-dev"
}
},
"autoload-dev": {
Expand Down
2 changes: 1 addition & 1 deletion src/DefinitionList.php
Expand Up @@ -202,7 +202,7 @@ public function hasMethod($class, $method)

/** @var $definition Definition\DefinitionInterface */
foreach ($this as $definition) {
if ($definition->hasMethod($class, $method)) {
if ($definition->hasClass($class) && $definition->hasMethod($class, $method)) {
return true;
}
}
Expand Down
11 changes: 6 additions & 5 deletions src/Di.php
Expand Up @@ -163,13 +163,14 @@ public function get($name, array $params = array())
array_pop($this->instanceContext);
return $im->getSharedInstanceWithParameters(null, array(), $fastHash);
}
} else {
if ($im->hasSharedInstance($name, $callParameters)) {
array_pop($this->instanceContext);
return $im->getSharedInstance($name, $callParameters);
}
}

if ($im->hasSharedInstance($name, $callParameters)) {
array_pop($this->instanceContext);
return $im->getSharedInstance($name, $callParameters);
}


$config = $im->getConfig($name);
$instance = $this->newInstance($name, $params, $config['shared']);
array_pop($this->instanceContext);
Expand Down
13 changes: 13 additions & 0 deletions test/DefinitionListTest.php
Expand Up @@ -12,6 +12,7 @@

use Zend\Di\DefinitionList;
use Zend\Di\Definition\ClassDefinition;
use Zend\Di\Definition\BuilderDefinition;

use PHPUnit_Framework_TestCase as TestCase;

Expand Down Expand Up @@ -44,4 +45,16 @@ public function testHasMethod()

$this->assertTrue($definitionList->hasMethod('foo', 'doBar'));
}

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'));
}
}
29 changes: 29 additions & 0 deletions test/DiTest.php
Expand Up @@ -779,4 +779,33 @@ public function testDiWillInjectDefaultParameters()
$this->assertSame('defaultConstruct', $optionalParams->b);
$this->assertSame(array(), $optionalParams->c);
}

/**
* @group SharedInstance
*/
public function testGetWithParamsWillUseSharedInstance()
{
$di = new Di;

$sharedInstanceClass = 'ZendTest\Di\TestAsset\ConstructorInjection\A';
$retrievedInstanceClass = 'ZendTest\Di\TestAsset\ConstructorInjection\C';

// Provide definitions for $retrievedInstanceClass, but not for $sharedInstanceClass.
$arrayDefinition = array($retrievedInstanceClass => array (
'supertypes' => array ( ),
'instantiator' => '__construct',
'methods' => array ('__construct' => true),
'parameters' => array ( '__construct' => array (
"$retrievedInstanceClass::__construct:0" => array ('a', $sharedInstanceClass, true, NULL),
"$retrievedInstanceClass::__construct:1" => array ('params', NULL, false, array()),
)),
));

// This also disables scanning of class A.
$di->setDefinitionList(new DefinitionList(new Definition\ArrayDefinition($arrayDefinition)));

$di->instanceManager()->addSharedInstance(new $sharedInstanceClass, $sharedInstanceClass);
$returnedC = $di->get($retrievedInstanceClass, array('params' => array('test')));
$this->assertInstanceOf($retrievedInstanceClass, $returnedC);
}
}
22 changes: 22 additions & 0 deletions test/TestAsset/ConstructorInjection/C.php
@@ -0,0 +1,22 @@
<?php
/**
* Zend Framework (http://framework.zend.com/)
*
* @link http://github.com/zendframework/zf2 for the canonical source repository
* @copyright Copyright (c) 2005-2013 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
* @package Zend_Di
*/

namespace ZendTest\Di\TestAsset\ConstructorInjection;

class C
{
public $a = null;
public $params = array();
public function __construct(A $a, array $params = array())
{
$this->a = $a;
$this->params = $params;
}
}

0 comments on commit 838aade

Please sign in to comment.