Follow-up to bugfix #9779: Modified the limit argument in t3lib_div::trimExplode...
authorOliver Hader <oliver.hader@typo3.org>
Tue, 20 Oct 2009 10:49:36 +0000 (10:49 +0000)
committerOliver Hader <oliver.hader@typo3.org>
Tue, 20 Oct 2009 10:49:36 +0000 (10:49 +0000)
git-svn-id: https://svn.typo3.org/TYPO3v4/Core/trunk@6180 709f56b5-9817-0410-a4d7-c38de5d9e867

ChangeLog
t3lib/class.t3lib_div.php
tests/t3lib/t3lib_div_testcase.php

index babe893..399a3b9 100755 (executable)
--- a/ChangeLog
+++ b/ChangeLog
@@ -2,6 +2,7 @@
 
        * Cleanup #12278: Move t3lib_matchCondition::whichDevice() to t3lib_utility_Client::getDeviceType()
        * Follow-up to test #12153: Added test cases for empty comparison in globalVar condition
+       * Follow-up to bugfix #9779: Modified the limit argument in t3lib_div::trimExplode() to behave as the regular explode() function does
 
 2009-10-20  Rupert Germann  <rupi@gmx.li>
 
index 991a7a1..156daa0 100644 (file)
@@ -1756,7 +1756,13 @@ final class t3lib_div {
                }
 
                if ($limit != 0) {
-                       $result = array_slice($result, 0, $limit);
+                       if ($limit < 0) {
+                               $result = array_slice($result, 0, $limit);
+                       } elseif (count($result) > $limit) {
+                               $lastElements = array_slice($result, $limit - 1);
+                               $result = array_slice($result, 0, $limit - 1);
+                               $result[] = implode($delim, $lastElements);
+                       }
                }
 
                return $result;
index 4088aca..eefeb3e 100644 (file)
@@ -68,9 +68,9 @@ class t3lib_div_testcase extends tx_phpunit_testcase {
        /**
         * @test
         */
-       public function checkTrimExplodeLimitsResultsToFirstXElementsWithPositiveParameter() {
+       public function checkTrimExplodeKeepsRemainingResultsWithEmptyItemsAfterReachingLimitWithPositiveParameter() {
                $testString = ' a , b , c , , d,, ,e ';
-               $expectedArray = array('a', 'b', 'c'); // limiting returns the rest of the string as the last element
+               $expectedArray = array('a', 'b', 'c,,d,,,e'); // limiting returns the rest of the string as the last element
                $actualArray = t3lib_div::trimExplode(',', $testString, false, 3);
 
                $this->assertEquals($expectedArray, $actualArray);
@@ -79,7 +79,29 @@ class t3lib_div_testcase extends tx_phpunit_testcase {
        /**
         * @test
         */
-       public function checkTrimExplodeLimitsResultsToLastXElementsWithNegativeParameter() {
+       public function checkTrimExplodeKeepsRemainingResultsWithoutEmptyItemsAfterReachingLimitWithPositiveParameter() {
+               $testString = ' a , b , c , , d,, ,e ';
+               $expectedArray = array('a', 'b', 'c,d,e'); // limiting returns the rest of the string as the last element
+               $actualArray = t3lib_div::trimExplode(',', $testString, true, 3);
+
+               $this->assertEquals($expectedArray, $actualArray);
+       }
+
+       /**
+        * @test
+        */
+       public function checkTrimExplodeKeepsRamainingResultsWithEmptyItemsAfterReachingLimitWithNegativeParameter() {
+               $testString = ' a , b , c , d, ,e, f , , ';
+               $expectedArray = array('a', 'b', 'c', 'd', '', 'e'); // limiting returns the rest of the string as the last element
+               $actualArray = t3lib_div::trimExplode(',', $testString, false, -3);
+
+               $this->assertEquals($expectedArray, $actualArray);
+       }
+
+       /**
+        * @test
+        */
+       public function checkTrimExplodeKeepsRamainingResultsWithoutEmptyItemsAfterReachingLimitWithNegativeParameter() {
                $testString = ' a , b , c , d, ,e, f , , ';
                $expectedArray = array('a', 'b', 'c'); // limiting returns the rest of the string as the last element
                $actualArray = t3lib_div::trimExplode(',', $testString, true, -3);
@@ -90,6 +112,17 @@ class t3lib_div_testcase extends tx_phpunit_testcase {
        /**
         * @test
         */
+       public function checkTrimExplodeReturnsExactResultsWithoutReachingLimitWithPositiveParameter() {
+               $testString = ' a , b , , c , , , ';
+               $expectedArray = array('a', 'b', 'c'); // limiting returns the rest of the string as the last element
+               $actualArray = t3lib_div::trimExplode(',', $testString, true, 4);
+
+               $this->assertEquals($expectedArray, $actualArray);
+       }
+
+       /**
+        * @test
+        */
        public function checkTrimExplodeKeepsZeroAsString() {
                $testString = 'a , b , c , ,d ,, ,e,f, 0 ,';
                $expectedArray = array('a', 'b', 'c', 'd', 'e', 'f', '0');