[HttpKernel] added a unit test to demonstrate that passing objects works for inline controllers

This commit is contained in:
Fabien Potencier 2013-07-08 09:58:33 +02:00
parent 70f3399f7e
commit 43ce368dea
3 changed files with 40 additions and 8 deletions

View File

@ -64,13 +64,11 @@ abstract class RoutableFragmentRenderer implements FragmentRendererInterface
private function checkNonScalar($values)
{
foreach ($values as $value) {
foreach ($values as $key => $value) {
if (is_array($value)) {
$this->checkNonScalar($value);
}
if (!is_scalar($value)) {
throw new \LogicException('Controller attributes cannot contain non-scalar values.');
} elseif (!is_scalar($value)) {
throw new \LogicException(sprintf('Controller attributes cannot contain non-scalar values (value for key "%s" is not a scalar).', $key));
}
}
}

View File

@ -71,6 +71,24 @@ class InlineFragmentRendererTest extends \PHPUnit_Framework_TestCase
$strategy->render(new ControllerReference('main_controller', array('object' => $object), array()), Request::create('/'));
}
public function testRenderWithObjectsAsAttributesPassedAsObjectsInTheController()
{
$resolver = $this->getMock('Symfony\\Component\\HttpKernel\\Controller\\ControllerResolver', array('getController'));
$resolver
->expects($this->once())
->method('getController')
->will($this->returnValue(function (\stdClass $object, Bar $object1) {
return new Response($object1->getBar());
}))
;
$kernel = new HttpKernel(new EventDispatcher(), $resolver);
$renderer = new InlineFragmentRenderer($kernel);
$response = $renderer->render(new ControllerReference('main_controller', array('object' => new \stdClass(), 'object1' => new Bar()), array()), Request::create('/'));
$this->assertEquals('bar', $response->getContent());
}
/**
* @expectedException \RuntimeException
*/
@ -168,3 +186,12 @@ class InlineFragmentRendererTest extends \PHPUnit_Framework_TestCase
$strategy->render('/', $request);
}
}
class Bar {
public $bar = 'bar';
public function getBar()
{
return $this->bar;
}
}

View File

@ -47,14 +47,21 @@ class RoutableFragmentRendererTest extends \PHPUnit_Framework_TestCase
/**
* @expectedException LogicException
* @dataProvider getGenerateFragmentUriDataWithNonScalar
*/
public function testGenerateFragmentUriWithObject()
public function testGenerateFragmentUriWithNonScalar($controller)
{
$controller = new ControllerReference('controller', array('foo' => new Foo(), 'bar' => 'bar'), array());
$this->callGenerateFragmentUriMethod($controller, Request::create('/'));
}
public function getGenerateFragmentUriDataWithNonScalar()
{
return array(
array(new ControllerReference('controller', array('foo' => new Foo(), 'bar' => 'bar'), array())),
array(new ControllerReference('controller', array('foo' => array('foo' => 'foo'), 'bar' => array('bar' => new Foo())), array())),
);
}
private function callGenerateFragmentUriMethod(ControllerReference $reference, Request $request)
{
$renderer = $this->getMockForAbstractClass('Symfony\Component\HttpKernel\Fragment\RoutableFragmentRenderer');