diff options
Diffstat (limited to 'tests/unit')
-rw-r--r-- | tests/unit/AllTests.php | 9 | ||||
-rw-r--r-- | tests/unit/Data/SqlMap/AllTests.php | 30 | ||||
-rw-r--r-- | tests/unit/Data/SqlMap/DataMapper/AllTests.php | 28 | ||||
-rw-r--r-- | tests/unit/Data/SqlMap/DataMapper/TPropertyAccessTest.php | 269 | ||||
-rw-r--r-- | tests/unit/Data/SqlMap/DynamicParameterTest.php | 90 | ||||
-rw-r--r-- | tests/unit/Data/SqlMap/DynamicParameterTestMap.xml | 33 | ||||
-rw-r--r-- | tests/unit/Data/SqlMap/fixtures/mysql5_reset.sql | 22 | ||||
-rw-r--r-- | tests/unit/Data/SqlMap/fixtures/mysql5_setup.sql | 22 |
8 files changed, 500 insertions, 3 deletions
diff --git a/tests/unit/AllTests.php b/tests/unit/AllTests.php index 220b9366..62e127c8 100644 --- a/tests/unit/AllTests.php +++ b/tests/unit/AllTests.php @@ -16,6 +16,8 @@ require_once 'Security/AllTests.php'; require_once 'Caching/AllTests.php'; require_once 'Util/AllTests.php'; require_once 'Data/DataGateway/AllTests.php'; +require_once 'Data/SqlMap/AllTests.php'; + require_once 'TComponentTest.php'; @@ -23,10 +25,10 @@ class AllTests { public static function main() { PHPUnit_TextUI_TestRunner::run(self::suite()); } - + public static function suite() { $suite = new PHPUnit_Framework_TestSuite('PRADO PHP Framework'); - + $suite->addTest(Xml_AllTests::suite()); $suite->addTest(IO_AllTests::suite()); $suite->addTest(Collections_AllTests::suite()); @@ -38,7 +40,8 @@ class AllTests { $suite->addTest(Caching_AllTests::suite()); $suite->addTest(Util_AllTests::suite()); $suite->addTest(Data_DataGateway_AllTests::suite()); - + $suite->addTest(Data_SqlMap_AllTests::suite()); + $suite->addTestSuite('TComponentTest'); return $suite; diff --git a/tests/unit/Data/SqlMap/AllTests.php b/tests/unit/Data/SqlMap/AllTests.php new file mode 100644 index 00000000..735f1202 --- /dev/null +++ b/tests/unit/Data/SqlMap/AllTests.php @@ -0,0 +1,30 @@ +<?php
+require_once dirname(__FILE__).'/../../phpunit.php';
+
+if(!defined('PHPUnit_MAIN_METHOD')) {
+ define('PHPUnit_MAIN_METHOD', 'Data_SqlMap_AllTests::main');
+}
+
+require_once 'DynamicParameterTest.php';
+require_once './DataMapper/AllTests.php';
+
+class Data_SqlMap_AllTests {
+
+ public static function main() {
+ PHPUnit_TextUI_TestRunner::run(self::suite());
+ }
+
+ public static function suite() {
+ $suite = new PHPUnit_Framework_TestSuite('System.Data.SqlMap');
+
+ $suite->addTestSuite('DynamicParameterTest');
+ $suite -> addTest( Data_SqlMap_DataMapper_AllTests::suite() );
+
+ return $suite;
+ }
+}
+
+if(PHPUnit_MAIN_METHOD == 'Data_SqlMap_AllTests::main') {
+ Data_SqlMap_AllTests::main();
+}
+?>
\ No newline at end of file diff --git a/tests/unit/Data/SqlMap/DataMapper/AllTests.php b/tests/unit/Data/SqlMap/DataMapper/AllTests.php new file mode 100644 index 00000000..9e80e7c8 --- /dev/null +++ b/tests/unit/Data/SqlMap/DataMapper/AllTests.php @@ -0,0 +1,28 @@ +<?php +require_once dirname(__FILE__).'/../../../phpunit.php'; + +if(!defined('PHPUnit_MAIN_METHOD')) { + define('PHPUnit_MAIN_METHOD', 'Data_SqlMap_DataMapper_AllTests::main'); +} + +require_once 'TPropertyAccessTest.php'; + +class Data_SqlMap_DataMapper_AllTests { + + public static function main() { + PHPUnit_TextUI_TestRunner::run(self::suite()); + } + + public static function suite() { + $suite = new PHPUnit_Framework_TestSuite('System.Data.SqlMap.DataMapper'); + + $suite->addTestSuite('TPropertyAccessTest'); + + return $suite; + } +} + +if(PHPUnit_MAIN_METHOD == 'Data_SqlMap_DataMapper_AllTests::main') { + Data_SqlMap_DataMapper_AllTests::main(); +} +?>
\ No newline at end of file diff --git a/tests/unit/Data/SqlMap/DataMapper/TPropertyAccessTest.php b/tests/unit/Data/SqlMap/DataMapper/TPropertyAccessTest.php new file mode 100644 index 00000000..b48363f1 --- /dev/null +++ b/tests/unit/Data/SqlMap/DataMapper/TPropertyAccessTest.php @@ -0,0 +1,269 @@ +<?php +require_once dirname(__FILE__).'/../../../phpunit.php'; + +Prado::using('System.Data.SqlMap.DataMapper.TSqlMapException'); +Prado::using('System.Data.SqlMap.DataMapper.TPropertyAccess'); + +/** + * @package System.Data.SqlMap.DataMapper + */ +class TPropertyAccessTest extends PHPUnit_Framework_TestCase +{ + public function testHasPublicVar() + { + $testobj = new _PropertyAccessTestHelperPublicVar(); + self::assertEquals(true, TPropertyAccess::has($testobj, 'a')); + self::assertEquals(true, TPropertyAccess::has($testobj, 'b')); + self::assertEquals(false, TPropertyAccess::has($testobj, 'c')); + + self::assertEquals(false, TPropertyAccess::has($testobj, 'A')); + self::assertEquals(false, TPropertyAccess::has($testobj, 'B')); + self::assertEquals(false, TPropertyAccess::has($testobj, 'C')); + } + + public function testGetPublicVar() + { + $testobj = new _PropertyAccessTestHelperPublicVar(); + + self::assertEquals(1, TPropertyAccess::get($testobj, 'a')); + self::assertEquals(2, TPropertyAccess::get($testobj, 'b')); + + self::setExpectedException('TInvalidPropertyException'); + TPropertyAccess::get($testobj, 'c'); + } + + public function testSetPublicVar() + { + $testobj = new _PropertyAccessTestHelperPublicVar(); + + TPropertyAccess::set($testobj, 'a', 10); + self::assertEquals(10, TPropertyAccess::get($testobj, 'a')); + + TPropertyAccess::set($testobj, 'b', 20); + self::assertEquals(20, TPropertyAccess::get($testobj, 'b')); + + TPropertyAccess::set($testobj, 'c', 30); + self::assertEquals(30, TPropertyAccess::get($testobj, 'c')); + } + + + public function testHasStaticProperties() + { + $testobj = new _PropertyAccessTestHelperStaticProperties(); + self::assertEquals(true, TPropertyAccess::has($testobj, 'a')); + self::assertEquals(true, TPropertyAccess::has($testobj, 'b')); + self::assertEquals(false, TPropertyAccess::has($testobj, 'c')); + + self::assertEquals(true, TPropertyAccess::has($testobj, 'A')); + self::assertEquals(true, TPropertyAccess::has($testobj, 'B')); + self::assertEquals(false, TPropertyAccess::has($testobj, 'C')); + } + + public function testGetStaticProperties() + { + $testobj = new _PropertyAccessTestHelperStaticProperties(); + self::assertEquals(1, TPropertyAccess::get($testobj, 'a')); + self::assertEquals(2, TPropertyAccess::get($testobj, 'b')); + self::assertEquals(1, TPropertyAccess::get($testobj, 'A')); + self::assertEquals(2, TPropertyAccess::get($testobj, 'B')); + + self::setExpectedException('TInvalidPropertyException'); + TPropertyAccess::get($testobj, 'c'); + + self::setExpectedException('TInvalidPropertyException'); + TPropertyAccess::get($testobj, 'C'); + } + + public function testSetStaticProperties() + { + $testobj = new _PropertyAccessTestHelperStaticProperties(); + TPropertyAccess::set($testobj, 'a', 10); + self::assertEquals(10, TPropertyAccess::get($testobj, 'a')); + self::assertEquals(10, TPropertyAccess::get($testobj, 'A')); + + TPropertyAccess::set($testobj, 'A', 100); + self::assertEquals(100, TPropertyAccess::get($testobj, 'a')); + self::assertEquals(100, TPropertyAccess::get($testobj, 'A')); + + TPropertyAccess::set($testobj, 'b', 10); + self::assertEquals(10, TPropertyAccess::get($testobj, 'b')); + self::assertEquals(10, TPropertyAccess::get($testobj, 'B')); + + TPropertyAccess::set($testobj, 'B', 100); + self::assertEquals(100, TPropertyAccess::get($testobj, 'b')); + self::assertEquals(100, TPropertyAccess::get($testobj, 'B')); + + TPropertyAccess::set($testobj, 'c', 30); + self::assertEquals(30, TPropertyAccess::get($testobj, 'c')); + + self::setExpectedException('TInvalidPropertyException'); + TPropertyAccess::get($testobj, 'C'); + } + + + public function testHasDynamicProperties() + { + $testobj = new _PropertyAccessTestHelperDynamicProperties(); + self::assertEquals(true, TPropertyAccess::has($testobj, 'a')); + self::assertEquals(true, TPropertyAccess::has($testobj, 'b')); + self::assertEquals(true, TPropertyAccess::has($testobj, 'c')); + + self::assertEquals(true, TPropertyAccess::has($testobj, 'A')); + self::assertEquals(true, TPropertyAccess::has($testobj, 'B')); + self::assertEquals(true, TPropertyAccess::has($testobj, 'C')); + } + + public function testGetDynamicProperties() + { + $testobj = new _PropertyAccessTestHelperDynamicProperties(); + self::assertEquals(1, TPropertyAccess::get($testobj, 'a')); + self::assertEquals(2, TPropertyAccess::get($testobj, 'b')); + self::assertEquals(1, TPropertyAccess::get($testobj, 'A')); + self::assertEquals(2, TPropertyAccess::get($testobj, 'B')); + + self::assertNull(TPropertyAccess::get($testobj, 'c')); + self::assertNull(TPropertyAccess::get($testobj, 'C')); + } + + public function testSetDynamicProperties() + { + $testobj = new _PropertyAccessTestHelperDynamicProperties(); + TPropertyAccess::set($testobj, 'a', 10); + self::assertEquals(10, TPropertyAccess::get($testobj, 'a')); + self::assertEquals(10, TPropertyAccess::get($testobj, 'A')); + + TPropertyAccess::set($testobj, 'A', 100); + self::assertEquals(100, TPropertyAccess::get($testobj, 'a')); + self::assertEquals(100, TPropertyAccess::get($testobj, 'A')); + + TPropertyAccess::set($testobj, 'b', 10); + self::assertEquals(10, TPropertyAccess::get($testobj, 'b')); + self::assertEquals(10, TPropertyAccess::get($testobj, 'B')); + + TPropertyAccess::set($testobj, 'B', 100); + self::assertEquals(100, TPropertyAccess::get($testobj, 'b')); + self::assertEquals(100, TPropertyAccess::get($testobj, 'B')); + + TPropertyAccess::set($testobj, 'c', 30); + self::assertNull(TPropertyAccess::get($testobj, 'c')); + self::assertNull(TPropertyAccess::get($testobj, 'C')); + } + + public function testArrayAccess() + { + $thingamajig = array( + 'a' => 'foo', + 'b' => 'bar', + 'c' => new _PropertyAccessTestHelperPublicVar(), + 'd' => new _PropertyAccessTestHelperStaticProperties(), + 'e' => new _PropertyAccessTestHelperDynamicProperties(), + ); + + $testobj = new _PropertyAccessTestHelperPublicVar(); + TPropertyAccess::set($testobj, 'a', $thingamajig); + + $tmp = TPropertyAccess::get($testobj, 'a'); + self::assertTrue(is_array($tmp)); + self::assertEquals($thingamajig, $tmp); + + self::assertEquals('foo', TPropertyAccess::get($testobj, 'a.a')); + self::assertEquals('bar', TPropertyAccess::get($testobj, 'a.b')); + self::assertTrue(TPropertyAccess::get($testobj, 'a.c') instanceof _PropertyAccessTestHelperPublicVar); + self::assertTrue(TPropertyAccess::get($testobj, 'a.d') instanceof _PropertyAccessTestHelperStaticProperties); + self::assertTrue(TPropertyAccess::get($testobj, 'a.e') instanceof _PropertyAccessTestHelperDynamicProperties); + + TPropertyAccess::set($testobj, 'a.c.a', 10); + TPropertyAccess::set($testobj, 'a.d.a', 10); + TPropertyAccess::set($testobj, 'a.e.a', 10); + self::assertEquals(10, TPropertyAccess::get($testobj, 'a.c.a')); + self::assertEquals(10, TPropertyAccess::get($testobj, 'a.d.a')); + self::assertEquals(10, TPropertyAccess::get($testobj, 'a.e.a')); + + TPropertyAccess::set($testobj, 'a.c.c', 30); + TPropertyAccess::set($testobj, 'a.d.c', 30); + TPropertyAccess::set($testobj, 'a.e.c', 30); + + self::assertEquals(30, TPropertyAccess::get($testobj, 'a.c.c')); + self::assertEquals(30, TPropertyAccess::get($testobj, 'a.d.c')); + + self::assertNull(TPropertyAccess::get($testobj, 'a.e.c')); + self::assertNull(TPropertyAccess::get($testobj, 'a.e.C')); + + self::setExpectedException('TInvalidPropertyException'); + TPropertyAccess::get($testobj, 'a.c.C'); + + self::setExpectedException('TInvalidPropertyException'); + TPropertyAccess::get($testobj, 'a.d.C'); + } +} + + + +class _PropertyAccessTestHelperPublicVar +{ + public $a = 1; + public $b = 2; +} + +class _PropertyAccessTestHelperStaticProperties +{ + private $_a = 1; + private $_b = 2; + + public function getA() + { + return $this -> _a; + } + + public function setA($value) + { + $this -> _a = $value; + } + + public function getB() + { + return $this -> _b; + } + + public function setB($value) + { + $this -> _b = $value; + } +} + +class _PropertyAccessTestHelperDynamicProperties +{ + private $_a = 1; + private $_b = 2; + + public function __set($name, $value) + { + switch(strToLower($name)) + { + case 'a': + $this -> _a = $value; + break; + case 'b': + $this -> _b = $value; + break; + } + } + + public function __get($name) + { + switch(strToLower($name)) + { + case 'a': + return $this -> _a; + break; + case 'b': + return $this -> _b; + break; + default: + return null; + break; + } + } +} + +?>
\ No newline at end of file diff --git a/tests/unit/Data/SqlMap/DynamicParameterTest.php b/tests/unit/Data/SqlMap/DynamicParameterTest.php new file mode 100644 index 00000000..ec37f4e0 --- /dev/null +++ b/tests/unit/Data/SqlMap/DynamicParameterTest.php @@ -0,0 +1,90 @@ +<?php
+require_once dirname(__FILE__).'/../../phpunit.php';
+
+Prado::using('System.Data.*');
+Prado::using('System.Data.SqlMap.*');
+
+/**
+ * @package System.Data.SqlMap
+ */
+class DynamicParameterTest extends PHPUnit_Framework_TestCase
+{
+
+ protected function getMysqlSqlMapManager()
+ {
+ static $conn;
+ static $sqlMapManager;
+
+ if($conn === null)
+ $conn = new TDbConnection('mysql:host=localhost;dbname=prado_system_data_sqlmap', 'prado_unitest', 'prado_system_data_sqlmap_unitest');
+
+ $conn->setActive(true);
+
+ if($sqlMapManager === null)
+ {
+ $sqlMapManager = new TSqlMapManager($conn);
+ $sqlMapManager->configureXml( dirname(__FILE__) . '/DynamicParameterTestMap.xml');
+ }
+
+ return $sqlMapManager;
+ }
+
+ public function testMysqlSelectStaticSql()
+ {
+ $mapper = $this->getMysqlSqlMapManager();
+ $gateway = $mapper->getSqlmapGateway();
+
+ $value = $gateway->queryForObject('SelectStaticSql1');
+ self::assertEquals('staticsql1', $value);
+
+ $value = $gateway->queryForObject('SelectStaticSql2');
+ self::assertEquals('staticsql2', $value);
+ }
+
+ public function testMysqlSelectDynamicTable()
+ {
+ $mapper = $this->getMysqlSqlMapManager();
+ $gateway = $mapper->getSqlmapGateway();
+
+ $value = $gateway->queryForObject('SelectDynamicTable', 'dynamicparametertest1');
+ self::assertEquals('dynamictableparametertest1', $value);
+
+ $value = $gateway->queryForObject('SelectDynamicTable', 'dynamicparametertest2');
+ self::assertEquals('dynamictableparametertest2', $value);
+ }
+
+ public function testMysqlSelectDynamicComplex()
+ {
+ $mapper = $this->getMysqlSqlMapManager();
+ $gateway = $mapper->getSqlmapGateway();
+
+ $aParams = array(
+ 'tablename' => 'dynamicparametertest1',
+ 'testname' => 'dynamictable'
+ );
+ $value = $gateway->queryForObject('SelectDynamicComplex', $aParams);
+ self::assertEquals('#dynamictableparametertest1$', $value);
+
+ $aParams = array(
+ 'tablename' => 'dynamicparametertest2',
+ 'testname' => 'dynamictable'
+ );
+ $value = $gateway->queryForObject('SelectDynamicComplex', $aParams);
+ self::assertEquals('#dynamictableparametertest2$', $value);
+ }
+
+ public function testMysqlSelectNoDynamic()
+ {
+ $mapper = $this->getMysqlSqlMapManager();
+ $gateway = $mapper->getSqlmapGateway();
+
+ $value = $gateway->queryForObject('SelectNoDynamic', 'dynamictable');
+ self::assertEquals('dynamictableparametertest1', $value);
+
+ $value = $gateway->queryForObject('SelectNoDynamic', 'staticsql');
+ self::assertEquals('staticsql1', $value);
+ }
+
+}
+
+?>
\ No newline at end of file diff --git a/tests/unit/Data/SqlMap/DynamicParameterTestMap.xml b/tests/unit/Data/SqlMap/DynamicParameterTestMap.xml new file mode 100644 index 00000000..65a91154 --- /dev/null +++ b/tests/unit/Data/SqlMap/DynamicParameterTestMap.xml @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="UTF-8" ?>
+<sqlMap namespace="DynamicParameterTestMap">
+ <select id="SelectStaticSql1" resultClass="string">
+ <![CDATA[
+ SELECT `teststring` FROM `dynamicparametertest1` WHERE `testname`="staticsql"
+ ]]>
+ </select>
+
+ <select id="SelectStaticSql2" resultClass="string">
+ <![CDATA[
+ SELECT `teststring` FROM `dynamicparametertest2` WHERE `testname`="staticsql"
+ ]]>
+ </select>
+
+ <select id="SelectDynamicTable" parameterClass="string" resultClass="string">
+ <![CDATA[
+ SELECT `teststring` FROM `$value$` WHERE `testname`="dynamictable"
+ ]]>
+ </select>
+
+ <select id="SelectDynamicComplex" parameterClass="array" resultClass="string">
+ <![CDATA[
+ SELECT CONCAT("##", `teststring`, "$$") FROM `$tablename$` WHERE `testname`=#testname, dbType=varchar#
+ ]]>
+ </select>
+
+ <select id="SelectNoDynamic" parameterClass="string" resultClass="string">
+ <![CDATA[
+ SELECT `teststring` FROM `dynamicparametertest1` WHERE `testname`=#value, dbType=varchar#
+ ]]>
+ </select>
+
+</sqlMap>
\ No newline at end of file diff --git a/tests/unit/Data/SqlMap/fixtures/mysql5_reset.sql b/tests/unit/Data/SqlMap/fixtures/mysql5_reset.sql new file mode 100644 index 00000000..7544ce6b --- /dev/null +++ b/tests/unit/Data/SqlMap/fixtures/mysql5_reset.sql @@ -0,0 +1,22 @@ +TRUNCATE TABLE `prado_system_data_sqlmap`.`dynamicparametertest1`;
+TRUNCATE TABLE `prado_system_data_sqlmap`.`dynamicparametertest2`;
+
+INSERT INTO `prado_system_data_sqlmap`.`dynamicparametertest1` (
+ `testname` ,
+ `teststring` ,
+ `testinteger`
+)
+VALUES
+('staticsql', 'staticsql1', '1'),
+('dynamictable', 'dynamictableparametertest1', '1')
+;
+
+INSERT INTO `prado_system_data_sqlmap`.`dynamicparametertest2` (
+ `testname` ,
+ `teststring` ,
+ `testinteger`
+)
+VALUES
+('staticsql', 'staticsql2', '2'),
+('dynamictable', 'dynamictableparametertest2', '2')
+;
diff --git a/tests/unit/Data/SqlMap/fixtures/mysql5_setup.sql b/tests/unit/Data/SqlMap/fixtures/mysql5_setup.sql new file mode 100644 index 00000000..753b48ac --- /dev/null +++ b/tests/unit/Data/SqlMap/fixtures/mysql5_setup.sql @@ -0,0 +1,22 @@ +CREATE DATABASE `prado_system_data_sqlmap`
+ DEFAULT CHARACTER SET utf8
+ COLLATE utf8_general_ci;
+
+GRANT ALL ON `prado_system_data_sqlmap`.*
+ TO 'prado_unitest'@'localhost'
+ IDENTIFIED BY 'prado_system_data_sqlmap_unitest';
+
+DROP TABLE IF EXISTS `dynamicparametertest1`;
+CREATE TABLE `dynamicparametertest1` (
+ `testname` varchar(50) NOT NULL,
+ `teststring` varchar(50) NOT NULL,
+ `testinteger` int(11) NOT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+
+DROP TABLE IF EXISTS `dynamicparametertest2`;
+CREATE TABLE `dynamicparametertest2` (
+ `testname` varchar(50) NOT NULL,
+ `teststring` varchar(50) NOT NULL,
+ `testinteger` int(11) NOT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+
|