summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rwxr-xr-xtests/FunctionalTests/active-controls/protected/pages/ActiveDatePicker.page8
-rwxr-xr-xtests/FunctionalTests/active-controls/protected/pages/ActiveDatePicker.php4
-rwxr-xr-xtests/FunctionalTests/active-controls/tests/ActiveDatePickerTestCase.php15
-rw-r--r--tests/FunctionalTests/index.php2
-rw-r--r--tests/FunctionalTests/tickets/protected/pages/Issue120.page13
-rw-r--r--tests/FunctionalTests/tickets/protected/pages/Issue120.php22
-rw-r--r--tests/FunctionalTests/tickets/protected/pages/Layout.php17
-rw-r--r--tests/FunctionalTests/tickets/tests/Issue120TestCase.php21
-rw-r--r--tests/unit/AllTests.php9
-rw-r--r--tests/unit/Data/SqlMap/AllTests.php30
-rw-r--r--tests/unit/Data/SqlMap/DataMapper/AllTests.php28
-rw-r--r--tests/unit/Data/SqlMap/DataMapper/TPropertyAccessTest.php269
-rw-r--r--tests/unit/Data/SqlMap/DynamicParameterTest.php90
-rw-r--r--tests/unit/Data/SqlMap/DynamicParameterTestMap.xml33
-rw-r--r--tests/unit/Data/SqlMap/fixtures/mysql5_reset.sql22
-rw-r--r--tests/unit/Data/SqlMap/fixtures/mysql5_setup.sql22
16 files changed, 596 insertions, 9 deletions
diff --git a/tests/FunctionalTests/active-controls/protected/pages/ActiveDatePicker.page b/tests/FunctionalTests/active-controls/protected/pages/ActiveDatePicker.page
index ed35293e..64f37867 100755
--- a/tests/FunctionalTests/active-controls/protected/pages/ActiveDatePicker.page
+++ b/tests/FunctionalTests/active-controls/protected/pages/ActiveDatePicker.page
@@ -11,6 +11,14 @@
<com:TActiveButton ID="increaseButton" OnClick="increase" Text="+1" OnCallback="testDatePicker"/>
<com:TButton ID="toggleButton" OnClick="toggleMode" Text="Toggle input mode (postback)"/>
</p>
+<p>
+ShowCalendar=false
+</p>
+<p>
+<com:TActiveDatePicker ID="datepicker2" DateFormat="MM-dd-yyyy" OnCallback="testDatePicker2" InputMode="DropDownList" ShowCalendar="false"/>
+<com:TActiveLabel ID="status2" /><br/>
+</p>
+
</com:TForm>
</body>
diff --git a/tests/FunctionalTests/active-controls/protected/pages/ActiveDatePicker.php b/tests/FunctionalTests/active-controls/protected/pages/ActiveDatePicker.php
index 6d78a664..4897a146 100755
--- a/tests/FunctionalTests/active-controls/protected/pages/ActiveDatePicker.php
+++ b/tests/FunctionalTests/active-controls/protected/pages/ActiveDatePicker.php
@@ -14,6 +14,10 @@ class ActiveDatePicker extends TPage {
$this->status->Text = $this->datepicker->getText();
}
+ public function testDatePicker2($sender, $param){
+ $this->status2->Text = $this->datepicker2->getText();
+ }
+
public function today ($sender, $param)
{
$this->datepicker->setTimestamp(time());
diff --git a/tests/FunctionalTests/active-controls/tests/ActiveDatePickerTestCase.php b/tests/FunctionalTests/active-controls/tests/ActiveDatePickerTestCase.php
index b8e9594e..5faee611 100755
--- a/tests/FunctionalTests/active-controls/tests/ActiveDatePickerTestCase.php
+++ b/tests/FunctionalTests/active-controls/tests/ActiveDatePickerTestCase.php
@@ -35,7 +35,7 @@ class ActiveDatePickerTestCase extends SeleniumTestCase
$this->verifyText("status", date('m-d-Y', strtotime('+1 month')));
$this->click('toggleButton');
- $this->pause(1000);
+ $this->pause(2000);
$this->click("todayButton");
$this->pause(800);
@@ -91,6 +91,19 @@ class ActiveDatePickerTestCase extends SeleniumTestCase
$this->verifySelected("datepicker_day", date('d', $dateToCheck));
$this->verifySelected("datepicker_year", date('Y', $dateToCheck));
$this->verifyText("status", date('m-d-Y', $dateToCheck));
+
+ $this->click('ctl1');
+ $this->pause(800);
+
+ $this->verifyText("status2", "");
+ $dateToCheck=time();
+ $this->verifySelected("datepicker2_month", date('m', $dateToCheck));
+ $this->verifySelected("datepicker2_day", date('d', $dateToCheck));
+ $this->verifySelected("datepicker2_year", date('Y', $dateToCheck));
+ $this->select("datepicker2_year", 2005);
+ $this->pause(800);
+ $dateToCheck=mktime(0,0,0,(int)date('m'),(int)date('d'), 2005);
+ $this->verifyText("status2", date('m-d-Y', $dateToCheck));
}
}
diff --git a/tests/FunctionalTests/index.php b/tests/FunctionalTests/index.php
index 319ca3dc..128e80e3 100644
--- a/tests/FunctionalTests/index.php
+++ b/tests/FunctionalTests/index.php
@@ -10,7 +10,7 @@ Prado Functional Test Suites
<li><a href="quickstart.php">Tests of QuickStart Tutorial Demo</a></li>
<li><a href="validators.php">Tests of Validators</a> (<a href="validators/index.php">list of test samples</a>)</li>
<li><a href="active.php">Tests of Active Controls</a> (<a href="active-controls/index.php">list of test samples</a>) </li>
- <li><a href="tickets.php">Tests of Trac Tickets</a> (<a href="tickets/index.php">list of Test Samples</a>)</li>
+ <li><a href="tickets.php">Tests of Trac Tickets and Goggle Code Issues</a> (<a href="tickets/index.php">list of Test Samples</a>)</li>
<li><a href="features.php">Tests of New Features</a> (<a href="features/index.php">list of new features</a>)</li>
</ul>
</body>
diff --git a/tests/FunctionalTests/tickets/protected/pages/Issue120.page b/tests/FunctionalTests/tickets/protected/pages/Issue120.page
new file mode 100644
index 00000000..0b504849
--- /dev/null
+++ b/tests/FunctionalTests/tickets/protected/pages/Issue120.page
@@ -0,0 +1,13 @@
+<com:TContent ID="Content">
+ <h1>TActiveDropDownList PromptValue Test</h1>
+
+ <com:TActiveDropDownList id="ddl1" PromptValue="PromptValue" PromptText="PromptText">
+ <com:TListItem Value="value 1" Text="item 1" />
+ <com:TListItem Value="value 2" Text="item 2" />
+ <com:TListItem Value="value 3" Text="item 3" />
+ <com:TListItem Value="value 4" Text="item 4" />
+ </com:TActiveDropDownList>
+
+ <com:TActiveButton id="btn1" OnCallback="buttonClickCallback" />
+
+</com:TContent> \ No newline at end of file
diff --git a/tests/FunctionalTests/tickets/protected/pages/Issue120.php b/tests/FunctionalTests/tickets/protected/pages/Issue120.php
new file mode 100644
index 00000000..c04ae93d
--- /dev/null
+++ b/tests/FunctionalTests/tickets/protected/pages/Issue120.php
@@ -0,0 +1,22 @@
+<?php
+Prado::using('System.Web.UI.ActiveControls.*');
+
+class Issue120 extends TPage
+{
+ public function buttonClickCallback($sender, $param)
+ {
+
+ $this -> ddl1 -> setDataSource(
+ array(
+ 'callback value 1' => 'callback item 1',
+ 'callback value 2' => 'callback item 2',
+ 'callback value 3' => 'callback item 3',
+ 'callback value 4' => 'callback item 4'
+ )
+ );
+ $this -> ddl1 -> dataBind();
+
+ }
+}
+
+?> \ No newline at end of file
diff --git a/tests/FunctionalTests/tickets/protected/pages/Layout.php b/tests/FunctionalTests/tickets/protected/pages/Layout.php
index 0e549fa7..6d455371 100644
--- a/tests/FunctionalTests/tickets/protected/pages/Layout.php
+++ b/tests/FunctionalTests/tickets/protected/pages/Layout.php
@@ -4,10 +4,19 @@ class Layout extends TTemplateControl
{
public function onLoad($param)
{
- $num = str_replace('Ticket','',$this->getPage()->getPagePath());
- $this->getPage()->setTitle("Verifying Ticket $num");
- $this->ticketlink->setText("Verifying Ticket $num");
- $this->ticketlink->setNavigateUrl("http://trac.pradosoft.com/prado/ticket/{$num}");
+ $num = str_replace(array('Ticket', 'Issue'), '', $this->getPage()->getPagePath());
+ $type = str_replace($num, '', $this->getPage()->getPagePath());
+
+ $this->getPage()->setTitle("Verifying $type $num");
+ $this->ticketlink->setText("Verifying $type $num");
+
+ if(strToLower($type) === 'issue') {
+ $this->ticketlink->setNavigateUrl("http://code.google.com/p/prado3/issues/detail?id={$num}");
+ }
+ else {
+ $this->ticketlink->setNavigateUrl("http://trac.pradosoft.com/prado/ticket/{$num}");
+ }
+
}
}
diff --git a/tests/FunctionalTests/tickets/tests/Issue120TestCase.php b/tests/FunctionalTests/tickets/tests/Issue120TestCase.php
new file mode 100644
index 00000000..a2823c9d
--- /dev/null
+++ b/tests/FunctionalTests/tickets/tests/Issue120TestCase.php
@@ -0,0 +1,21 @@
+<?php
+
+class Issue120TestCase extends SeleniumTestCase
+{
+ function test()
+ {
+ $this->open('tickets/index.php?page=Issue120');
+ $this->assertTextPresent('TActiveDropDownList PromptValue Test');
+
+ $this->assertSelectedIndex("ctl0_Content_ddl1", 0);
+ $this->assertSelectedValue("ctl0_Content_ddl1", 'PromptValue');
+
+ $this->click("ctl0_Content_btn1");
+ $this->pause(800);
+
+ $this->assertSelectedIndex("ctl0_Content_ddl1", 0);
+ $this->assertSelectedValue("ctl0_Content_ddl1", 'PromptValue');
+ }
+}
+
+?> \ No newline at end of file
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;
+