3 namespace Doctrine\Tests\Common\Persistence;
5 use Doctrine\Common\Persistence\PersistentObject;
6 use Doctrine\Common\Persistence\Mapping\ClassMetadata;
7 use Doctrine\Common\Persistence\Mapping\ReflectionService;
12 class PersistentObjectTest extends \Doctrine\Tests\DoctrineTestCase
18 public function setUp()
20 $this->cm = new TestObjectMetadata;
21 $this->om = $this->getMock('Doctrine\Common\Persistence\ObjectManager');
22 $this->om->expects($this->any())->method('getClassMetadata')
23 ->will($this->returnValue($this->cm));
24 $this->object = new TestObject;
25 PersistentObject::setObjectManager($this->om);
26 $this->object->injectObjectManager($this->om, $this->cm);
29 public function testGetObjectManager()
31 $this->assertSame($this->om, PersistentObject::getObjectManager());
34 public function testNonMatchingObjectManager()
36 $this->setExpectedException('RuntimeException');
37 $om = $this->getMock('Doctrine\Common\Persistence\ObjectManager');
38 $this->object->injectObjectManager($om, $this->cm);
41 public function testGetField()
43 $this->assertEquals('beberlei', $this->object->getName());
46 public function testSetField()
48 $this->object->setName("test");
49 $this->assertEquals("test", $this->object->getName());
52 public function testGetIdentifier()
54 $this->assertEquals(1, $this->object->getId());
57 public function testSetIdentifier()
59 $this->setExpectedException('BadMethodCallException');
60 $this->object->setId(2);
63 public function testSetUnknownField()
65 $this->setExpectedException('BadMethodCallException');
66 $this->object->setUnknown("test");
69 public function testGetUnknownField()
71 $this->setExpectedException('BadMethodCallException');
72 $this->object->getUnknown();
75 public function testGetToOneAssociation()
77 $this->assertNull($this->object->getParent());
80 public function testSetToOneAssociation()
82 $parent = new TestObject();
83 $this->object->setParent($parent);
84 $this->assertSame($parent, $this->object->getParent($parent));
87 public function testSetInvalidToOneAssocation()
89 $parent = new \stdClass();
91 $this->setExpectedException('InvalidArgumentException');
92 $this->object->setParent($parent);
95 public function testSetToOneAssociationNull()
97 $parent = new TestObject();
98 $this->object->setParent($parent);
99 $this->object->setParent(null);
100 $this->assertNull($this->object->getParent());
103 public function testAddToManyAssocation()
105 $child = new TestObject();
106 $this->object->addChildren($child);
108 $this->assertSame($this->object, $child->getParent());
109 $this->assertEquals(1, count($this->object->getChildren()));
111 $child = new TestObject();
112 $this->object->addChildren($child);
114 $this->assertEquals(2, count($this->object->getChildren()));
117 public function testAddInvalidToManyAssocation()
119 $this->setExpectedException('InvalidArgumentException');
120 $this->object->addChildren(new \stdClass());
123 public function testNoObjectManagerSet()
125 PersistentObject::setObjectManager(null);
126 $child = new TestObject();
128 $this->setExpectedException('RuntimeException');
129 $child->setName("test");
132 public function testInvalidMethod()
134 $this->setExpectedException('BadMethodCallException');
135 $this->object->asdf();
138 public function testAddInvalidCollection()
140 $this->setExpectedException('BadMethodCallException');
141 $this->object->addAsdf(new \stdClass());
145 class TestObject extends PersistentObject
148 protected $name = 'beberlei';
153 class TestObjectMetadata implements ClassMetadata
156 public function getAssociationMappedByTargetField($assocName)
158 $assoc = array('children' => 'parent');
159 return $assoc[$assocName];
162 public function getAssociationNames()
164 return array('parent', 'children');
167 public function getAssociationTargetClass($assocName)
169 return __NAMESPACE__ . '\TestObject';
172 public function getFieldNames()
174 return array('id', 'name');
177 public function getIdentifier()
182 public function getName()
184 return __NAMESPACE__ . '\TestObject';
187 public function getReflectionClass()
189 return new \ReflectionClass($this->getName());
192 public function getTypeOfField($fieldName)
194 $types = array('id' => 'integer', 'name' => 'string');
195 return $types[$fieldName];
198 public function hasAssociation($fieldName)
200 return in_array($fieldName, array('parent', 'children'));
203 public function hasField($fieldName)
205 return in_array($fieldName, array('id', 'name'));
208 public function isAssociationInverseSide($assocName)
210 return ($assocName === 'children');
213 public function isCollectionValuedAssociation($fieldName)
215 return ($fieldName === 'children');
218 public function isIdentifier($fieldName)
220 return $fieldName === 'id';
223 public function isSingleValuedAssociation($fieldName)
225 return $fieldName === 'parent';
228 public function getIdentifierValues($entity)
233 public function getIdentifierFieldNames()
238 public function initializeReflection(ReflectionService $reflService)
243 public function wakeupReflection(ReflectionService $reflService)