[FEATURE] Add method to convert integer to version number
authorMichael <antispam.35825@schams.net>
Tue, 10 Apr 2012 14:02:56 +0000 (16:02 +0200)
committerChristian Kuhn <lolli@schwarzbu.ch>
Wed, 11 Apr 2012 09:24:03 +0000 (11:24 +0200)
Change-Id: I99863cca2d9e8b2add3292a8570cefb03a960af1
Resolves: #35822
Releases: 6.0
Reviewed-on: http://review.typo3.org/10210
Reviewed-by: Andy Grunwald
Tested-by: Andy Grunwald
Reviewed-by: Christian Kuhn
Tested-by: Christian Kuhn
t3lib/utility/class.t3lib_utility_versionnumber.php
tests/t3lib/utility/class.t3lib_utility_versionNumberTest.php

index 02c068b..1f4107f 100644 (file)
@@ -24,6 +24,7 @@
  *
  *  This copyright notice MUST APPEAR in all copies of the script!
  ***************************************************************/
+
 /**
  * Class with helper functions for version number handling
  *
@@ -31,7 +32,6 @@
  * @package TYPO3
  * @subpackage t3lib
  */
-
 final class t3lib_utility_VersionNumber {
 
        /**
@@ -44,6 +44,30 @@ final class t3lib_utility_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));
        }
+
+       /**
+        * Returns the three part version number (string) from an integer, eg 4012003 -> '4.12.3'
+        *
+        * @param $versionInteger integer Integer representation of version number
+        * @return string Version number as format x.x.x
+        * @throws \InvalidArgumentException if $versionInteger is not an integer
+        */
+       public static function convertIntegerToVersionNumber($versionInteger) {
+               if (!is_int($versionInteger)) {
+                       throw new \InvalidArgumentException(
+                               't3lib_utility_VersionNumber::convertIntegerToVersionNumber() supports an integer argument only!',
+                               1334072223
+                       );
+               }
+
+               $versionString = str_pad($versionInteger, 9, '0', STR_PAD_LEFT);
+               $parts = array(
+                       substr($versionString, 0, 3),
+                       substr($versionString, 3, 3),
+                       substr($versionString, 6, 3)
+               );
+               return intval($parts[0]) . '.' . intval($parts[1]) . '.' . intval($parts[2]);
+       }
 }
 
 ?>
\ No newline at end of file
index 322b120..11f2963 100644 (file)
  * 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
+        * Data Provider for convertVersionNumberToIntegerConvertsVersionNumbersToIntegers
         *
         * return array
         */
-       public function convertVersionNumberToIntegerConvertsVersionNumbersToIntegersDataProvider() {
+       public function validVersionNumberDataProvider() {
                return array(
                        array('4003003', '4.3.3'),
                        array('4012003', '4.12.3'),
@@ -51,14 +46,50 @@ class t3lib_utility_VersionNumberTest extends tx_phpunit_testcase {
                );
        }
 
+       /**
+        * Data Provider for convertIntegerToVersionNumberConvertsOtherTypesAsIntegerToVersionNumber
+        *
+        * @see http://php.net/manual/en/language.types.php
+        * return array
+        */
+       public function invalidVersionNumberDataProvider() {
+               return array(
+                       'boolean' => array(TRUE),
+                       'float' => array(5.4),
+                       'array' => array(array()),
+                       'string' => array('300ABCD'),
+                       'object' => array(new stdClass()),
+                       'NULL' => array(NULL),
+                       'function' => array(function(){}),
+               );
+       }
+
        /**
         * @test
-        * @dataProvider convertVersionNumberToIntegerConvertsVersionNumbersToIntegersDataProvider
+        * @dataProvider validVersionNumberDataProvider
         */
        public function convertVersionNumberToIntegerConvertsVersionNumbersToIntegers($expected, $version) {
                $this->assertEquals($expected, t3lib_utility_VersionNumber::convertVersionNumberToInteger($version));
        }
 
+       /**
+        * @test
+        * @dataProvider validVersionNumberDataProvider
+        */
+       public function convertIntegerToVersionNumberConvertsIntegerToVersionNumber($versionNumber, $expected) {
+                       // Make sure incoming value is an integer
+               $versionNumber = (int) $versionNumber;
+               $this->assertEquals($expected, t3lib_utility_VersionNumber::convertIntegerToVersionNumber($versionNumber));
+       }
+
+       /**
+        * @test
+        * @dataProvider invalidVersionNumberDataProvider
+        */
+       public function convertIntegerToVersionNumberConvertsOtherTypesAsIntegerToVersionNumber($version) {
+               $this->setExpectedException('\InvalidArgumentException', '', 1334072223);
+               t3lib_utility_VersionNumber::convertIntegerToVersionNumber($version);
+       }
 }
 
 ?>
\ No newline at end of file