From 8b2b0771192390bd35dc327a03a50a7802a08124 Mon Sep 17 00:00:00 2001 From: Ber Clausen Date: Fri, 2 Nov 2012 19:23:39 -0300 Subject: [PATCH] Set::flatten() fails to generate keys when 'tip' value is an empty array. --- lib/Cake/Test/Case/Utility/HashTest.php | 16 +++++++++++++++- lib/Cake/Test/Case/Utility/SetTest.php | 16 ++++++++++++++++ lib/Cake/Utility/Hash.php | 2 +- 3 files changed, 32 insertions(+), 2 deletions(-) diff --git a/lib/Cake/Test/Case/Utility/HashTest.php b/lib/Cake/Test/Case/Utility/HashTest.php index 40fcd7b54..3b398d0d5 100644 --- a/lib/Cake/Test/Case/Utility/HashTest.php +++ b/lib/Cake/Test/Case/Utility/HashTest.php @@ -298,7 +298,6 @@ class HashTest extends CakeTestCase { 'Author' => array('id' => '3', 'user' => 'larry', 'password' => null), ) ); - $result = Hash::flatten($data); $expected = array( '0.Post.id' => '1', @@ -317,6 +316,21 @@ class HashTest extends CakeTestCase { ); $this->assertEquals($expected, $result); + $data = array( + array( + 'Post' => array('id' => '1', 'author_id' => null, 'title' => 'First Post'), + 'Author' => array(), + ) + ); + $result = Hash::flatten($data); + $expected = array( + '0.Post.id' => '1', + '0.Post.author_id' => null, + '0.Post.title' => 'First Post', + '0.Author' => array() + ); + $this->assertEquals($expected, $result); + $data = array( array('Post' => array('id' => 1)), array('Post' => array('id' => 2)), diff --git a/lib/Cake/Test/Case/Utility/SetTest.php b/lib/Cake/Test/Case/Utility/SetTest.php index 00d363dba..c49ec3278 100644 --- a/lib/Cake/Test/Case/Utility/SetTest.php +++ b/lib/Cake/Test/Case/Utility/SetTest.php @@ -3054,6 +3054,7 @@ class SetTest extends CakeTestCase { /** * Tests Set::flatten * + * @see Hash test cases, as Set::flatten() is just a proxy. * @return void */ public function testFlatten() { @@ -3064,6 +3065,21 @@ class SetTest extends CakeTestCase { $data[9] = 'Shemp'; $result = Set::flatten($data); $this->assertEquals($data, $result); + + $data = array( + array( + 'Post' => array('id' => '1', 'author_id' => null, 'title' => 'First Post'), + 'Author' => array(), + ) + ); + $result = Set::flatten($data); + $expected = array( + '0.Post.id' => '1', + '0.Post.author_id' => null, + '0.Post.title' => 'First Post', + '0.Author' => array() + ); + $this->assertEquals($expected, $result); } /** diff --git a/lib/Cake/Utility/Hash.php b/lib/Cake/Utility/Hash.php index fc133ff5f..8f01beb5d 100644 --- a/lib/Cake/Utility/Hash.php +++ b/lib/Cake/Utility/Hash.php @@ -527,7 +527,7 @@ class Hash { $element = $data[$key]; unset($data[$key]); - if (is_array($element)) { + if (is_array($element) && !empty($element)) { if (!empty($data)) { $stack[] = array($data, $path); }