Skip to content
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
declare(strict_types=1);

namespace Magento\Framework\Reflection\Test\Unit\Fixture\UseClasses;

class SampleOne
{

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
declare(strict_types=1);

namespace Magento\Framework\Reflection\Test\Unit\Fixture\UseClasses\SampleOne;

class SampleThree
{

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
declare(strict_types=1);

namespace Magento\Framework\Reflection\Test\Unit\Fixture\UseClasses;

class SampleTwo
{

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
declare(strict_types=1);

namespace Magento\Framework\Reflection\Test\Unit\Fixture\UseClasses\SampleTwo;

class SampleFour
{

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
declare(strict_types=1);

namespace Magento\Framework\Reflection\Test\Unit\Fixture;

use Magento\Framework\Reflection\Test\Unit\Fixture\UseClasses\SampleOne;
use Magento\Framework\Reflection\Test\Unit\Fixture\UseClasses\SampleTwo as Sample2;

class UseSample
{
// ...
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,12 @@

use Magento\Framework\Exception\SerializationException;
use Magento\Framework\Reflection\Test\Unit\Fixture\TSample;
use Magento\Framework\Reflection\Test\Unit\Fixture\TSampleInterface;
use Magento\Framework\Reflection\Test\Unit\Fixture\UseClasses\SampleOne;
use Magento\Framework\Reflection\Test\Unit\Fixture\UseClasses\SampleOne\SampleThree;
use Magento\Framework\Reflection\Test\Unit\Fixture\UseClasses\SampleTwo;
use Magento\Framework\Reflection\Test\Unit\Fixture\UseClasses\SampleTwo\SampleFour;
use Magento\Framework\Reflection\Test\Unit\Fixture\UseSample;
use Magento\Framework\Reflection\TypeProcessor;
use Zend\Code\Reflection\ClassReflection;

Expand Down Expand Up @@ -278,7 +284,7 @@ public function arrayParamTypeDataProvider()
{
return [
['method name' => 'addData', 'type' => 'array[]'],
['method name' => 'addObjectList', 'type' => 'TSampleInterface[]']
['method name' => 'addObjectList', 'type' => '\\' . TSampleInterface::class . '[]']
];
}

Expand Down Expand Up @@ -354,4 +360,182 @@ public function testGetReturnTypeWithoutReturnTag()
$methodReflection = $classReflection->getMethod('getName');
$this->typeProcessor->getGetterReturnType($methodReflection);
}

/**
* Simple and complex data provider
*
* @return array
*/
public function simpleAndComplexDataProvider(): array
{
return [
['string', true],
['array', true],
['int', true],
['SomeClass', false],
['\\My\\Namespace\\Model\\Class', false],
['Some\\Other\\Class', false],
];
}

/**
* Test simple type detection method
*
* @dataProvider simpleAndComplexDataProvider
* @param string $type
* @param bool $expectedValue
*/
public function testIsSimpleType(string $type, bool $expectedValue)
{
self::assertEquals($expectedValue, $this->typeProcessor->isSimpleType($type));
}

/**
* Simple and complex data provider
*
* @return array
*/
public function basicClassNameProvider(): array
{
return [
['SomeClass[]', 'SomeClass'],
['\\My\\Namespace\\Model\\Class[]', '\\My\\Namespace\\Model\\Class'],
['Some\\Other\\Class[]', 'Some\\Other\\Class'],
['SomeClass', 'SomeClass'],
['\\My\\Namespace\\Model\\Class', '\\My\\Namespace\\Model\\Class'],
['Some\\Other\\Class', 'Some\\Other\\Class'],
];
}

/**
* Extract basic class name
*
* @dataProvider basicClassNameProvider
* @param string $type
* @param string $expectedValue
*/
public function testBasicClassName(string $type, string $expectedValue)
{
self::assertEquals($expectedValue, $this->typeProcessor->getBasicClassName($type));
}

/**
* Fully qualified class names data provider
*
* @return array
*/
public function isFullyQualifiedClassNamesDataProvider(): array
{
return [
['SomeClass', false],
['\\My\\Namespace\\Model\\Class', true],
['Some\\Other\\Class', false],
];
}

/**
* Test fully qualified class name detector
*
* @dataProvider isFullyQualifiedClassNamesDataProvider
* @param string $type
* @param bool $expectedValue
*/
public function testIsFullyQualifiedClassName(string $type, bool $expectedValue)
{
self::assertEquals($expectedValue, $this->typeProcessor->isFullyQualifiedClassName($type));
}

/**
* Test alias mapping
*/
public function testGetAliasMapping()
{
$sourceClass = new ClassReflection(UseSample::class);
$aliasMap = $this->typeProcessor->getAliasMapping($sourceClass);

self::assertEquals([
'SampleOne' => SampleOne::class,
'Sample2' => SampleTwo::class,
], $aliasMap);
}

/**
* Resolve fully qualified class names data provider
*
* @return array
*/
public function resolveFullyQualifiedClassNamesDataProvider(): array
{
return [
[UseSample::class, 'string', 'string'],
[UseSample::class, 'string[]', 'string[]'],

[UseSample::class, 'SampleOne', '\\' . SampleOne::class],
[UseSample::class, 'Sample2', '\\' . SampleTwo::class],
[
UseSample::class,
'\\Magento\\Framework\\Reflection\\Test\\Unit\\Fixture\\UseClasses\\SampleOne',
'\\' . SampleOne::class
],
[
UseSample::class,
'\\Magento\\Framework\\Reflection\\Test\\Unit\\Fixture\\UseClasses\\SampleTwo',
'\\' . SampleTwo::class
],
[UseSample::class, 'UseClasses\\SampleOne', '\\' . SampleOne::class],
[UseSample::class, 'UseClasses\\SampleTwo', '\\' . SampleTwo::class],

[UseSample::class, 'SampleOne[]', '\\' . SampleOne::class . '[]'],
[UseSample::class, 'Sample2[]', '\\' . SampleTwo::class . '[]'],
[
UseSample::class,
'\\Magento\\Framework\\Reflection\\Test\\Unit\\Fixture\\UseClasses\\SampleOne[]',
'\\' . SampleOne::class . '[]'
],
[
UseSample::class,
'\\Magento\\Framework\\Reflection\\Test\\Unit\\Fixture\\UseClasses\\SampleTwo[]',
'\\' . SampleTwo::class . '[]'
],
[UseSample::class, 'UseClasses\\SampleOne[]', '\\' . SampleOne::class . '[]'],
[UseSample::class, 'UseClasses\\SampleTwo[]', '\\' . SampleTwo::class . '[]'],

[UseSample::class, 'SampleOne\SampleThree', '\\' . SampleThree::class],
[UseSample::class, 'SampleOne\SampleThree[]', '\\' . SampleThree::class . '[]'],

[UseSample::class, 'Sample2\SampleFour', '\\' . SampleFour::class],
[UseSample::class, 'Sample2\SampleFour[]', '\\' . SampleFour::class . '[]'],

[UseSample::class, 'Sample2\NotExisting', 'Sample2\NotExisting'],
[UseSample::class, 'Sample2\NotExisting[]', 'Sample2\NotExisting[]'],

[
UseSample::class,
'\\Magento\\Framework\\Reflection\\Test\\Unit\\Fixture\\UseClasses\\NotExisting',
'\\Magento\\Framework\\Reflection\\Test\\Unit\\Fixture\\UseClasses\\NotExisting'
],
[
UseSample::class,
'\\Magento\\Framework\\Reflection\\Test\\Unit\\Fixture\\UseClasses\\NotExisting[]',
'\\Magento\\Framework\\Reflection\\Test\\Unit\\Fixture\\UseClasses\\NotExisting[]'
],
];
}

/**
* Resolve fully qualified class names
*
* @dataProvider resolveFullyQualifiedClassNamesDataProvider
* @param string $className
* @param string $type
* @param string $expectedValue
* @throws \ReflectionException
*/
public function testResolveFullyQualifiedClassNames(string $className, string $type, string $expectedValue)
{
$sourceClass = new ClassReflection($className);
$fullyQualified = $this->typeProcessor->resolveFullyQualifiedClassName($sourceClass, $type);

self::assertEquals($expectedValue, $fullyQualified);
}
}
Loading