From c6904380ac34536c0f3d65d3c92deaa9fa532f4a Mon Sep 17 00:00:00 2001 From: "godzilla80@gmx.net" <> Date: Fri, 1 May 2009 08:30:05 +0000 Subject: Fixed Issue #55 - TPropertyAccess.get don't recognize magic getter __get --- tests/unit/Data/SqlMap/AllTests.php | 2 + tests/unit/Data/SqlMap/DataMapper/AllTests.php | 28 +++ .../Data/SqlMap/DataMapper/TPropertyAccessTest.php | 269 +++++++++++++++++++++ 3 files changed, 299 insertions(+) create mode 100644 tests/unit/Data/SqlMap/DataMapper/AllTests.php create mode 100644 tests/unit/Data/SqlMap/DataMapper/TPropertyAccessTest.php (limited to 'tests/unit/Data') diff --git a/tests/unit/Data/SqlMap/AllTests.php b/tests/unit/Data/SqlMap/AllTests.php index 187be17f..735f1202 100644 --- a/tests/unit/Data/SqlMap/AllTests.php +++ b/tests/unit/Data/SqlMap/AllTests.php @@ -6,6 +6,7 @@ if(!defined('PHPUnit_MAIN_METHOD')) { } require_once 'DynamicParameterTest.php'; +require_once './DataMapper/AllTests.php'; class Data_SqlMap_AllTests { @@ -17,6 +18,7 @@ class Data_SqlMap_AllTests { $suite = new PHPUnit_Framework_TestSuite('System.Data.SqlMap'); $suite->addTestSuite('DynamicParameterTest'); + $suite -> addTest( Data_SqlMap_DataMapper_AllTests::suite() ); return $suite; } 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 @@ +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 @@ + '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 -- cgit v1.2.3