[TASK] Move intInRange, intval_positive and int_from_ver
authorSusanne Moog <typo3@susannemoog.de>
Sat, 9 Jul 2011 09:25:49 +0000 (11:25 +0200)
committerSteffen Gebert <steffen.gebert@typo3.org>
Sat, 9 Jul 2011 19:12:22 +0000 (21:12 +0200)
Adds Unit tests for intInRange, intval_positive
and int_from_ver and move them to suitable locations.

Change-Id: Iddcf80ce2e65f686a8e9057a962a4ed2f842d017
Resolves: #28019
Reviewed-on: http://review.typo3.org/3173
Reviewed-by: Steffen Gebert
Tested-by: Steffen Gebert
t3lib/class.t3lib_div.php
t3lib/core_autoload.php
t3lib/utility/class.t3lib_utility_math.php [new file with mode: 0644]
t3lib/utility/class.t3lib_utility_versionnumber.php [new file with mode: 0644]
tests/t3lib/class.t3lib_divTest.php
tests/t3lib/utility/class.t3lib_utility_mathTest.php [new file with mode: 0644]
tests/t3lib/utility/class.t3lib_utility_versionNumberTest.php [new file with mode: 0644]

index 1c9cfb7..ca62a44 100644 (file)
@@ -767,20 +767,11 @@ final class t3lib_div {
         * @param       integer         Higher limit
         * @param       integer         Default value if input is FALSE.
         * @return      integer         The input value forced into the boundaries of $min and $max
+        * @deprecated since TYPO3 4.6, will be removed in TYPO3 4.8 - Use t3lib_utility_Math::forceIntegerInRange() instead
         */
        public static function intInRange($theInt, $min, $max = 2000000000, $zeroValue = 0) {
-                       // Returns $theInt as an integer in the integerspace from $min to $max
-               $theInt = intval($theInt);
-               if ($zeroValue && !$theInt) {
-                       $theInt = $zeroValue;
-               } // If the input value is zero after being converted to integer, zeroValue may set another default value for it.
-               if ($theInt < $min) {
-                       $theInt = $min;
-               }
-               if ($theInt > $max) {
-                       $theInt = $max;
-               }
-               return $theInt;
+               self::logDeprecatedFunction();
+               return t3lib_utility_Math::forceIntegerInRange($theInt, $min, $max, $zeroValue);
        }
 
        /**
@@ -789,13 +780,11 @@ final class t3lib_div {
         *
         * @param       integer         Integer string to process
         * @return      integer
+        * @deprecated since TYPO3 4.6, will be removed in TYPO3 4.8 - Use t3lib_utility_Math::convertToPositiveInteger() instead
         */
        public static function intval_positive($theInt) {
-               $theInt = intval($theInt);
-               if ($theInt < 0) {
-                       $theInt = 0;
-               }
-               return $theInt;
+               self::logDeprecatedFunction();
+               return t3lib_utility_Math::convertToPositiveInteger($theInt);
        }
 
        /**
@@ -804,10 +793,11 @@ final class t3lib_div {
         *
         * @param       string          Version number on format x.x.x
         * @return      integer         Integer version of version number (where each part can count to 999)
+        * @deprecated since TYPO3 4.6, will be removed in TYPO3 4.8 - Use t3lib_utility_Math::convertVersionNumberToInteger() instead
         */
        public static function int_from_ver($verNumberStr) {
-               $verParts = explode('.', $verNumberStr);
-               return intval((int) $verParts[0] . str_pad((int) $verParts[1], 3, '0', STR_PAD_LEFT) . str_pad((int) $verParts[2], 3, '0', STR_PAD_LEFT));
+               self::logDeprecatedFunction();
+               return t3lib_utility_VersionNumber::convertVersionNumberToInteger($verNumberStr);
        }
 
        /**
index 1e3b33c..c8689e7 100644 (file)
@@ -168,6 +168,8 @@ $t3libClasses = array(
        't3lib_utility_phpoptions' => PATH_t3lib . 'utility/class.t3lib_utility_phpoptions.php',
        't3lib_utility_debug' => PATH_t3lib . 'utility/class.t3lib_utility_debug.php',
        't3lib_utility_array' => PATH_t3lib . 'utility/class.t3lib_utility_array.php',
+       't3lib_utility_math' => PATH_t3lib . 'utility/class.t3lib_utility_math.php',
+       't3lib_utility_versionnumber' => PATH_t3lib . 'utility/class.t3lib_utility_versionnumber.php',
        't3lib_spritemanager' => PATH_t3lib . 'class.t3lib_spritemanager.php',
        't3lib_spritemanager_spritegenerator' => PATH_t3lib . 'spritemanager/class.t3lib_spritemanager_spritegenerator.php',
        't3lib_spritemanager_spriteicongenerator' => PATH_t3lib . 'interfaces/interface.t3lib_spritemanager_spriteicongenerator.php',
diff --git a/t3lib/utility/class.t3lib_utility_math.php b/t3lib/utility/class.t3lib_utility_math.php
new file mode 100644 (file)
index 0000000..e04657f
--- /dev/null
@@ -0,0 +1,76 @@
+<?php
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2011 Susanne Moog <typo3@susanne-moog.de>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project is
+ *  free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *  A copy is found in the textfile GPL.txt and important notices to the license
+ *  from the author is found in LICENSE.txt distributed with these scripts.
+ *
+ *
+ *  This script is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+/**
+ * Class with helper functions for mathematical calculations
+ *
+ * @author Susanne Moog <typo3@susanne-moog.de>
+ * @package TYPO3
+ * @subpackage t3lib
+ */
+
+final class t3lib_utility_Math {
+
+       /**
+        * Forces the integer $theInt into the boundaries of $min and $max. If the $theInt is FALSE then the $defaultValue is applied.
+        *
+        * @param $theInt integer Input value
+        * @param $min integer Lower limit
+        * @param $max integer Higher limit
+        * @param $defaultValue integer Default value if input is FALSE.
+        * @return integer The input value forced into the boundaries of $min and $max
+        */
+       public static function forceIntegerInRange($theInt, $min, $max = 2000000000, $defaultValue = 0) {
+                       // Returns $theInt as an integer in the integerspace from $min to $max
+               $theInt = intval($theInt);
+               if ($defaultValue && !$theInt) {
+                       $theInt = $defaultValue;
+               } // If the input value is zero after being converted to integer, zeroValue may set another default value for it.
+               if ($theInt < $min) {
+                       $theInt = $min;
+               }
+               if ($theInt > $max) {
+                       $theInt = $max;
+               }
+               return $theInt;
+       }
+
+       /**
+        * Returns $theInt if it is greater than zero, otherwise returns zero.
+        *
+        * @param $theInt integer Integer string to process
+        * @return integer
+        */
+       public static function convertToPositiveInteger($theInt) {
+               $theInt = intval($theInt);
+               if ($theInt < 0) {
+                       $theInt = 0;
+               }
+               return $theInt;
+       }
+}
+
+?>
\ No newline at end of file
diff --git a/t3lib/utility/class.t3lib_utility_versionnumber.php b/t3lib/utility/class.t3lib_utility_versionnumber.php
new file mode 100644 (file)
index 0000000..02c068b
--- /dev/null
@@ -0,0 +1,49 @@
+<?php
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2011 Susanne Moog <typo3@susanne-moog.de>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project is
+ *  free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *  A copy is found in the textfile GPL.txt and important notices to the license
+ *  from the author is found in LICENSE.txt distributed with these scripts.
+ *
+ *
+ *  This script is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+/**
+ * Class with helper functions for version number handling
+ *
+ * @author Susanne Moog <typo3@susanne-moog.de>
+ * @package TYPO3
+ * @subpackage t3lib
+ */
+
+final class t3lib_utility_VersionNumber {
+
+       /**
+        * Returns an integer from a three part version number, eg '4.12.3' -> 4012003
+        *
+        * @param $versionNumber string Version number on format x.x.x
+        * @return integer Integer version of version number (where each part can count to 999)
+        */
+       public static function convertVersionNumberToInteger($versionNumber) {
+               $versionParts = explode('.', $versionNumber);
+               return intval((int) $versionParts[0] . str_pad((int) $versionParts[1], 3, '0', STR_PAD_LEFT) . str_pad((int) $versionParts[2], 3, '0', STR_PAD_LEFT));
+       }
+}
+
+?>
\ No newline at end of file
index e10f163..711ceab 100644 (file)
@@ -526,6 +526,81 @@ class t3lib_divTest extends tx_phpunit_testcase {
                $this->assertEquals($expectedArray, $actualArray);
        }
 
+       //////////////////////////////////
+       // Tests concerning intInRange
+       //////////////////////////////////
+       /**
+        * Data provider for intInRangeForcesIntegerIntoBoundaries
+        *
+        * @return array expected values, arithmetic expression
+        */
+       public function intInRangeForcesIntegerIntoDefaultBoundariesDataProvider() {
+               return array(
+                       'negativeValue' => array(0, -10),
+                       'normalValue' => array(30, 30),
+                       'veryHighValue' => array(2000000000, 3000000001),
+                       'zeroValue' => array(0, 0),
+                       'anotherNormalValue' => array(12309, 12309)
+               );
+       }
+
+       /**
+        * @test
+        * @dataProvider intInRangeForcesIntegerIntoDefaultBoundariesDataProvider
+        */
+       public function intInRangeForcesIntegerIntoDefaultBoundaries($expected, $value) {
+                $this->assertEquals($expected, t3lib_div::intInRange($value, 0));
+       }
+
+       /**
+        * @test
+        */
+       public function intInRangeSetsDefaultValueIfZeroValueIsGiven() {
+                $this->assertEquals(42, t3lib_div::intInRange('', 0, 2000000000, 42));
+       }
+
+       //////////////////////////////////
+       // Tests concerning intval_positive
+       //////////////////////////////////
+       /**
+        * @test
+        */
+       public function intvalPositiveReturnsZeroForNegativeValues() {
+               $this->assertEquals(0, t3lib_div::intval_positive(-123));
+       }
+
+       /**
+        * @test
+        */
+       public function intvalPositiveReturnsTheInputValueForPositiveValues() {
+               $this->assertEquals(123, t3lib_div::intval_positive(123));
+       }
+
+       //////////////////////////////////
+       // Tests concerning int_from_ver
+       //////////////////////////////////
+       /**
+        * Data Provider for intFromVerConvertsVersionNumbersToIntegersDataProvider
+        *
+        * return array
+        */
+       public function intFromVerConvertsVersionNumbersToIntegersDataProvider() {
+               return array(
+                       array('4003003', '4.3.3'),
+                       array('4012003', '4.12.3'),
+                       array('5000000', '5.0.0'),
+                       array('3008001', '3.8.1'),
+                       array('1012', '0.1.12')
+               );
+       }
+
+       /**
+        * @test
+        * @dataProvider intFromVerConvertsVersionNumbersToIntegersDataProvider
+        */
+       public function intFromVerConvertsVersionNumbersToIntegers($expected, $version) {
+               $this->assertEquals($expected, t3lib_div::int_from_ver($version));
+       }
 
        //////////////////////////////////
        // Tests concerning revExplode
diff --git a/tests/t3lib/utility/class.t3lib_utility_mathTest.php b/tests/t3lib/utility/class.t3lib_utility_mathTest.php
new file mode 100644 (file)
index 0000000..0dfd1db
--- /dev/null
@@ -0,0 +1,88 @@
+<?php
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2011 Susanne Moog <typo3@susanne-moog.de>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project is
+ *  free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *
+ *  This script is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+/**
+ * Testcase for class t3lib_utility_Math
+ *
+ * @author Susanne Moog <typo3@susanne-moog.de>
+ *
+ * @package TYPO3
+ * @subpackage t3lib
+ */
+
+class t3lib_utility_MathTest extends tx_phpunit_testcase {
+
+       //////////////////////////////////
+       // Tests concerning forceIntegerInRange
+       //////////////////////////////////
+       /**
+        * Data provider for forceIntegerInRangeForcesIntegerIntoBoundaries
+        *
+        * @return array expected values, arithmetic expression
+        */
+       public function forceIntegerInRangeForcesIntegerIntoDefaultBoundariesDataProvider() {
+               return array(
+                       'negativeValue' => array(0, -10),
+                       'normalValue' => array(30, 30),
+                       'veryHighValue' => array(2000000000, 3000000001),
+                       'zeroValue' => array(0, 0),
+                       'anotherNormalValue' => array(12309, 12309)
+               );
+       }
+
+       /**
+        * @test
+        * @dataProvider forceIntegerInRangeForcesIntegerIntoDefaultBoundariesDataProvider
+        */
+       public function forceIntegerInRangeForcesIntegerIntoDefaultBoundaries($expected, $value) {
+                $this->assertEquals($expected, t3lib_utility_Math::forceIntegerInRange($value, 0));
+       }
+
+       /**
+        * @test
+        */
+       public function forceIntegerInRangeSetsDefaultValueIfZeroValueIsGiven() {
+                $this->assertEquals(42, t3lib_utility_Math::forceIntegerInRange('', 0, 2000000000, 42));
+       }
+
+       //////////////////////////////////
+       // Tests concerning convertToPositiveInteger
+       //////////////////////////////////
+       /**
+        * @test
+        */
+       public function convertToPositiveIntegerReturnsZeroForNegativeValues() {
+               $this->assertEquals(0, t3lib_utility_Math::convertToPositiveInteger(-123));
+       }
+
+       /**
+        * @test
+        */
+       public function convertToPositiveIntegerReturnsTheInputValueForPositiveValues() {
+               $this->assertEquals(123, t3lib_utility_Math::convertToPositiveInteger(123));
+       }
+
+}
+
+?>
\ No newline at end of file
diff --git a/tests/t3lib/utility/class.t3lib_utility_versionNumberTest.php b/tests/t3lib/utility/class.t3lib_utility_versionNumberTest.php
new file mode 100644 (file)
index 0000000..322b120
--- /dev/null
@@ -0,0 +1,64 @@
+<?php
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2011 Susanne Moog <typo3@susanne-moog.de>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project is
+ *  free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *
+ *  This script is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+/**
+ * Testcase for class t3lib_utility_VersionNumber
+ *
+ * @author Susanne Moog <typo3@susanne-moog.de>
+ *
+ * @package TYPO3
+ * @subpackage t3lib
+ */
+
+class t3lib_utility_VersionNumberTest extends tx_phpunit_testcase {
+
+       //////////////////////////////////
+       // Tests concerning int_from_ver
+       //////////////////////////////////
+       /**
+        * Data Provider for convertVersionNumberToIntegerConvertsVersionNumbersToIntegersDataProvider
+        *
+        * return array
+        */
+       public function convertVersionNumberToIntegerConvertsVersionNumbersToIntegersDataProvider() {
+               return array(
+                       array('4003003', '4.3.3'),
+                       array('4012003', '4.12.3'),
+                       array('5000000', '5.0.0'),
+                       array('3008001', '3.8.1'),
+                       array('1012', '0.1.12')
+               );
+       }
+
+       /**
+        * @test
+        * @dataProvider convertVersionNumberToIntegerConvertsVersionNumbersToIntegersDataProvider
+        */
+       public function convertVersionNumberToIntegerConvertsVersionNumbersToIntegers($expected, $version) {
+               $this->assertEquals($expected, t3lib_utility_VersionNumber::convertVersionNumberToInteger($version));
+       }
+
+}
+
+?>
\ No newline at end of file