/** * @group 2463 */ public function testRecursesJsonModelChildrenWhenRendering() { $root = new JsonModel(array('foo' => 'bar')); $child1 = new JsonModel(array('foo' => 'bar')); $child2 = new JsonModel(array('foo' => 'bar')); $child1->setCaptureTo('child1'); $child2->setCaptureTo('child2'); $root->addChild($child1)->addChild($child2); $expected = array('foo' => 'bar', 'child1' => array('foo' => 'bar'), 'child2' => array('foo' => 'bar')); $test = $this->renderer->render($root); $this->assertEquals(json_encode($expected), $test); }
public function testChildrenMayInvokeDifferentRenderingStrategiesThanParents() { $this->view->addRenderingStrategy(function ($e) { $model = $e->getModel(); if (!$model instanceof ViewModel) { return; } return new TestAsset\Renderer\VarExportRenderer(); }); $this->view->addRenderingStrategy(function ($e) { $model = $e->getModel(); if (!$model instanceof JsonModel) { return; } return new Renderer\JsonRenderer(); }, 10); // higher priority, so it matches earlier $this->result = $result = new stdClass(); $this->view->addResponseStrategy(function ($e) use($result) { $result->content = $e->getResult(); }); $child1 = new ViewModel(array('foo' => 'bar')); $child1->setCaptureTo('child1'); $child2 = new JsonModel(array('bar' => 'baz')); $child2->setCaptureTo('child2'); $child2->setTerminal(false); $this->model->setVariable('parent', 'node'); $this->model->addChild($child1); $this->model->addChild($child2); $this->view->render($this->model); $expected = var_export(new ViewVariables(array('parent' => 'node', 'child1' => var_export(array('foo' => 'bar'), true), 'child2' => json_encode(array('bar' => 'baz')))), true); $this->assertEquals($expected, $this->result->content); }