[HttpKernel] added a unit test to demonstrate that passing objects works for inline controllers
This commit is contained in:
parent
70f3399f7e
commit
43ce368dea
|
@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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');
|
||||
|
|
Reference in New Issue