Neos\Flow\Tests\Unit\Property\PropertyMapperTest::dataProviderForObjectTypeConverters PHP Method

dataProviderForObjectTypeConverters() public method

    public function dataProviderForObjectTypeConverters()
    {
        $data = [];
        $className1 = uniqid('Neos_Flow_Testclass1_', false);
        $className2 = uniqid('Neos_Flow_Testclass2_', false);
        $className3 = uniqid('Neos_Flow_Testclass3_', false);
        $interfaceName1 = uniqid('Neos_Flow_TestInterface1_', false);
        $interfaceName2 = uniqid('Neos_Flow_TestInterface2_', false);
        $interfaceName3 = uniqid('Neos_Flow_TestInterface3_', false);
        eval('
			interface ' . $interfaceName2 . ' {}
			interface ' . $interfaceName1 . ' {}

			interface ' . $interfaceName3 . ' extends ' . $interfaceName2 . ' {}

			class ' . $className1 . ' implements ' . $interfaceName1 . ' {}
			class ' . $className2 . ' extends ' . $className1 . ' {}
			class ' . $className3 . ' extends ' . $className2 . ' implements ' . $interfaceName3 . ' {}
		');
        // The most specific converter should win
        $data[] = ['target' => $className3, 'expectedConverter' => 'Class3Converter', 'typeConverters' => [$className2 => [0 => $this->getMockTypeConverter('Class2Converter')], $className3 => [0 => $this->getMockTypeConverter('Class3Converter')], $interfaceName1 => [0 => $this->getMockTypeConverter('Interface1Converter')], $interfaceName2 => [0 => $this->getMockTypeConverter('Interface2Converter')], $interfaceName3 => [0 => $this->getMockTypeConverter('Interface3Converter')]]];
        // In case the most specific converter does not want to handle this conversion, the second one is taken.
        $data[] = ['target' => $className3, 'expectedConverter' => 'Class2Converter', 'typeConverters' => [$className2 => [0 => $this->getMockTypeConverter('Class2Converter')], $className3 => [0 => $this->getMockTypeConverter('Class3Converter', false)], $interfaceName1 => [0 => $this->getMockTypeConverter('Interface1Converter')], $interfaceName2 => [0 => $this->getMockTypeConverter('Interface2Converter')], $interfaceName3 => [0 => $this->getMockTypeConverter('Interface3Converter')]]];
        // In case there is no most-specific-converter, we climb ub the type hierarchy
        $data[] = ['target' => $className3, 'expectedConverter' => 'Class2Converter-HighPriority', 'typeConverters' => [$className2 => [0 => $this->getMockTypeConverter('Class2Converter'), 10 => $this->getMockTypeConverter('Class2Converter-HighPriority')]]];
        // If no parent class converter wants to handle it, we ask for all interface converters.
        $data[] = ['target' => $className3, 'expectedConverter' => 'Interface1Converter', 'typeConverters' => [$className2 => [0 => $this->getMockTypeConverter('Class2Converter', false), 10 => $this->getMockTypeConverter('Class2Converter-HighPriority', false)], $interfaceName1 => [4 => $this->getMockTypeConverter('Interface1Converter')], $interfaceName2 => [1 => $this->getMockTypeConverter('Interface2Converter')], $interfaceName3 => [2 => $this->getMockTypeConverter('Interface3Converter')]]];
        // If two interface converters have the same priority, an exception is thrown.
        $data[] = ['target' => $className3, 'expectedConverter' => 'Interface1Converter', 'typeConverters' => [$className2 => [0 => $this->getMockTypeConverter('Class2Converter', false), 10 => $this->getMockTypeConverter('Class2Converter-HighPriority', false)], $interfaceName1 => [4 => $this->getMockTypeConverter('Interface1Converter')], $interfaceName2 => [2 => $this->getMockTypeConverter('Interface2Converter')], $interfaceName3 => [2 => $this->getMockTypeConverter('Interface3Converter')]], 'shouldFailWithException' => DuplicateTypeConverterException::class];
        // If no interface converter wants to handle it, a converter for "object" is looked up.
        $data[] = ['target' => $className3, 'expectedConverter' => 'GenericObjectConverter-HighPriority', 'typeConverters' => [$className2 => [0 => $this->getMockTypeConverter('Class2Converter', false), 10 => $this->getMockTypeConverter('Class2Converter-HighPriority', false)], $interfaceName1 => [4 => $this->getMockTypeConverter('Interface1Converter', false)], $interfaceName2 => [3 => $this->getMockTypeConverter('Interface2Converter', false)], $interfaceName3 => [2 => $this->getMockTypeConverter('Interface3Converter', false)], 'object' => [1 => $this->getMockTypeConverter('GenericObjectConverter'), 10 => $this->getMockTypeConverter('GenericObjectConverter-HighPriority')]]];
        // If the target is no valid class name and no simple type, an exception is thrown
        $data[] = ['target' => 'SomeNotExistingClassName', 'expectedConverter' => 'GenericObjectConverter-HighPriority', 'typeConverters' => [], 'shouldFailWithException' => InvalidTargetException::class];
        // if the type converter is not found, we expect an exception
        $data[] = ['target' => $className3, 'expectedConverter' => 'Class3Converter', 'typeConverters' => [], 'shouldFailWithException' => TypeConverterException::class];
        // If The target type is no string, we expect an exception.
        $data[] = ['target' => new \stdClass(), 'expectedConverter' => '', 'typeConverters' => [], 'shouldFailWithException' => InvalidTargetException::class];
        return $data;
    }