123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287 |
- <?php
- /**
- *
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Framework\Code\Test\Unit\Reader;
- require_once __DIR__ . '/_files/ClassesForArgumentsReader.php';
- class ArgumentsReaderTest extends \PHPUnit\Framework\TestCase
- {
- /**
- * @var \Magento\Framework\Code\Reader\ArgumentsReader
- */
- protected $_model;
- protected function setUp()
- {
- $this->_model = new \Magento\Framework\Code\Reader\ArgumentsReader();
- }
- public function testGetConstructorArgumentsClassWithAllArgumentsType()
- {
- $expectedResult = [
- 'stdClassObject' => [
- 'name' => 'stdClassObject',
- 'position' => 0,
- 'type' => '\stdClass',
- 'isOptional' => false,
- 'default' => null,
- ],
- 'withoutConstructorClassObject' => [
- 'name' => 'withoutConstructorClassObject',
- 'position' => 1,
- 'type' => '\ClassWithoutConstruct',
- 'isOptional' => false,
- 'default' => null,
- ],
- 'someVariable' => [
- 'name' => 'someVariable',
- 'position' => 2,
- 'type' => 'mixed',
- 'isOptional' => false,
- 'default' => null,
- ],
- 'const' => [
- 'name' => 'const',
- 'position' => 3,
- 'type' => 'string',
- 'isOptional' => true,
- 'default' => 'Const Value',
- ],
- 'optionalNumValue' => [
- 'name' => 'optionalNumValue',
- 'position' => 4,
- 'type' => 'int',
- 'isOptional' => true,
- 'default' => 9807,
- ],
- 'optionalStringValue' => [
- 'name' => 'optionalStringValue',
- 'position' => 5,
- 'type' => 'string',
- 'isOptional' => true,
- 'default' => 'optional string',
- ],
- 'optionalArrayValue' => [
- 'name' => 'optionalArrayValue',
- 'position' => 6,
- 'type' => 'array',
- 'isOptional' => true,
- 'default' => "array('optionalKey' => 'optionalValue')",
- ],
- ];
- $class = new \ReflectionClass('ClassWithAllArgumentTypes');
- $actualResult = $this->_model->getConstructorArguments($class);
- $this->assertEquals($expectedResult, $actualResult);
- }
- public function testGetConstructorArgumentsClassWithoutOwnConstructorInheritedFalse()
- {
- $class = new \ReflectionClass('classWithoutOwnConstruct');
- $actualResult = $this->_model->getConstructorArguments($class);
- $this->assertEquals([], $actualResult);
- }
- public function testGetConstructorArgumentsClassWithoutOwnConstructorInheritedTrue()
- {
- $expectedResult = [
- 'stdClassObject' => [
- 'name' => 'stdClassObject',
- 'position' => 0,
- 'type' => '\stdClass',
- 'isOptional' => false,
- 'default' => null,
- ],
- 'withoutConstructorClassObject' => [
- 'name' => 'withoutConstructorClassObject',
- 'position' => 1,
- 'type' => '\ClassWithoutConstruct',
- 'isOptional' => false,
- 'default' => null,
- ],
- 'someVariable' => [
- 'name' => 'someVariable',
- 'position' => 2,
- 'type' => 'mixed',
- 'isOptional' => false,
- 'default' => null,
- ],
- 'const' => [
- 'name' => 'const',
- 'position' => 3,
- 'type' => 'string',
- 'isOptional' => true,
- 'default' => 'Const Value',
- ],
- 'optionalNumValue' => [
- 'name' => 'optionalNumValue',
- 'position' => 4,
- 'type' => 'int',
- 'isOptional' => true,
- 'default' => 9807,
- ],
- 'optionalStringValue' => [
- 'name' => 'optionalStringValue',
- 'position' => 5,
- 'type' => 'string',
- 'isOptional' => true,
- 'default' => 'optional string',
- ],
- 'optionalArrayValue' => [
- 'name' => 'optionalArrayValue',
- 'position' => 6,
- 'type' => 'array',
- 'isOptional' => true,
- 'default' => "array('optionalKey' => 'optionalValue')",
- ],
- ];
- $class = new \ReflectionClass('ClassWithoutOwnConstruct');
- $actualResult = $this->_model->getConstructorArguments($class, false, true);
- $this->assertEquals($expectedResult, $actualResult);
- }
- public function testGetConstructorArgumentsClassWithoutConstructInheridetFalse()
- {
- $class = new \ReflectionClass('ClassWithoutConstruct');
- $actualResult = $this->_model->getConstructorArguments($class);
- $this->assertEquals([], $actualResult);
- }
- public function testGetConstructorArgumentsClassWithoutConstructInheridetTrue()
- {
- $class = new \ReflectionClass('ClassWithoutConstruct');
- $actualResult = $this->_model->getConstructorArguments($class, false, true);
- $this->assertEquals([], $actualResult);
- }
- public function testGetConstructorArgumentsClassExtendsDefaultPhpTypeInheridetFalse()
- {
- $class = new \ReflectionClass('ClassExtendsDefaultPhpType');
- $actualResult = $this->_model->getConstructorArguments($class);
- $this->assertEquals([], $actualResult);
- }
- public function testGetConstructorArgumentsClassExtendsDefaultPhpTypeInheridetTrue()
- {
- $expectedResult = [
- 'message' => [
- 'name' => 'message',
- 'position' => 0,
- 'type' => 'string',
- 'isOptional' => true,
- 'default' => '',
- ],
- 'code' => [
- 'name' => 'code',
- 'position' => 1,
- 'type' => 'int',
- 'isOptional' => true,
- 'default' => 0,
- ],
- 'previous' => [
- 'name' => 'previous',
- 'position' => 2,
- 'type' => '\Exception',
- 'isOptional' => true,
- 'default' => null,
- ],
- ];
- $class = new \ReflectionClass('ClassExtendsDefaultPhpTypeWithIOverrideConstructor');
- $actualResult = $this->_model->getConstructorArguments($class, false, true);
- $this->assertEquals($expectedResult, $actualResult);
- }
- public function testGetParentCallWithRightArgumentsOrder()
- {
- $class = new \ReflectionClass('ThirdClassForParentCall');
- $actualResult = $this->_model->getParentCall(
- $class,
- [
- 'stdClassObject' => ['type' => '\stdClass'],
- 'secondClass' => ['type' => '\ClassExtendsDefaultPhpType']
- ]
- );
- $expectedResult = [
- ['name' => 'stdClassObject', 'position' => 0, 'type' => '\stdClass'],
- ['name' => 'secondClass', 'position' => 1, 'type' => '\ClassExtendsDefaultPhpType'],
- ];
- $this->assertEquals($expectedResult, $actualResult);
- }
- public function testGetParentCallWithWrongArgumentsOrder()
- {
- $class = new \ReflectionClass('WrongArgumentsOrder');
- $actualResult = $this->_model->getParentCall(
- $class,
- [
- 'stdClassObject' => ['type' => '\stdClass'],
- 'secondClass' => ['type' => '\ClassExtendsDefaultPhpType']
- ]
- );
- $expectedResult = [
- ['name' => 'secondClass', 'position' => 0, 'type' => '\ClassExtendsDefaultPhpType'],
- ['name' => 'stdClassObject', 'position' => 1, 'type' => '\stdClass'],
- ];
- $this->assertEquals($expectedResult, $actualResult);
- }
- public function testGetParentCallWithSeparateLineFormat()
- {
- $class = new \ReflectionClass('ThirdClassForParentCall');
- $actualResult = $this->_model->getParentCall(
- $class,
- [
- 'stdClassObject' => ['type' => '\stdClass'],
- 'secondClass' => ['type' => '\ClassExtendsDefaultPhpType']
- ]
- );
- $expectedResult = [
- ['name' => 'stdClassObject', 'position' => 0, 'type' => '\stdClass'],
- ['name' => 'secondClass', 'position' => 1, 'type' => '\ClassExtendsDefaultPhpType'],
- ];
- $this->assertEquals($expectedResult, $actualResult);
- }
- /**
- * @param string $requiredType
- * @param string $actualType
- * @param bool $expectedResult
- * @dataProvider testIsCompatibleTypeDataProvider
- */
- public function testIsCompatibleType($requiredType, $actualType, $expectedResult)
- {
- $actualResult = $this->_model->isCompatibleType($requiredType, $actualType);
- $this->assertEquals($expectedResult, $actualResult);
- }
- /**
- * @return array
- */
- public function testIsCompatibleTypeDataProvider()
- {
- return [
- ['array', 10, false],
- ['array', 'array', true],
- [null, null, true],
- [null, 'array', true],
- ['\ClassWithAllArgumentTypes', '\ClassWithoutOwnConstruct', true],
- ['\ClassWithoutOwnConstruct', '\ClassWithAllArgumentTypes', false]
- ];
- }
- public function testGetAnnotations()
- {
- $class = new \ReflectionClass('\ClassWithSuppressWarnings');
- $expected = ['SuppressWarnings' => 'Magento.TypeDuplication'];
- $this->assertEquals($expected, $this->_model->getAnnotations($class));
- }
- }
|