23 use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
43 protected function setUp()
45 $this->mockConfigurationBuilder = $this->createMock(\
TYPO3\CMS\
Extbase\Property\PropertyMappingConfigurationBuilder::class);
46 $this->mockConfiguration = $this->createMock(\
TYPO3\CMS\
Extbase\Property\PropertyMappingConfigurationInterface::class);
55 [
'someString',
'string'],
72 $propertyMapper = $this->getAccessibleMock(\
TYPO3\CMS\
Extbase\Property\PropertyMapper::class, [
'dummy']);
73 $this->assertEquals($sourceType, $propertyMapper->_call(
'determineSourceType', $source));
95 $this->expectException(InvalidSourceException::class);
96 $this->expectExceptionCode(1297773150);
98 $propertyMapper = $this->getAccessibleMock(\
TYPO3\CMS\
Extbase\Property\PropertyMapper::class, [
'dummy']);
99 $propertyMapper->_call(
'determineSourceType', $source);
109 protected function getMockTypeConverter($name =
'', $canConvertFrom =
true, $properties = [], $typeOfSubObject =
'')
111 $mockTypeConverter = $this->createMock(\
TYPO3\CMS\
Extbase\Property\TypeConverterInterface::class);
112 $mockTypeConverter->_name = $name;
113 $mockTypeConverter->expects($this->any())->method(
'canConvertFrom')->will($this->returnValue($canConvertFrom));
114 $mockTypeConverter->expects($this->any())->method(
'convertFrom')->will($this->returnValue($name));
115 $mockTypeConverter->expects($this->any())->method(
'getSourceChildPropertiesToBeConverted')->will($this->returnValue($properties));
116 $mockTypeConverter->expects($this->any())->method(
'getTypeOfChildProperty')->will($this->returnValue($typeOfSubObject));
117 return $mockTypeConverter;
126 $this->mockConfiguration->expects($this->any())->method(
'getTypeConverter')->will($this->returnValue($mockTypeConverter));
128 $propertyMapper = $this->getAccessibleMock(\
TYPO3\CMS\
Extbase\Property\PropertyMapper::class, [
'dummy']);
129 $this->assertSame($mockTypeConverter, $propertyMapper->_call(
'findTypeConverter',
'someSource',
'someTargetType', $this->mockConfiguration));
139 [
'someStringSource',
'string', [
145 ]],
'string2string,prio10'
147 [[
'some' =>
'array'],
'string', [
153 ]],
'array2string,prio10'
155 [
'someStringSource',
'bool', [
161 ]],
'string2boolean,prio10'
163 [
'someStringSource',
'int', [
169 ]],
'string2integer,prio10'
184 $propertyMapper = $this->getAccessibleMock(\
TYPO3\CMS\
Extbase\Property\PropertyMapper::class, [
'dummy']);
185 $propertyMapper->_set(
'typeConverters', $typeConverters);
186 $actualTypeConverter = $propertyMapper->_call(
'findTypeConverter', $source, $targetType, $this->mockConfiguration);
187 $this->assertSame($expectedTypeConverter, $actualTypeConverter->_name);
197 $className2 = DataProviderTwo::class;
198 $className3 = DataProviderThree::class;
200 $interfaceName1 = DataProviderOneInterface::class;
201 $interfaceName2 = DataProviderTwoInterface::class;
202 $interfaceName3 = DataProviderThreeInterface::class;
206 'target' => $className3,
207 'expectedConverter' =>
'Class3Converter',
208 'typeConverters' => [
220 'target' => $className3,
221 'expectedConverter' =>
'Class2Converter',
222 'typeConverters' => [
234 'target' => $className3,
235 'expectedConverter' =>
'Class2Converter-HighPriority',
236 'typeConverters' => [
243 'target' => $className3,
244 'expectedConverter' =>
'Interface1Converter',
245 'typeConverters' => [
256 'target' => $className3,
257 'expectedConverter' =>
'Interface1Converter',
258 'typeConverters' => [
265 'shouldFailWithException' => \TYPO3\CMS\Extbase\Property\Exception\DuplicateTypeConverterException::class
270 'target' => $className3,
271 'expectedConverter' =>
'GenericObjectConverter-HighPriority',
272 'typeConverters' => [
284 'target' =>
'SomeNotExistingClassName',
285 'expectedConverter' =>
'GenericObjectConverter-HighPriority',
286 'typeConverters' => [],
287 'shouldFailWithException' => \TYPO3\CMS\Extbase\Property\Exception\InvalidTargetException::class
292 'target' => $className3,
293 'expectedConverter' =>
'Class3Converter',
294 'typeConverters' => [],
295 'shouldFailWithException' => \TYPO3\CMS\Extbase\Property\Exception\TypeConverterException::class
300 'target' => new \stdClass(),
301 'expectedConverter' =>
'',
302 'typeConverters' => [],
303 'shouldFailWithException' => \TYPO3\CMS\Extbase\Property\Exception\InvalidTargetException::class
319 $propertyMapper = $this->getAccessibleMock(\
TYPO3\CMS\
Extbase\Property\PropertyMapper::class, [
'dummy']);
320 $propertyMapper->_set(
'typeConverters', [
'string' => $typeConverters]);
322 $actualTypeConverter = $propertyMapper->_call(
'findTypeConverter',
'someSourceString', $targetClass, $this->mockConfiguration);
323 if ($shouldFailWithException) {
324 $this->fail(
'Expected exception ' . $shouldFailWithException .
' which was not thrown.');
326 $this->assertSame($expectedTypeConverter, $actualTypeConverter->_name);
328 if ($shouldFailWithException ===
false) {
331 $this->assertInstanceOf($shouldFailWithException, $e);
340 $propertyMapper = $this->getAccessibleMock(\
TYPO3\CMS\
Extbase\Property\PropertyMapper::class, [
'dummy']);
341 $this->inject($propertyMapper,
'configurationBuilder', $this->mockConfigurationBuilder);
343 $this->mockConfigurationBuilder->expects($this->once())->method(
'build')->will($this->returnValue($this->mockConfiguration));
348 'string' => [10 => $converter]
352 $propertyMapper->_set(
'typeConverters', $typeConverters);
353 $this->assertEquals(
'string2string', $propertyMapper->convert(
'source',
'string'));
362 $propertyMapper = $this->getAccessibleMock(\
TYPO3\CMS\
Extbase\Property\PropertyMapper::class, [
'dummy']);
363 $this->assertNull($propertyMapper->_call(
'findFirstEligibleTypeConverterInObjectHierarchy',
'source',
'unknownSourceType', \
TYPO3\CMS\
Extbase\Core\Bootstrap::class));
371 $source = new \TYPO3\CMS\Extbase\Persistence\ObjectStorage();
372 $targetType = \TYPO3\CMS\Extbase\Persistence\ObjectStorage::class;
374 $propertyMapper = $this->getAccessibleMock(\
TYPO3\CMS\
Extbase\Property\PropertyMapper::class, [
'dummy']);
375 $this->assertSame($source, $propertyMapper->_callRef(
'doMapping', $source, $targetType, $this->mockConfiguration, $propertyPath));
383 $source = new \TYPO3\CMS\Extbase\Persistence\ObjectStorage();
384 $targetType = \TYPO3\CMS\Extbase\Persistence\ObjectStorage::class .
'<SomeEntity>';
386 $propertyMapper = $this->getAccessibleMock(\
TYPO3\CMS\
Extbase\Property\PropertyMapper::class, [
'dummy']);
387 $this->assertSame($source, $propertyMapper->_callRef(
'doMapping', $source, $targetType, $this->mockConfiguration, $propertyPath));
395 $source = [
'firstProperty' => 1,
'secondProperty' => 2];
404 $configuration = new \TYPO3\CMS\Extbase\Property\PropertyMappingConfiguration();
406 $propertyMapper = $this->getAccessibleMock(\
TYPO3\CMS\
Extbase\Property\PropertyMapper::class, [
'dummy']);
407 $propertyMapper->_set(
'typeConverters', $typeConverters);
409 $propertyMapper->convert($source,
'stdClass', $configuration->allowProperties(
'firstProperty')->skipProperties(
'secondProperty'));
417 $source = [
'firstProperty' => 1,
'secondProperty' => 2];
426 $configuration = new \TYPO3\CMS\Extbase\Property\PropertyMappingConfiguration();
428 $propertyMapper = $this->getAccessibleMock(\
TYPO3\CMS\
Extbase\Property\PropertyMapper::class, [
'dummy']);
429 $propertyMapper->_set(
'typeConverters', $typeConverters);
431 $propertyMapper->convert($source,
'stdClass', $configuration->allowProperties(
'firstProperty')->skipUnknownProperties());