Browse Source

Cover a few more cases in the various type classes.

Mark Story 10 years ago
parent
commit
225d52c0f8

+ 2 - 0
src/Database/Type.php

@@ -245,6 +245,7 @@ class Type
      *
      * @param mixed $value The value to convert to a boolean.
      * @return bool
+     * @deprecated 3.1.8 This method is now unused.
      */
     public static function boolval($value)
     {
@@ -261,6 +262,7 @@ class Type
      *
      * @param mixed $value The value to convert to a string.
      * @return bool
+     * @deprecated 3.1.8 This method is now unused.
      */
     public static function strval($value)
     {

+ 1 - 1
src/Database/Type/UuidType.php

@@ -59,7 +59,7 @@ class UuidType extends StringType
      */
     public function marshal($value)
     {
-        if ($value === null || $value === '') {
+        if ($value === null || $value === '' || is_array($value)) {
             return null;
         }
         return (string)$value;

+ 130 - 0
tests/TestCase/Database/Type/BoolTypeTest.php

@@ -0,0 +1,130 @@
+<?php
+/**
+ * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
+ * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ *
+ * Licensed under The MIT License
+ * For full copyright and license information, please see the LICENSE.txt
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ * @link          http://cakephp.org CakePHP(tm) Project
+ * @since         3.1.7
+ * @license       http://www.opensource.org/licenses/mit-license.php MIT License
+ */
+namespace Cake\Test\TestCase\Database\Type;
+
+use Cake\Database\Type;
+use Cake\TestSuite\TestCase;
+use \PDO;
+
+/**
+ * Test for the Boolean type.
+ */
+class BoolTypeTest extends TestCase
+{
+
+    /**
+     * Setup
+     *
+     * @return void
+     */
+    public function setUp()
+    {
+        parent::setUp();
+        $this->type = Type::build('boolean');
+        $this->driver = $this->getMock('Cake\Database\Driver');
+    }
+
+    /**
+     * Test converting to database format
+     *
+     * @return void
+     */
+    public function testToDatabase()
+    {
+        $this->assertNull($this->type->toDatabase(null, $this->driver));
+        $this->assertTrue($this->type->toDatabase(true, $this->driver));
+        $this->assertFalse($this->type->toDatabase(false, $this->driver));
+        $this->assertTrue($this->type->toDatabase(1, $this->driver));
+        $this->assertFalse($this->type->toDatabase(0, $this->driver));
+        $this->assertTrue($this->type->toDatabase('1', $this->driver));
+        $this->assertFalse($this->type->toDatabase('0', $this->driver));
+    }
+
+    /**
+     * Test converting an array to boolean results in an exception
+     *
+     * @expectedException InvalidArgumentException
+     * @return void
+     */
+    public function testToDatabaseInvalid()
+    {
+        $this->type->toDatabase([1, 2], $this->driver);
+    }
+
+
+    /**
+     * Tests that passing an invalid value will throw an exception
+     *
+     * @expectedException InvalidArgumentException
+     * @return void
+     */
+    public function testToDatabseInvalidArray()
+    {
+        $this->type->toDatabase([1, 2, 3], $this->driver);
+    }
+
+    /**
+     * Test convertring string booleans to PHP values.
+     *
+     * @return void
+     */
+    public function testToPHP()
+    {
+        $this->assertTrue($this->type->toPHP(true, $this->driver));
+        $this->assertTrue($this->type->toPHP(1, $this->driver));
+        $this->assertTrue($this->type->toPHP('1', $this->driver));
+        $this->assertTrue($this->type->toPHP('TRUE', $this->driver));
+        $this->assertTrue($this->type->toPHP('true', $this->driver));
+
+        $this->assertFalse($this->type->toPHP(false, $this->driver));
+        $this->assertFalse($this->type->toPHP(0, $this->driver));
+        $this->assertFalse($this->type->toPHP('0', $this->driver));
+        $this->assertFalse($this->type->toPHP('FALSE', $this->driver));
+        $this->assertFalse($this->type->toPHP('false', $this->driver));
+        $this->assertTrue($this->type->toPHP(['2', '3'], $this->driver));
+    }
+
+    /**
+     * Test marshalling booleans
+     *
+     * @return void
+     */
+    public function testMarshal()
+    {
+        $this->assertTrue($this->type->marshal(true));
+        $this->assertTrue($this->type->marshal(1));
+        $this->assertTrue($this->type->marshal('1'));
+        $this->assertTrue($this->type->marshal('true'));
+
+        $this->assertFalse($this->type->marshal('false'));
+        $this->assertFalse($this->type->marshal('0'));
+        $this->assertFalse($this->type->marshal(0));
+        $this->assertFalse($this->type->marshal(''));
+        $this->assertTrue($this->type->marshal('not empty'));
+        $this->assertTrue($this->type->marshal(['2', '3']));
+    }
+
+    /**
+     * Test convertring booleans to PDO types.
+     *
+     * @return void
+     */
+    public function testToStatement()
+    {
+        $this->assertEquals(PDO::PARAM_NULL, $this->type->toStatement(null, $this->driver));
+        $this->assertEquals(PDO::PARAM_BOOL, $this->type->toStatement(true, $this->driver));
+        $this->assertEquals(PDO::PARAM_BOOL, $this->type->toStatement(false, $this->driver));
+    }
+}

+ 17 - 0
tests/TestCase/Database/Type/DateTimeTypeTest.php

@@ -221,6 +221,23 @@ class DateTimeTypeTest extends TestCase
     }
 
     /**
+     * Test that useLocaleParser() can disable locale parsing.
+     *
+     * @return void
+     */
+    public function testLocaleParserDisable()
+    {
+        $expected = new Time('13-10-2013 23:28:00');
+        $this->type->useLocaleParser();
+        $result = $this->type->marshal('10/13/2013 11:28pm');
+        $this->assertEquals($expected, $result);
+
+        $this->type->useLocaleParser(false);
+        $result = $this->type->marshal('10/13/2013 11:28pm');
+        $this->assertNotEquals($expected, $result);
+    }
+
+    /**
      * Tests marshalling dates using the locale aware parser
      *
      * @return void

+ 0 - 1
tests/TestCase/Database/Type/StringTypeTest.php

@@ -15,7 +15,6 @@
 namespace Cake\Test\TestCase\Database\Type;
 
 use Cake\Database\Type;
-use Cake\Database\Type\IntegerType;
 use Cake\TestSuite\TestCase;
 use \PDO;
 

+ 10 - 1
tests/TestCase/Database/Type/UuidTypeTest.php

@@ -65,6 +65,12 @@ class UuidTypeTest extends TestCase
 
         $result = $this->type->toDatabase(2, $this->driver);
         $this->assertSame('2', $result);
+
+        $result = $this->type->toDatabase(null, $this->driver);
+        $this->assertNull($result);
+
+        $result = $this->type->toDatabase('', $this->driver);
+        $this->assertNull($result);
     }
 
     /**
@@ -97,8 +103,11 @@ class UuidTypeTest extends TestCase
      *
      * @return void
      */
-    public function testMarshalEmptyString()
+    public function testMarshal()
     {
         $this->assertNull($this->type->marshal(''));
+        $this->assertSame('2', $this->type->marshal(2));
+        $this->assertSame('word', $this->type->marshal('word'));
+        $this->assertNull($this->type->marshal([1, 2]));
     }
 }

+ 0 - 190
tests/TestCase/Database/TypeTest.php

@@ -91,7 +91,6 @@ class TypeTest extends TestCase
         return [
             ['string'],
             ['text'],
-            ['boolean']
         ];
     }
 
@@ -194,195 +193,6 @@ class TypeTest extends TestCase
     }
 
     /**
-     * Tests string from database are converted correctly to PHP
-     *
-     * @return void
-     */
-    public function testStringToPHP()
-    {
-        $type = Type::build('string');
-        $string = 'foo';
-        $driver = $this->getMock('\Cake\Database\Driver');
-        $this->assertEquals('foo', $type->toPHP($string, $driver));
-        $this->assertEquals('3', $type->toPHP(3, $driver));
-        $this->assertEquals('3.14159', $type->toPHP(3.14159, $driver));
-    }
-
-    /**
-     * Tests that passing a non-scalar value will thow an exception
-     *
-     * @expectedException InvalidArgumentException
-     * @return void
-     */
-    public function testStringToDatabaseNoScalar()
-    {
-        $type = Type::build('string');
-        $driver = $this->getMock('\Cake\Database\Driver');
-        $type->toDatabase(['123'], $driver);
-    }
-
-    /**
-     * Tests integers from PHP are converted correctly to statement value
-     *
-     * @return void
-     */
-    public function testStringToStatement()
-    {
-        $type = Type::build('string');
-        $string = '3';
-        $driver = $this->getMock('\Cake\Database\Driver');
-        $this->assertEquals(PDO::PARAM_STR, $type->toStatement($string, $driver));
-    }
-
-    /**
-     * Tests integers from database are converted correctly to PHP
-     *
-     * @return void
-     */
-    public function testTextToPHP()
-    {
-        $type = Type::build('string');
-        $string = 'foo';
-        $driver = $this->getMock('\Cake\Database\Driver');
-        $this->assertEquals('foo', $type->toPHP($string, $driver));
-        $this->assertEquals('3', $type->toPHP(3, $driver));
-        $this->assertEquals('3.14159', $type->toPHP(3.14159, $driver));
-    }
-
-    /**
-     * Tests integers from PHP are converted correctly to statement value
-     *
-     * @return void
-     */
-    public function testTextToStatement()
-    {
-        $type = Type::build('string');
-        $string = '3';
-        $driver = $this->getMock('\Cake\Database\Driver');
-        $this->assertEquals(PDO::PARAM_STR, $type->toStatement($string, $driver));
-    }
-
-    /**
-     * Test converting booleans to database types.
-     *
-     * @return void
-     */
-    public function testBooleanToDatabase()
-    {
-        $type = Type::build('boolean');
-        $driver = $this->getMock('\Cake\Database\Driver');
-
-        $this->assertNull($type->toDatabase(null, $driver));
-        $this->assertTrue($type->toDatabase(true, $driver));
-        $this->assertFalse($type->toDatabase(false, $driver));
-        $this->assertTrue($type->toDatabase(1, $driver));
-        $this->assertFalse($type->toDatabase(0, $driver));
-        $this->assertTrue($type->toDatabase('1', $driver));
-        $this->assertFalse($type->toDatabase('0', $driver));
-    }
-
-    /**
-     * Test converting an array to boolean results in an exception
-     *
-     * @expectedException InvalidArgumentException
-     * @return void
-     */
-    public function testBooleanToDatabaseError()
-    {
-        $type = Type::build('boolean');
-        $driver = $this->getMock('\Cake\Database\Driver');
-        $this->assertTrue($type->toDatabase([1, 2], $driver));
-    }
-
-    /**
-     * Test convertring booleans to PDO types.
-     *
-     * @return void
-     */
-    public function testBooleanToStatement()
-    {
-        $type = Type::build('boolean');
-        $driver = $this->getMock('\Cake\Database\Driver');
-
-        $this->assertEquals(PDO::PARAM_BOOL, $type->toStatement(true, $driver));
-        $this->assertEquals(PDO::PARAM_BOOL, $type->toStatement(false, $driver));
-    }
-
-    /**
-     * Test convertring string booleans to PHP values.
-     *
-     * @return void
-     */
-    public function testBooleanToPHP()
-    {
-        $type = Type::build('boolean');
-        $driver = $this->getMock('\Cake\Database\Driver');
-
-        $this->assertTrue($type->toPHP(true, $driver));
-        $this->assertTrue($type->toPHP(1, $driver));
-        $this->assertTrue($type->toPHP('1', $driver));
-        $this->assertTrue($type->toPHP('TRUE', $driver));
-        $this->assertTrue($type->toPHP('true', $driver));
-
-        $this->assertFalse($type->toPHP(false, $driver));
-        $this->assertFalse($type->toPHP(0, $driver));
-        $this->assertFalse($type->toPHP('0', $driver));
-        $this->assertFalse($type->toPHP('FALSE', $driver));
-        $this->assertFalse($type->toPHP('false', $driver));
-        $this->assertTrue($type->toPHP(['2', '3'], $driver));
-    }
-
-    /**
-     * Test marshalling booleans
-     *
-     * @return void
-     */
-    public function testBooleanMarshal()
-    {
-        $type = Type::build('boolean');
-        $this->assertTrue($type->marshal(true));
-        $this->assertTrue($type->marshal(1));
-        $this->assertTrue($type->marshal('1'));
-        $this->assertTrue($type->marshal('true'));
-
-        $this->assertFalse($type->marshal('false'));
-        $this->assertFalse($type->marshal('0'));
-        $this->assertFalse($type->marshal(0));
-        $this->assertFalse($type->marshal(''));
-        $this->assertTrue($type->marshal('not empty'));
-        $this->assertTrue($type->marshal(['2', '3']));
-    }
-
-
-    /**
-     * Tests uuid from database are converted correctly to PHP
-     *
-     * @return void
-     */
-    public function testUuidToPHP()
-    {
-        $type = Type::build('uuid');
-        $string = 'abc123-de456-fg789';
-        $driver = $this->getMock('\Cake\Database\Driver');
-        $this->assertEquals($string, $type->toPHP($string, $driver));
-        $this->assertEquals('3', $type->toPHP(3, $driver));
-        $this->assertEquals('3.14159', $type->toPHP(3.14159, $driver));
-    }
-
-    /**
-     * Tests integers from PHP are converted correctly to statement value
-     *
-     * @return void
-     */
-    public function testUuidToStatement()
-    {
-        $type = Type::build('uuid');
-        $string = 'abc123-def456-ghi789';
-        $driver = $this->getMock('\Cake\Database\Driver');
-        $this->assertEquals(PDO::PARAM_STR, $type->toStatement($string, $driver));
-    }
-
-    /**
      * Tests decimal from database are converted correctly to PHP
      *
      * @return void