| [ Index ] |
PHP Cross Reference of Limb3 |
[Summary view] [Print] [Text view]
1 <?php 2 /* 3 * Limb PHP Framework 4 * 5 * @link http://limb-project.com 6 * @copyright Copyright © 2004-2007 BIT(http://bit-creative.com) 7 * @license LGPL http://www.gnu.org/copyleft/lesser.html 8 */ 9 lmb_require('limb/active_record/src/lmbActiveRecord.class.php'); 10 lmb_require('limb/dbal/src/lmbSimpleDb.class.php'); 11 12 class TestOneTableTypedObject extends lmbActiveRecord 13 { 14 protected $_db_table_name = 'test_one_table_typed_object'; 15 } 16 17 class FooOneTableTestObject extends TestOneTableTypedObject{} 18 class BarFooOneTableTestObject extends FooOneTableTestObject{} 19 20 class TypedLectureForTest extends lmbActiveRecord 21 { 22 protected $_db_table_name = 'lecture_for_typed_test'; 23 protected $_belongs_to = array('course' => array('field' => 'course_id', 24 'class' => 'CourseForTestForTypedLecture')); 25 } 26 27 class FooLectureForTest extends TypedLectureForTest{} 28 class BarFooLectureForTest extends FooLectureForTest{} 29 30 class CourseForTestForTypedLecture extends lmbActiveRecord 31 { 32 protected $_db_table_name = 'course_for_typed_test'; 33 protected $_has_many = array('lectures' => array('field' => 'course_id', 34 'class' => 'TypedLectureForTest'), 35 'foo_lectures' => array('field' => 'course_id', 36 'class' => 'FooLectureForTest')); 37 } 38 39 class lmbARSubclassingTest extends UnitTestCase 40 { 41 protected $db; 42 43 function setUp() 44 { 45 $this->db = new lmbSimpleDb(lmbToolkit :: instance()->getDefaultDbConnection()); 46 $this->_dbCleanUp(); 47 } 48 49 function tearDown() 50 { 51 $this->_dbCleanUp(); 52 } 53 54 function _dbCleanUp() 55 { 56 $this->db->delete('lecture_for_typed_test'); 57 $this->db->delete('course_for_typed_test'); 58 $this->db->delete('test_one_table_typed_object'); 59 } 60 61 function testCreate() 62 { 63 $object1 = new FooOneTableTestObject(); 64 $object1->setTitle('Some title'); 65 $object1->save(); 66 67 $object2 = new FooOneTableTestObject($object1->getId()); 68 $this->assertEqual($object2->getTitle(), $object1->getTitle()); 69 70 //parents are supertypes.. 71 $object3 = new TestOneTableTypedObject($object1->getId()); 72 $this->assertEqual($object3->getTitle(), $object1->getTitle()); 73 74 try 75 { 76 //..while deeper subclasses are not 77 new BarFooOneTableTestObject($object1->getId()); 78 $this->assertTrue(false); 79 } 80 catch(lmbARException $e){} 81 } 82 83 function testSupertypeDelete() 84 { 85 $foo = new FooOneTableTestObject(); 86 $foo->setTitle('Some title'); 87 $foo->save(); 88 89 $bar = new BarFooOneTableTestObject(); 90 $bar->setTitle('Another title'); 91 $bar->save(); 92 93 lmbActiveRecord :: delete('TestOneTableTypedObject'); 94 95 $rs = lmbActiveRecord :: find('FooOneTableTestObject'); 96 $this->assertEqual($rs->count(), 0); 97 98 $rs = lmbActiveRecord :: find('BarFooOneTableTestObject'); 99 $this->assertEqual($rs->count(), 0); 100 } 101 102 function testTypedDelete() 103 { 104 $foo = new FooOneTableTestObject(); 105 $foo->setTitle('Some title'); 106 $foo->save(); 107 108 $bar = new BarFooOneTableTestObject(); 109 $bar->setTitle('Another title'); 110 $bar->save(); 111 112 lmbActiveRecord :: delete('BarFooOneTableTestObject');//removing subclass 113 114 $rs = lmbActiveRecord :: find('BarFooOneTableTestObject'); 115 $this->assertEqual($rs->count(), 0); 116 117 $rs = lmbActiveRecord :: find('FooOneTableTestObject');//supertype stays 118 $this->assertEqual($rs->count(), 1); 119 120 lmbActiveRecord :: delete('FooOneTableTestObject');//removing supertype 121 122 $rs = lmbActiveRecord :: find('FooOneTableTestObject'); 123 $this->assertEqual($rs->count(), 0); 124 } 125 126 function testFind() 127 { 128 $object1 = new FooOneTableTestObject(); 129 $object1->setTitle('Some title'); 130 $object1->save(); 131 132 $object2 = new BarFooOneTableTestObject(); 133 $object2->setTitle('Some other title'); 134 $object2->save(); 135 136 $rs = lmbActiveRecord :: find('FooOneTableTestObject');//supertype 137 $this->assertEqual($rs->count(), 2); 138 $this->assertIsA($rs->at(0), 'FooOneTableTestObject'); 139 $this->assertIsA($rs->at(1), 'BarFooOneTableTestObject'); 140 141 $rs = lmbActiveRecord :: find('BarFooOneTableTestObject');//subclass 142 $this->assertEqual($rs->count(), 1); 143 $this->assertIsA($rs->at(0), 'BarFooOneTableTestObject'); 144 } 145 146 function testTypedRelationFind() 147 { 148 $course = new CourseForTestForTypedLecture(); 149 $course->setTitle('Source1'); 150 $course->save(); 151 152 $lecture1 = new FooLectureForTest(); 153 $lecture1->setTitle('Some title'); 154 $lecture1->setCourse($course); 155 $lecture1->save(); 156 157 $lecture2 = new BarFooLectureForTest(); 158 $lecture2->setTitle('Some other title'); 159 $lecture2->setCourse($course); 160 $lecture2->save(); 161 162 $course->getLectures()->add($lecture1); 163 $course->getLectures()->add($lecture2); 164 165 $course2 = new CourseForTestForTypedLecture($course->getId()); 166 167 $this->assertEqual($course2->getLectures()->count(), 2);//supertype by default 168 $this->assertIsA($course2->getLectures()->at(0), 'FooLectureForTest'); 169 $this->assertIsA($course2->getLectures()->at(1), 'BarFooLectureForTest'); 170 171 //narrowing selection but again its supertype for BarFooLectureForTest 172 $lectures = $course2->getLectures()->find(array('class' => 'FooLectureForTest')); 173 174 $this->assertEqual($lectures->count(), 2); 175 $this->assertIsA($lectures->at(0), 'FooLectureForTest'); 176 $this->assertIsA($lectures->at(1), 'BarFooLectureForTest'); 177 178 //narrowing more 179 $lectures = $course2->getLectures()->find(array('class' => 'BarFooLectureForTest')); 180 $this->assertEqual($lectures->count(), 1); 181 $this->assertIsA($lectures->at(0), 'BarFooLectureForTest'); 182 } 183 } 184 185 ?>
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
| Generated: Sat Nov 22 03:48:54 2008 | Cross-referenced by PHPXref 0.7 |