Skip to content
This repository was archived by the owner on Jan 29, 2020. It is now read-only.

Commit 754faf1

Browse files
committed
Update test suite to check object internal type.
Introduce a new TestAsset\ObjectHintsClass as a sample to be used in test. Also update generator tests to check for object type.
1 parent ae7c4b6 commit 754faf1

File tree

4 files changed

+66
-4
lines changed

4 files changed

+66
-4
lines changed

test/Generator/MethodGeneratorTest.php

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
use ZendTest\Code\TestAsset\EmptyClass;
2323
use ZendTest\Code\TestAsset\InternalHintsClass;
2424
use ZendTest\Code\TestAsset\IterableHintsClass;
25+
use ZendTest\Code\TestAsset\ObjectHintsClass;
2526
use ZendTest\Code\TestAsset\NullableReturnTypeHintedClass;
2627
use ZendTest\Code\TestAsset\ReturnTypeHintedClass;
2728

@@ -364,9 +365,24 @@ public function returnTypeHintClassesProvider()
364365
[NullableReturnTypeHintedClass::class, 'otherClassReturn', '?\\' . InternalHintsClass::class],
365366
[IterableHintsClass::class, 'iterableReturnValue', 'iterable'],
366367
[IterableHintsClass::class, 'nullableIterableReturnValue', '?iterable'],
368+
[ObjectHintsClass::class, 'objectReturnValue', 'object'],
369+
[ObjectHintsClass::class, 'nullableObjectReturnValue', '?object'],
367370
];
368371

369-
return $parameters;
372+
return array_filter(
373+
$parameters,
374+
function (array $parameter) {
375+
return (PHP_VERSION_ID >= 70200
376+
|| (
377+
false === strpos($parameter[2], 'object')
378+
))
379+
&& (PHP_VERSION_ID >= 70100
380+
|| (
381+
false === strpos($parameter[2], '?')
382+
&& ! in_array(strtolower($parameter[2]), ['void', 'iterable'])
383+
));
384+
}
385+
);
370386
}
371387

372388
/**

test/Generator/ParameterGeneratorTest.php

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
use ZendTest\Code\TestAsset\EmptyClass;
2222
use ZendTest\Code\TestAsset\InternalHintsClass;
2323
use ZendTest\Code\TestAsset\IterableHintsClass;
24+
use ZendTest\Code\TestAsset\ObjectHintsClass;
2425
use ZendTest\Code\TestAsset\NullableHintsClass;
2526
use ZendTest\Code\TestAsset\NullNullableDefaultHintsClass;
2627
use ZendTest\Code\TestAsset\VariadicParametersClass;
@@ -345,9 +346,6 @@ public function validClassNameProvider()
345346
['mixed'],
346347
['Mixed'],
347348
['MIXED'],
348-
['object'],
349-
['Object'],
350-
['OBJECT'],
351349
['resource'],
352350
['Resource'],
353351
['RESOURCE'],
@@ -464,8 +462,27 @@ public function reflectionHintsProvider()
464462
[IterableHintsClass::class, 'iterableParameter', 'foo', 'iterable'],
465463
[IterableHintsClass::class, 'nullableIterableParameter', 'foo', '?iterable'],
466464
[IterableHintsClass::class, 'nullDefaultIterableParameter', 'foo', '?iterable'],
465+
[ObjectHintsClass::class, 'objectParameter', 'foo', 'object'],
466+
[ObjectHintsClass::class, 'nullableObjectParameter', 'foo', '?object'],
467+
[ObjectHintsClass::class, 'nullDefaultObjectParameter', 'foo', '?object'],
467468
];
468469

470+
$compatibleParameters = array_filter(
471+
$parameters,
472+
function (array $parameter) {
473+
474+
return (PHP_VERSION_ID >= 70200
475+
|| (
476+
false === strpos($parameter[3], 'object')
477+
))
478+
&& (PHP_VERSION_ID >= 70100
479+
|| (
480+
false === strpos($parameter[3], '?')
481+
&& ! in_array(strtolower($parameter[3]), ['void', 'iterable'])
482+
));
483+
}
484+
);
485+
469486
// just re-organizing the keys so that the phpunit data set makes sense in errors:
470487
return array_combine(
471488
array_map(

test/Generator/TypeGeneratorTest.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,9 @@ public function invalidTypeProvider()
241241
['\\iterable'],
242242
['\\Iterable'],
243243
['\\ITERABLE'],
244+
['\\object'],
245+
['\\Object'],
246+
['\\OBJECT'],
244247
];
245248

246249
return array_combine(

test/TestAsset/ObjectHintsClass.php

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
<?php
2+
3+
namespace ZendTest\Code\TestAsset;
4+
5+
class ObjectHintsClass extends EmptyClass
6+
{
7+
public function objectParameter(object $foo)
8+
{
9+
}
10+
11+
public function nullableObjectParameter(?object $foo)
12+
{
13+
}
14+
15+
public function nullDefaultObjectParameter(object $foo = null)
16+
{
17+
}
18+
19+
public function objectReturnValue() : object
20+
{
21+
}
22+
23+
public function nullableObjectReturnValue() : ?object
24+
{
25+
}
26+
}

0 commit comments

Comments
 (0)