Neos\Flow\Tests\Unit\ObjectManagement\ObjectSerializerTest::serializeObjectSerializesObjectInstancesOnlyOnceToPreventRecursion PHP Method

serializeObjectSerializesObjectInstancesOnlyOnceToPreventRecursion() public method

    public function serializeObjectSerializesObjectInstancesOnlyOnceToPreventRecursion()
    {
        $className = 'DummyClassForRecursion' . md5(uniqid(mt_rand(), true));
        eval('class ' . $className . ' {
			public $name;
			public $parent;
			public $child;
		}');
        $mockObjectManager = $this->getMockBuilder(ObjectManager::class)->disableOriginalConstructor()->getMock();
        $mockObjectManager->expects($this->any())->method('getObjectNameByClassName')->with($className)->will($this->returnValue(ObjectSerializer::CLASSNAME));
        $mockReflectionService = $this->getMockBuilder(ReflectionService::class)->disableOriginalConstructor()->getMock();
        $mockReflectionService->expects($this->any())->method('getClassPropertyNames')->with($className)->will($this->returnValue(['name', 'parent', 'child']));
        $mockReflectionService->expects($this->any())->method('isPropertyTaggedWith')->will($this->returnValue(false));
        $mockPersistenceManager = $this->createMock(PersistenceManagerInterface::class);
        /** @var ObjectSerializer $objectSerializer */
        $objectSerializer = $this->getAccessibleMock(ObjectSerializer::class, ['dummy']);
        $objectSerializer->injectObjectManager($mockObjectManager);
        $objectSerializer->injectReflectionService($mockReflectionService);
        $objectSerializer->injectPersistenceManager($mockPersistenceManager);
        $objectA = new $className();
        $objectA->name = 'A';
        $objectB = new $className();
        $objectB->name = 'B';
        $objectA->child = $objectB;
        $objectB->parent = $objectA;
        $expectedPropertyArray = [spl_object_hash($objectB) => [ObjectSerializer::CLASSNAME => $className, ObjectSerializer::PROPERTIES => ['name' => [ObjectSerializer::TYPE => 'simple', ObjectSerializer::VALUE => 'B'], 'parent' => [ObjectSerializer::TYPE => 'object', ObjectSerializer::VALUE => \spl_object_hash($objectA)], 'child' => [ObjectSerializer::TYPE => 'simple', ObjectSerializer::VALUE => null]]], spl_object_hash($objectA) => [ObjectSerializer::CLASSNAME => $className, ObjectSerializer::PROPERTIES => ['name' => [ObjectSerializer::TYPE => 'simple', ObjectSerializer::VALUE => 'A'], 'parent' => [ObjectSerializer::TYPE => 'simple', ObjectSerializer::VALUE => null], 'child' => [ObjectSerializer::TYPE => 'object', ObjectSerializer::VALUE => \spl_object_hash($objectB)]]]];
        $actualPropertyArray = $objectSerializer->serializeObjectAsPropertyArray($objectA);
        $this->assertEquals($expectedPropertyArray, $actualPropertyArray);
    }
ObjectSerializerTest