diff --git a/lib/Cake/Test/Case/View/XmlViewTest.php b/lib/Cake/Test/Case/View/XmlViewTest.php index fff3b93b51a..36f72a31cef 100644 --- a/lib/Cake/Test/Case/View/XmlViewTest.php +++ b/lib/Cake/Test/Case/View/XmlViewTest.php @@ -43,9 +43,27 @@ public function testRenderWithoutView() { $View = new XmlView($Controller); $output = $View->render(false); - $expected = '' . "\n" . 'user1user2'; - $this->assertTextEquals($expected, trim($output)); - $this->assertIdentical('application/xml', $Response->type()); + $this->assertSame(Xml::build($data)->asXML(), $output); + $this->assertSame('application/xml', $Response->type()); + + $data = array( + array( + 'User' => array( + 'username' => 'user1' + ) + ), + array( + 'User' => array( + 'username' => 'user2' + ) + ) + ); + $Controller->set(array('users' => $data, '_serialize' => 'users')); + $View = new XmlView($Controller); + $output = $View->render(false); + + $expected = Xml::build(array('response'=> array('users'=> $data)))->asXML(); + $this->assertSame($expected, $output); } /** @@ -100,9 +118,12 @@ public function testRenderWithView() { $View = new XmlView($Controller); $output = $View->render('index'); - $expected = 'user1user2'; - $this->assertIdentical($expected, str_replace(array("\r", "\n"), '', $output)); - $this->assertIdentical('application/xml', $Response->type()); + $expected = array( + 'users'=> array('user'=> array('user1', 'user2')) + ); + $expected = Xml::build($expected)->asXML(); + $this->assertSame($expected, $output); + $this->assertSame('application/xml', $Response->type()); $this->assertInstanceOf('HelperCollection', $View->Helpers); } diff --git a/lib/Cake/View/XmlView.php b/lib/Cake/View/XmlView.php index dcaa7019a77..2527d11b331 100644 --- a/lib/Cake/View/XmlView.php +++ b/lib/Cake/View/XmlView.php @@ -26,7 +26,7 @@ * * `$this->set(array('posts' => $posts, '_serialize' => 'posts'));` * - * When the view is rendered, the `$posts` view variable will be serialized + * When the view is rendered, the `$posts` view variable will be serialized * into XML. * * **Note** The view variable you specify must be compatible with Xml::fromArray(). @@ -38,7 +38,7 @@ * $this->set(compact('posts', 'users', 'stuff')); * $this->set('_serialize', array('posts', 'users')); * }}} - * + * * The above would generate a XML object that looks like: * * `......` @@ -75,8 +75,8 @@ public function __construct(Controller $controller = null) { * Render a XML view. * * Uses the special '_serialize' parameter to convert a set of - * view variables into a XML response. Makes generating simple - * XML responses very easy. You can omit the '_serialize' parameter, + * view variables into a XML response. Makes generating simple + * XML responses very easy. You can omit the '_serialize' parameter, * and use a normal view + layout as well. * * @param string $view The view being rendered. @@ -93,6 +93,9 @@ public function render($view = null, $layout = null) { } } else { $data = isset($this->viewVars[$serialize]) ? $this->viewVars[$serialize] : null; + if (is_array($data) && Set::numeric(array_keys($data))) { + $data = array('response' => array($serialize => $data)); + } } $content = Xml::fromArray($data)->asXML(); $this->Blocks->set('content', $content);