Skip to content

Commit e858f36

Browse files
committed
resolveFullyQualifiedClassName refactor and test coverage
1 parent 2232338 commit e858f36

File tree

7 files changed

+336
-39
lines changed

7 files changed

+336
-39
lines changed
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
namespace Magento\Framework\Reflection\Test\Unit\Fixture\UseClasses;
9+
10+
class SampleOne
11+
{
12+
13+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
namespace Magento\Framework\Reflection\Test\Unit\Fixture\UseClasses\SampleOne;
9+
10+
class SampleThree
11+
{
12+
13+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
namespace Magento\Framework\Reflection\Test\Unit\Fixture\UseClasses;
9+
10+
class SampleTwo
11+
{
12+
13+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
namespace Magento\Framework\Reflection\Test\Unit\Fixture\UseClasses\SampleTwo;
9+
10+
class SampleFour
11+
{
12+
13+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
namespace Magento\Framework\Reflection\Test\Unit\Fixture;
9+
10+
use Magento\Framework\Reflection\Test\Unit\Fixture\UseClasses\SampleOne;
11+
use Magento\Framework\Reflection\Test\Unit\Fixture\UseClasses\SampleTwo as Sample2;
12+
13+
class UseSample
14+
{
15+
// ...
16+
}

lib/internal/Magento/Framework/Reflection/Test/Unit/TypeProcessorTest.php

Lines changed: 167 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,11 @@
99
use Magento\Framework\Exception\SerializationException;
1010
use Magento\Framework\Reflection\Test\Unit\Fixture\TSample;
1111
use Magento\Framework\Reflection\Test\Unit\Fixture\TSampleInterface;
12+
use Magento\Framework\Reflection\Test\Unit\Fixture\UseClasses\SampleOne;
13+
use Magento\Framework\Reflection\Test\Unit\Fixture\UseClasses\SampleOne\SampleThree;
14+
use Magento\Framework\Reflection\Test\Unit\Fixture\UseClasses\SampleTwo;
15+
use Magento\Framework\Reflection\Test\Unit\Fixture\UseClasses\SampleTwo\SampleFour;
16+
use Magento\Framework\Reflection\Test\Unit\Fixture\UseSample;
1217
use Magento\Framework\Reflection\TypeProcessor;
1318
use Zend\Code\Reflection\ClassReflection;
1419

@@ -355,4 +360,166 @@ public function testGetReturnTypeWithoutReturnTag()
355360
$methodReflection = $classReflection->getMethod('getName');
356361
$this->typeProcessor->getGetterReturnType($methodReflection);
357362
}
363+
364+
/**
365+
* Simple and complex data provider
366+
*
367+
* @return array
368+
*/
369+
public function simpleAndComplexDataProvider(): array
370+
{
371+
return [
372+
['string', true],
373+
['array', true],
374+
['int', true],
375+
['SomeClass', false],
376+
['\\My\\Namespace\\Model\\Class', false],
377+
['Some\\Other\\Class', false],
378+
];
379+
}
380+
381+
/**
382+
* Test simple type detection method
383+
*
384+
* @dataProvider simpleAndComplexDataProvider
385+
* @param string $type
386+
* @param bool $expectedValue
387+
*/
388+
public function testIsSimpleType(string $type, bool $expectedValue)
389+
{
390+
self::assertEquals($expectedValue, $this->typeProcessor->isSimpleType($type));
391+
}
392+
393+
/**
394+
* Simple and complex data provider
395+
*
396+
* @return array
397+
*/
398+
public function basicClassNameProvider(): array
399+
{
400+
return [
401+
['SomeClass[]', 'SomeClass'],
402+
['\\My\\Namespace\\Model\\Class[]', '\\My\\Namespace\\Model\\Class'],
403+
['Some\\Other\\Class[]', 'Some\\Other\\Class'],
404+
['SomeClass', 'SomeClass'],
405+
['\\My\\Namespace\\Model\\Class', '\\My\\Namespace\\Model\\Class'],
406+
['Some\\Other\\Class', 'Some\\Other\\Class'],
407+
];
408+
}
409+
410+
/**
411+
* Extract basic class name
412+
*
413+
* @dataProvider basicClassNameProvider
414+
* @param string $type
415+
* @param string $expectedValue
416+
*/
417+
public function testBasicClassName(string $type, string $expectedValue)
418+
{
419+
self::assertEquals($expectedValue, $this->typeProcessor->getBasicClassName($type));
420+
}
421+
422+
/**
423+
* Fully qualified class names data provider
424+
*
425+
* @return array
426+
*/
427+
public function isFullyQualifiedClassNamesDataProvider(): array
428+
{
429+
return [
430+
['SomeClass', false],
431+
['\\My\\Namespace\\Model\\Class', true],
432+
['Some\\Other\\Class', false],
433+
];
434+
}
435+
436+
/**
437+
* Test fully qualified class name detector
438+
*
439+
* @dataProvider isFullyQualifiedClassNamesDataProvider
440+
* @param string $type
441+
* @param bool $expectedValue
442+
*/
443+
public function testIsFullyQualifiedClassName(string $type, bool $expectedValue)
444+
{
445+
self::assertEquals($expectedValue, $this->typeProcessor->isFullyQualifiedClassName($type));
446+
}
447+
448+
/**
449+
* Test alias mapping
450+
*/
451+
public function testGetAliasMapping()
452+
{
453+
$sourceClass = new ClassReflection(UseSample::class);
454+
$aliasMap = $this->typeProcessor->getAliasMapping($sourceClass);
455+
456+
self::assertEquals([
457+
'SampleOne' => SampleOne::class,
458+
'Sample2' => SampleTwo::class,
459+
], $aliasMap);
460+
}
461+
462+
/**
463+
* Resolve fully qualified class names data provider
464+
*
465+
* @return array
466+
*/
467+
public function resolveFullyQualifiedClassNamesDataProvider(): array
468+
{
469+
return [
470+
[UseSample::class, 'string', 'string'],
471+
[UseSample::class, 'string[]', 'string[]'],
472+
473+
[UseSample::class, 'SampleOne', SampleOne::class],
474+
[UseSample::class, 'Sample2', SampleTwo::class],
475+
[UseSample::class, '\\Magento\\Framework\\Reflection\\Test\\Unit\\Fixture\\UseClasses\\SampleOne', SampleOne::class],
476+
[UseSample::class, '\\Magento\\Framework\\Reflection\\Test\\Unit\\Fixture\\UseClasses\\SampleTwo', SampleTwo::class],
477+
[UseSample::class, 'UseClasses\\SampleOne', SampleOne::class],
478+
[UseSample::class, 'UseClasses\\SampleTwo', SampleTwo::class],
479+
480+
[UseSample::class, 'SampleOne[]', SampleOne::class . '[]'],
481+
[UseSample::class, 'Sample2[]', SampleTwo::class . '[]'],
482+
[UseSample::class, '\\Magento\\Framework\\Reflection\\Test\\Unit\\Fixture\\UseClasses\\SampleOne[]', SampleOne::class . '[]'],
483+
[UseSample::class, '\\Magento\\Framework\\Reflection\\Test\\Unit\\Fixture\\UseClasses\\SampleTwo[]', SampleTwo::class . '[]'],
484+
[UseSample::class, 'UseClasses\\SampleOne[]', SampleOne::class . '[]'],
485+
[UseSample::class, 'UseClasses\\SampleTwo[]', SampleTwo::class . '[]'],
486+
487+
[UseSample::class, 'SampleOne\SampleThree', SampleThree::class],
488+
[UseSample::class, 'SampleOne\SampleThree[]', SampleThree::class . '[]'],
489+
490+
[UseSample::class, 'Sample2\SampleFour', SampleFour::class],
491+
[UseSample::class, 'Sample2\SampleFour[]', SampleFour::class . '[]'],
492+
493+
[UseSample::class, 'Sample2\NotExisting', 'Sample2\NotExisting'],
494+
[UseSample::class, 'Sample2\NotExisting[]', 'Sample2\NotExisting[]'],
495+
496+
[
497+
UseSample::class,
498+
'\\Magento\\Framework\\Reflection\\Test\\Unit\\Fixture\\UseClasses\\NotExisting',
499+
'Magento\\Framework\\Reflection\\Test\\Unit\\Fixture\\UseClasses\\NotExisting'
500+
],
501+
[
502+
UseSample::class,
503+
'\\Magento\\Framework\\Reflection\\Test\\Unit\\Fixture\\UseClasses\\NotExisting[]',
504+
'Magento\\Framework\\Reflection\\Test\\Unit\\Fixture\\UseClasses\\NotExisting[]'
505+
],
506+
];
507+
}
508+
509+
/**
510+
* Resolve fully qualified class names
511+
*
512+
* @dataProvider resolveFullyQualifiedClassNamesDataProvider
513+
* @param string $className
514+
* @param string $type
515+
* @param string $expectedValue
516+
* @throws \ReflectionException
517+
*/
518+
public function testResolveFullyQualifiedClassNames(string $className, string $type, string $expectedValue)
519+
{
520+
$sourceClass = new ClassReflection($className);
521+
$fullyQualified = $this->typeProcessor->resolveFullyQualifiedClassName($sourceClass, $type);
522+
523+
self::assertEquals($expectedValue, $fullyQualified);
524+
}
358525
}

0 commit comments

Comments
 (0)