Changeset 796
- Timestamp:
- 08/10/07 11:05:31 (1 year ago)
- Files:
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/src/main/php/net/stubbles/php/serializer/stubPHPSerializer.php
r777 r796 94 94 } 95 95 96 $nqClassName = get_class($object);97 96 $fqClassName = (($object instanceof stubObject) ? ($object->getClassName()) : (get_class($object))); 98 97 // Check the mapping-cache for an entry for this object's class … … 104 103 // tree of the object's class to the class being handled by the mapping. 105 104 $cinfo = array(); 106 foreach (array_keys($this->mappings) as $token) { 107 $refClass = $this->mappings[$token]->getHandledClass(); 105 $class = (($object instanceof stubObject) ? ($object->getClass()) : (new stubReflectionObject($object))); 106 foreach ($this->mappings as $mapping) { 107 $refClass = $mapping->getHandledClass(); 108 108 $refClassName = $refClass->getName(); 109 109 if (($object instanceof $refClassName) === false) { … … 111 111 } 112 112 113 $distance = 0; 113 $distance = 0; 114 $objectClass = $class; 114 115 do { 115 116 // check for direct match 116 if ($refClass->getName() != $ nqClassName) {117 if ($refClass->getName() != $objectClass->getName()) { 117 118 $distance++; 118 119 } 119 120 // check if this class is the parent class, if yes do 121 // not continue to search for deeper parent classes 122 if (get_parent_class($object) == $refClass->getName()) { 123 break; 124 } 125 } while (0 < $distance && false !== ($refClass = $refClass->getParentClass())); 120 } while (0 < $distance && null !== ($objectClass = $objectClass->getParentClass())); 126 121 127 122 // register distance to object's class in cinfo 128 $cinfo[$distance] = $ this->mappings[$token];123 $cinfo[$distance] = $mapping; 129 124 130 125 if (isset($cinfo[0]) == true) { trunk/src/test/php/net/stubbles/php/serializer/stubPHPSerializerTestCase.php
r776 r796 11 11 interface TestSerializedMapping0 { } 12 12 class TestSerializedMapping1 implements TestSerializedMapping0 { } 13 interface TestSerializedMapping3{ }14 class TestSerializedMapping 2 extends TestSerializedMapping1 implements TestSerializedMapping3{ }15 class TestSerializedMapping 4 extends TestSerializedMapping2 implements TestSerializedMapping3{ }13 class TestSerializedMapping2 extends TestSerializedMapping1 { } 14 class TestSerializedMapping4 extends TestSerializedMapping2 { } 15 class TestSerializedMapping5 extends TestSerializedMapping4 { } 16 16 /** 17 17 * Tests for net.stubbles.php.serializer.stubPHPSerializer. … … 168 168 $mockMapping2->setReturnValue('getHandledClass', new ReflectionClass('TestSerializedMapping2')); 169 169 $mockMapping2->setReturnValue('serialize', 'BAZ:dummy'); 170 $mockMapping3 = new MockstubPHPSerializerMapping();171 $mockMapping3->setReturnValue('getToken', 'X');172 $mockMapping3->setReturnValue('getHandledClass', new ReflectionClass('TestSerializedMapping3'));173 $mockMapping3->setReturnValue('serialize', 'X:dummy');174 170 175 171 // both must be serialized with the FOO mapping, because both are … … 179 175 $this->assertEqual('FOO:dummy', $this->serializer->serialize(new TestSerializedMapping2())); 180 176 $this->assertEqual('FOO:dummy', $this->serializer->serialize(new TestSerializedMapping4())); 177 $this->assertEqual('FOO:dummy', $this->serializer->serialize(new TestSerializedMapping5())); 181 178 182 179 // both must be serialized with the BAR mapping, because both are … … 186 183 $this->assertEqual('BAR:dummy', $this->serializer->serialize(new TestSerializedMapping2())); 187 184 $this->assertEqual('BAR:dummy', $this->serializer->serialize(new TestSerializedMapping4())); 185 $this->assertEqual('BAR:dummy', $this->serializer->serialize(new TestSerializedMapping5())); 188 186 189 187 // add more concrete mapping for BAZ. TestSerializedMapping1 must still … … 194 192 $this->assertEqual('BAZ:dummy', $this->serializer->serialize(new TestSerializedMapping2())); 195 193 $this->assertEqual('BAZ:dummy', $this->serializer->serialize(new TestSerializedMapping4())); 196 197 // concrete mapping for classes implementing interface TestSerializedMapping3 198 $this->serializer->addMapping($mockMapping3); 199 $this->assertEqual('BAR:dummy', $this->serializer->serialize(new TestSerializedMapping1())); 200 $this->assertEqual('BAZ:dummy', $this->serializer->serialize(new TestSerializedMapping2())); 201 $this->assertEqual('X:dummy', $this->serializer->serialize(new TestSerializedMapping4())); 194 $this->assertEqual('BAZ:dummy', $this->serializer->serialize(new TestSerializedMapping5())); 202 195 } 203 196 }
