From ecb9cb2dfe9230dd7132992075764987bbd0d22a Mon Sep 17 00:00:00 2001 From: Roland Gruber Date: Sun, 29 Apr 2018 19:21:49 +0200 Subject: [PATCH] tests for masort() --- lam/templates/3rdParty/pla/lib/functions.php | 8 +- lam/tests/lib/3rdParty/pla/functionsTest.php | 168 +++++++++++++++++++ 2 files changed, 169 insertions(+), 7 deletions(-) create mode 100644 lam/tests/lib/3rdParty/pla/functionsTest.php diff --git a/lam/templates/3rdParty/pla/lib/functions.php b/lam/templates/3rdParty/pla/lib/functions.php index 22f872a7..cef6da82 100644 --- a/lam/templates/3rdParty/pla/lib/functions.php +++ b/lam/templates/3rdParty/pla/lib/functions.php @@ -888,9 +888,6 @@ function masort(&$data,$sortby,$rev=0) { # if the array to sort is null or empty if (! $data) return; - static $CACHE = array(); - - if (empty($CACHE[$sortby])) { $code = "\$c=0;\n"; foreach (explode(',',$sortby) as $key) { @@ -962,10 +959,7 @@ function masort(&$data,$sortby,$rev=0) { $code .= 'return $c;'; - $CACHE[$sortby] = create_function('$a, $b',$code); - } - - uasort($data,$CACHE[$sortby]); + uasort($data, create_function('$a, $b',$code)); } /** diff --git a/lam/tests/lib/3rdParty/pla/functionsTest.php b/lam/tests/lib/3rdParty/pla/functionsTest.php new file mode 100644 index 00000000..1d35cf31 --- /dev/null +++ b/lam/tests/lib/3rdParty/pla/functionsTest.php @@ -0,0 +1,168 @@ + array('key1' => '1'), + 'b' => array('key1' => '5', 'key2' => 3), + 'c' => array('key1' => '2'), + 'd' => array('key1' => '3'), + ); + + masort($data, 'key1', 0); + + $dataWanted = array( + 'a' => array('key1' => '1'), + 'c' => array('key1' => '2'), + 'd' => array('key1' => '3'), + 'b' => array('key1' => '5', 'key2' => 3), + ); + + $this->compareArray($dataWanted, $data); + } + + public function test_masortRev() { + $data = array( + 'a' => array('key1' => '1'), + 'b' => array('key1' => '5', 'key2' => 3), + 'c' => array('key1' => '2'), + 'd' => array('key1' => '3'), + ); + + masort($data, 'key1', true); + + $dataWanted = array( + 'b' => array('key1' => '5', 'key2' => 3), + 'd' => array('key1' => '3'), + 'c' => array('key1' => '2'), + 'a' => array('key1' => '1'), + ); + + $this->compareArray($dataWanted, $data); + } + + public function test_masortPartialData() { + $data = array( + 'a' => array('key1' => '1'), + 'b' => array('key1' => '5', 'key2' => 3), + 'c' => array('key1' => '2'), + 'd' => array('key1' => '3'), + ); + + masort($data, 'key2', 0); + + $dataWanted = array( + 'b' => array('key1' => '5', 'key2' => 3), + 'a' => array('key1' => '1'), + 'c' => array('key1' => '2'), + 'd' => array('key1' => '3'), + ); + + $this->compareArray($dataWanted, $data); + } + + public function test_masortMultiSort() { + $data = array( + 'a' => array('key1' => '1', 'key2' => 4), + 'b' => array('key1' => '5', 'key2' => 3), + 'c' => array('key1' => '1', 'key2' => 1), + 'd' => array('key1' => '5', 'key2' => 2), + 'e' => array('key1' => '6', 'key2' => 2), + ); + + masort($data, 'key1,key2', 0); + + $dataWanted = array( + 'c' => array('key1' => '1', 'key2' => 1), + 'a' => array('key1' => '1', 'key2' => 4), + 'd' => array('key1' => '5', 'key2' => 2), + 'b' => array('key1' => '5', 'key2' => 3), + 'e' => array('key1' => '6', 'key2' => 2), + ); + + $this->compareArray($dataWanted, $data); + } + + public function test_masortObject() { + $data = array( + 'a' => (object) ['key1' => '1'], + 'b' => (object) ['key1' => '5', 'key2' => 3], + 'c' => (object) ['key1' => '2'], + 'd' => (object) ['key1' => '3'], + ); + + masort($data, 'key1', 0); + + $dataWanted = array( + 'a' => (object) ['key1' => '1'], + 'c' => (object) ['key1' => '2'], + 'd' => (object) ['key1' => '3'], + 'b' => (object) ['key1' => '5', 'key2' => 3], + ); + + $this->compareArray($dataWanted, $data); + } + + private function compareArray($dataWanted, $dataNew) { + $this->assertEquals(sizeof($dataWanted), sizeof($dataNew)); + $keysWanted = array_keys($dataWanted); + $keysNew = array_keys($dataNew); + foreach ($keysWanted as $index => $key) { + if (is_array($dataWanted[$key])) { + $this->compareArray($dataWanted[$key], $dataNew[$keysNew[$index]]); + } + elseif (is_object($dataWanted[$key])) { + $this->compareObject($dataWanted[$key], $dataNew[$keysNew[$index]]); + } + else { + $this->assertEquals($dataWanted[$key], $dataNew[$keysNew[$index]]); + } + } + } + + private function compareObject($dataWanted, $dataNew) { + $membersWanted = get_object_vars($dataWanted); + $membersNew = get_object_vars($dataNew); + $this->assertEquals(sizeof($membersWanted), sizeof($membersNew)); + foreach ($membersWanted as $name => $value) { + if (is_array($dataWanted->$name)) { + $this->compareArray($dataWanted->$name, $dataNew->$name); + } + else { + $this->assertEquals($dataWanted->$name, $dataNew->$name); + } + } + } + +} + +?>