Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
ArgumentsReaderTest.php
Go to the documentation of this file.
1 <?php
8 
9 require_once __DIR__ . '/_files/ClassesForArgumentsReader.php';
10 class ArgumentsReaderTest extends \PHPUnit\Framework\TestCase
11 {
15  protected $_model;
16 
17  protected function setUp()
18  {
19  $this->_model = new \Magento\Framework\Code\Reader\ArgumentsReader();
20  }
21 
23  {
24  $expectedResult = [
25  'stdClassObject' => [
26  'name' => 'stdClassObject',
27  'position' => 0,
28  'type' => '\stdClass',
29  'isOptional' => false,
30  'default' => null,
31  ],
32  'withoutConstructorClassObject' => [
33  'name' => 'withoutConstructorClassObject',
34  'position' => 1,
35  'type' => '\ClassWithoutConstruct',
36  'isOptional' => false,
37  'default' => null,
38  ],
39  'someVariable' => [
40  'name' => 'someVariable',
41  'position' => 2,
42  'type' => 'mixed',
43  'isOptional' => false,
44  'default' => null,
45  ],
46  'const' => [
47  'name' => 'const',
48  'position' => 3,
49  'type' => 'string',
50  'isOptional' => true,
51  'default' => 'Const Value',
52  ],
53  'optionalNumValue' => [
54  'name' => 'optionalNumValue',
55  'position' => 4,
56  'type' => 'int',
57  'isOptional' => true,
58  'default' => 9807,
59  ],
60  'optionalStringValue' => [
61  'name' => 'optionalStringValue',
62  'position' => 5,
63  'type' => 'string',
64  'isOptional' => true,
65  'default' => 'optional string',
66  ],
67  'optionalArrayValue' => [
68  'name' => 'optionalArrayValue',
69  'position' => 6,
70  'type' => 'array',
71  'isOptional' => true,
72  'default' => "array('optionalKey' => 'optionalValue')",
73  ],
74  ];
75  $class = new \ReflectionClass('ClassWithAllArgumentTypes');
76  $actualResult = $this->_model->getConstructorArguments($class);
77 
78  $this->assertEquals($expectedResult, $actualResult);
79  }
80 
82  {
83  $class = new \ReflectionClass('classWithoutOwnConstruct');
84  $actualResult = $this->_model->getConstructorArguments($class);
85 
86  $this->assertEquals([], $actualResult);
87  }
88 
90  {
91  $expectedResult = [
92  'stdClassObject' => [
93  'name' => 'stdClassObject',
94  'position' => 0,
95  'type' => '\stdClass',
96  'isOptional' => false,
97  'default' => null,
98  ],
99  'withoutConstructorClassObject' => [
100  'name' => 'withoutConstructorClassObject',
101  'position' => 1,
102  'type' => '\ClassWithoutConstruct',
103  'isOptional' => false,
104  'default' => null,
105  ],
106  'someVariable' => [
107  'name' => 'someVariable',
108  'position' => 2,
109  'type' => 'mixed',
110  'isOptional' => false,
111  'default' => null,
112  ],
113  'const' => [
114  'name' => 'const',
115  'position' => 3,
116  'type' => 'string',
117  'isOptional' => true,
118  'default' => 'Const Value',
119  ],
120  'optionalNumValue' => [
121  'name' => 'optionalNumValue',
122  'position' => 4,
123  'type' => 'int',
124  'isOptional' => true,
125  'default' => 9807,
126  ],
127  'optionalStringValue' => [
128  'name' => 'optionalStringValue',
129  'position' => 5,
130  'type' => 'string',
131  'isOptional' => true,
132  'default' => 'optional string',
133  ],
134  'optionalArrayValue' => [
135  'name' => 'optionalArrayValue',
136  'position' => 6,
137  'type' => 'array',
138  'isOptional' => true,
139  'default' => "array('optionalKey' => 'optionalValue')",
140  ],
141  ];
142  $class = new \ReflectionClass('ClassWithoutOwnConstruct');
143  $actualResult = $this->_model->getConstructorArguments($class, false, true);
144 
145  $this->assertEquals($expectedResult, $actualResult);
146  }
147 
149  {
150  $class = new \ReflectionClass('ClassWithoutConstruct');
151  $actualResult = $this->_model->getConstructorArguments($class);
152 
153  $this->assertEquals([], $actualResult);
154  }
155 
157  {
158  $class = new \ReflectionClass('ClassWithoutConstruct');
159  $actualResult = $this->_model->getConstructorArguments($class, false, true);
160 
161  $this->assertEquals([], $actualResult);
162  }
163 
165  {
166  $class = new \ReflectionClass('ClassExtendsDefaultPhpType');
167  $actualResult = $this->_model->getConstructorArguments($class);
168 
169  $this->assertEquals([], $actualResult);
170  }
171 
173  {
174  $expectedResult = [
175  'message' => [
176  'name' => 'message',
177  'position' => 0,
178  'type' => 'string',
179  'isOptional' => true,
180  'default' => '',
181  ],
182  'code' => [
183  'name' => 'code',
184  'position' => 1,
185  'type' => 'int',
186  'isOptional' => true,
187  'default' => 0,
188  ],
189  'previous' => [
190  'name' => 'previous',
191  'position' => 2,
192  'type' => '\Exception',
193  'isOptional' => true,
194  'default' => null,
195  ],
196  ];
197  $class = new \ReflectionClass('ClassExtendsDefaultPhpTypeWithIOverrideConstructor');
198  $actualResult = $this->_model->getConstructorArguments($class, false, true);
199 
200  $this->assertEquals($expectedResult, $actualResult);
201  }
202 
204  {
205  $class = new \ReflectionClass('ThirdClassForParentCall');
206  $actualResult = $this->_model->getParentCall(
207  $class,
208  [
209  'stdClassObject' => ['type' => '\stdClass'],
210  'secondClass' => ['type' => '\ClassExtendsDefaultPhpType']
211  ]
212  );
213  $expectedResult = [
214  ['name' => 'stdClassObject', 'position' => 0, 'type' => '\stdClass'],
215  ['name' => 'secondClass', 'position' => 1, 'type' => '\ClassExtendsDefaultPhpType'],
216  ];
217  $this->assertEquals($expectedResult, $actualResult);
218  }
219 
221  {
222  $class = new \ReflectionClass('WrongArgumentsOrder');
223  $actualResult = $this->_model->getParentCall(
224  $class,
225  [
226  'stdClassObject' => ['type' => '\stdClass'],
227  'secondClass' => ['type' => '\ClassExtendsDefaultPhpType']
228  ]
229  );
230  $expectedResult = [
231  ['name' => 'secondClass', 'position' => 0, 'type' => '\ClassExtendsDefaultPhpType'],
232  ['name' => 'stdClassObject', 'position' => 1, 'type' => '\stdClass'],
233  ];
234  $this->assertEquals($expectedResult, $actualResult);
235  }
236 
238  {
239  $class = new \ReflectionClass('ThirdClassForParentCall');
240  $actualResult = $this->_model->getParentCall(
241  $class,
242  [
243  'stdClassObject' => ['type' => '\stdClass'],
244  'secondClass' => ['type' => '\ClassExtendsDefaultPhpType']
245  ]
246  );
247  $expectedResult = [
248  ['name' => 'stdClassObject', 'position' => 0, 'type' => '\stdClass'],
249  ['name' => 'secondClass', 'position' => 1, 'type' => '\ClassExtendsDefaultPhpType'],
250  ];
251  $this->assertEquals($expectedResult, $actualResult);
252  }
253 
260  public function testIsCompatibleType($requiredType, $actualType, $expectedResult)
261  {
262  $actualResult = $this->_model->isCompatibleType($requiredType, $actualType);
263  $this->assertEquals($expectedResult, $actualResult);
264  }
265 
270  {
271  return [
272  ['array', 10, false],
273  ['array', 'array', true],
274  [null, null, true],
275  [null, 'array', true],
276  ['\ClassWithAllArgumentTypes', '\ClassWithoutOwnConstruct', true],
277  ['\ClassWithoutOwnConstruct', '\ClassWithAllArgumentTypes', false]
278  ];
279  }
280 
281  public function testGetAnnotations()
282  {
283  $class = new \ReflectionClass('\ClassWithSuppressWarnings');
284  $expected = ['SuppressWarnings' => 'Magento.TypeDuplication'];
285  $this->assertEquals($expected, $this->_model->getAnnotations($class));
286  }
287 }
defined('TESTS_BP')||define('TESTS_BP' __DIR__
Definition: _bootstrap.php:60
testIsCompatibleType($requiredType, $actualType, $expectedResult)
$_option $_optionId $class
Definition: date.phtml:13