Skip to content

Commit

Permalink
Merge pull request #48 from Ocramius/hotfix/issue-#47-hydrator-factor…
Browse files Browse the repository at this point in the history
…y-reflection-properties

Hotfix for #47 - reflection properties indexes are wrong
  • Loading branch information
Ocramius committed Jun 4, 2013
2 parents 8b235ca + 5388d5f commit 2494909
Show file tree
Hide file tree
Showing 2 changed files with 108 additions and 1 deletion.
9 changes: 8 additions & 1 deletion src/ProxyManager/Factory/HydratorFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,14 @@ public function createProxy($className)
$this->configuration->getProxyAutoloader()->__invoke($proxyClassName);
}

$reflectionProperties = $reflection->getProperties();
/* @var $properties \ReflectionProperty[] */
$properties = $reflection->getProperties();
$reflectionProperties = array();

foreach ($properties as $property) {
$reflectionProperties[$property->getName()] = $property;
}

$this->reflectionProperties[$className] = $reflectionProperties;

return $this->hydrators[$className] = new $proxyClassName($reflectionProperties);
Expand Down
100 changes: 100 additions & 0 deletions tests/ProxyManagerTest/Factory/HydratorFactoryFunctionalTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
<?php
/*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* This software consists of voluntary contributions made by many individuals
* and is licensed under the MIT license.
*/

namespace ProxyManagerTest\Factory;

use PHPUnit_Framework_TestCase;
use ProxyManager\Configuration;
use ProxyManager\Factory\HydratorFactory;
use ProxyManager\Factory\LazyLoadingValueHolderFactory;
use ProxyManager\Generator\ClassGenerator;
use ProxyManager\GeneratorStrategy\EvaluatingGeneratorStrategy;
use ReflectionClass;
use Zend\Code\Reflection\ClassReflection;

/**
* Integration tests for {@see \ProxyManager\Factory\HydratorFactory}
*
* @author Marco Pivetta <[email protected]>
* @license MIT
*
* @group Functional
*/
class HydratorFactoryFunctionalTest extends PHPUnit_Framework_TestCase
{
/**
* @var \ProxyManager\Factory\HydratorFactory
*/
protected $factory;

/**
* @var \ProxyManager\Configuration
*/
protected $config;

/**
* @var string
*/
protected $generatedClassName;

/**
* {@inheritDoc}
*/
public function setUp()
{
$this->config = new Configuration();
$this->factory = new HydratorFactory($this->config);

$generator = new EvaluatingGeneratorStrategy();
$this->generatedClassName = 'foo' . uniqid();
$proxiedClass = ClassGenerator::fromReflection(
new ClassReflection('ProxyManagerTestAsset\\ClassWithMixedProperties')
);

$proxiedClass->setName($this->generatedClassName);
$proxiedClass->setNamespaceName(null);
$generator->generate($proxiedClass); // evaluating the generated class

$this->config->setGeneratorStrategy($generator);
}

/**
* @covers \ProxyManager\Factory\HydratorFactory::__construct
* @covers \ProxyManager\Factory\HydratorFactory::createProxy
*/
public function testWillGenerateValidProxy()
{
$this->assertInstanceOf(
'Zend\\Stdlib\\Hydrator\\HydratorInterface',
$this->factory->createProxy($this->generatedClassName)
);
}

/**
* @covers \ProxyManager\Factory\HydratorFactory::__construct
* @covers \ProxyManager\Factory\HydratorFactory::createProxy
*/
public function testWillCacheProxyInstancesProxy()
{
$this->assertSame(
$this->factory->createProxy($this->generatedClassName),
$this->factory->createProxy($this->generatedClassName),
'Hydrator instances are cached'
);
}
}

0 comments on commit 2494909

Please sign in to comment.