|
9 | 9 | use Magento\Framework\Exception\SerializationException;
|
10 | 10 | use Magento\Framework\Reflection\Test\Unit\Fixture\TSample;
|
11 | 11 | 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; |
12 | 17 | use Magento\Framework\Reflection\TypeProcessor;
|
13 | 18 | use Zend\Code\Reflection\ClassReflection;
|
14 | 19 |
|
@@ -355,4 +360,166 @@ public function testGetReturnTypeWithoutReturnTag()
|
355 | 360 | $methodReflection = $classReflection->getMethod('getName');
|
356 | 361 | $this->typeProcessor->getGetterReturnType($methodReflection);
|
357 | 362 | }
|
| 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 | + } |
358 | 525 | }
|
0 commit comments