Author: ihabunek
Date: Sun Oct 23 13:07:46 2011
New Revision: 1187879

URL: http://svn.apache.org/viewvc?rev=1187879&view=rev
Log:
Added new methods for conversion to integer and boolean which throw an 
exception if a value cannot be converted. Useful for parsing mandatory options.

Modified:
    logging/log4php/trunk/src/main/php/helpers/LoggerOptionConverter.php
    logging/log4php/trunk/src/test/php/helpers/LoggerOptionConverterTest.php

Modified: logging/log4php/trunk/src/main/php/helpers/LoggerOptionConverter.php
URL: 
http://svn.apache.org/viewvc/logging/log4php/trunk/src/main/php/helpers/LoggerOptionConverter.php?rev=1187879&r1=1187878&r2=1187879&view=diff
==============================================================================
--- logging/log4php/trunk/src/main/php/helpers/LoggerOptionConverter.php 
(original)
+++ logging/log4php/trunk/src/main/php/helpers/LoggerOptionConverter.php Sun 
Oct 23 13:07:46 2011
@@ -32,7 +32,13 @@ class LoggerOptionConverter {
        const DELIM_STOP = '}';
        const DELIM_START_LEN = 2;
        const DELIM_STOP_LEN = 1;
-
+       
+       /** String values which are converted to boolean TRUE. */
+       private static $trueValues = array('1', 'true', 'yes', 'on');
+       
+       /** String values which are converted to boolean FALSE. */
+       private static $falseValues = array('0', 'false', 'no', 'off');
+       
        /**
         * Read a predefined var.
         *
@@ -89,6 +95,21 @@ class LoggerOptionConverter {
                return $default;
        }
 
+       /** Converts $value to boolean, or throws an exception if not possible. 
*/
+       public static function toBooleanEx($value) {
+               if (isset($value)) {
+                       $value = strtolower(trim($value));
+                       if (in_array($value, self::$trueValues)) {
+                               return true;
+                       }
+                       if (in_array($value, self::$falseValues)) {
+                               return false;
+                       }
+               }
+               
+               throw new LoggerException("Givan value [" . var_export($value, 
true) . "] cannot be converted to boolean.");
+       }
+       
        /**
         * @param string $value
         * @param integer $default
@@ -102,6 +123,18 @@ class LoggerOptionConverter {
                        return $default;
                }
        }
+       
+       
+       /** Converts $value to integer, or throws an exception if not possible. 
*/
+       public static function toIntegerEx($value) {
+               if (!empty($value)) {
+                       if (is_numeric($value)) {
+                               return (integer) $value;
+                       }
+               }
+       
+               throw new LoggerException("Givan value [" . var_export($value, 
true) . "] cannot be converted to integer.");
+       }
 
        /**
         * Converts a standard or custom priority level to a Level

Modified: 
logging/log4php/trunk/src/test/php/helpers/LoggerOptionConverterTest.php
URL: 
http://svn.apache.org/viewvc/logging/log4php/trunk/src/test/php/helpers/LoggerOptionConverterTest.php?rev=1187879&r1=1187878&r2=1187879&view=diff
==============================================================================
--- logging/log4php/trunk/src/test/php/helpers/LoggerOptionConverterTest.php 
(original)
+++ logging/log4php/trunk/src/test/php/helpers/LoggerOptionConverterTest.php 
Sun Oct 23 13:07:46 2011
@@ -32,23 +32,100 @@ define('MY_CONSTANT_CONSTANT_OTHER', 'DE
 class LoggerOptionConverterTest extends PHPUnit_Framework_TestCase {
 
     public function testToBoolean() {
-        self::assertEquals(true, LoggerOptionConverter::toBoolean(null, true));
-        self::assertEquals(true, LoggerOptionConverter::toBoolean(null));
-        self::assertEquals(true, LoggerOptionConverter::toBoolean(true));
-        self::assertEquals(true, LoggerOptionConverter::toBoolean("1"));
-        self::assertEquals(true, LoggerOptionConverter::toBoolean("true"));
-        self::assertEquals(true, LoggerOptionConverter::toBoolean("on"));
-        self::assertEquals(true, LoggerOptionConverter::toBoolean("yes"));
-        
-        self::assertEquals(false, LoggerOptionConverter::toBoolean(null, 
false));
-        self::assertEquals(false, LoggerOptionConverter::toBoolean(false));
-        self::assertEquals(false, LoggerOptionConverter::toBoolean(""));
-        self::assertEquals(false, LoggerOptionConverter::toBoolean("0"));
-        self::assertEquals(false, LoggerOptionConverter::toBoolean("false"));
-        self::assertEquals(false, LoggerOptionConverter::toBoolean("off"));
-        self::assertEquals(false, LoggerOptionConverter::toBoolean("no"));
+        self::assertTrue(LoggerOptionConverter::toBoolean(null, true));
+        self::assertTrue(LoggerOptionConverter::toBoolean('foo', true));
+        self::assertTrue(LoggerOptionConverter::toBoolean(null));
+        self::assertTrue(LoggerOptionConverter::toBoolean(true));
+        self::assertTrue(LoggerOptionConverter::toBoolean("1"));
+        self::assertTrue(LoggerOptionConverter::toBoolean(1));
+        self::assertTrue(LoggerOptionConverter::toBoolean("true"));
+        self::assertTrue(LoggerOptionConverter::toBoolean("on"));
+        self::assertTrue(LoggerOptionConverter::toBoolean("yes"));
+        
+        self::assertFalse(LoggerOptionConverter::toBoolean(null, false));
+        self::assertFalse(LoggerOptionConverter::toBoolean('foo', false));
+        self::assertFalse(LoggerOptionConverter::toBoolean(false));
+        self::assertFalse(LoggerOptionConverter::toBoolean(""));
+        self::assertFalse(LoggerOptionConverter::toBoolean("0"));
+        self::assertFalse(LoggerOptionConverter::toBoolean(0));
+        self::assertFalse(LoggerOptionConverter::toBoolean("false"));
+        self::assertFalse(LoggerOptionConverter::toBoolean("off"));
+        self::assertFalse(LoggerOptionConverter::toBoolean("no"));
+        
+        self::assertTrue(LoggerOptionConverter::toBooleanEx("1"));
+        self::assertTrue(LoggerOptionConverter::toBooleanEx("true"));
+        self::assertTrue(LoggerOptionConverter::toBooleanEx("on"));
+        self::assertTrue(LoggerOptionConverter::toBooleanEx("yes"));
+        
+        self::assertFalse(LoggerOptionConverter::toBooleanEx("0"));
+        self::assertFalse(LoggerOptionConverter::toBooleanEx("false"));
+        self::assertFalse(LoggerOptionConverter::toBooleanEx("off"));
+        self::assertFalse(LoggerOptionConverter::toBooleanEx("no"));
+    }
+    
+    /**
+     * Test fail on NULL. 
+        * @expectedException LoggerException
+        * @expectedExceptionMessage Givan value [NULL] cannot be converted to 
boolean.
+     */
+    public function testToBooleanFailure1() {
+       LoggerOptionConverter::toBooleanEx(null);
+    }
+    
+    /**
+     * Test fail on empty string.
+     * @expectedException LoggerException
+     * @expectedExceptionMessage Givan value [''] cannot be converted to 
boolean.
+     */
+    public function testToBooleanFailure2() {
+       LoggerOptionConverter::toBooleanEx('');
+    }
+    
+    /**
+     * Test fail on invalid string.
+     * @expectedException LoggerException
+     * @expectedExceptionMessage Givan value ['foo'] cannot be converted to 
boolean.
+     */
+    public function testToBooleanFailure3() {
+       LoggerOptionConverter::toBooleanEx('foo');
+    }
+    
+    public function testToInteger() {
+       self::assertSame(1, LoggerOptionConverter::toInt('1', 0));
+       self::assertSame(-11, LoggerOptionConverter::toInt('-11', 0));
+       self::assertSame(-10, LoggerOptionConverter::toInt(null, -10));
+       self::assertSame(-10, LoggerOptionConverter::toInt('', -10));
+       self::assertSame(-10, LoggerOptionConverter::toInt('foo', -10));
+       
+       self::assertSame(1, LoggerOptionConverter::toIntegerEx('1'));
+    }
+    
+    /**
+    * Test fail on NULL.
+    * @expectedException LoggerException
+    * @expectedExceptionMessage Givan value [NULL] cannot be converted to 
integer.
+    */
+    public function testToIntegerFailure1() {
+       LoggerOptionConverter::toIntegerEx(null);
+    }
+    
+    /**
+     * Test fail on empty string.
+     * @expectedException LoggerException
+     * @expectedExceptionMessage Givan value [''] cannot be converted to 
integer.
+     */
+    public function testToIntegerFailure2() {
+       LoggerOptionConverter::toIntegerEx('');
     }
     
+    /**
+     * Test fail on invalid string.
+     * @expectedException LoggerException
+     * @expectedExceptionMessage Givan value ['foo'] cannot be converted to 
integer.
+     */
+    public function testToIntegerFailure3() {
+       LoggerOptionConverter::toIntegerEx('foo');
+    }
     
     public function testSubstituteVars() {
        $props['OTHER_CONSTANT'] = "OTHER";


Reply via email to