Skip to content

Commit d758a5e

Browse files
committed
Add a test for PHP 8.0+ union-types argument type hints
1 parent f699aa7 commit d758a5e

File tree

3 files changed

+33
-1
lines changed

3 files changed

+33
-1
lines changed
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<?php /** @noinspection PhpLanguageLevelInspection */
2+
3+
namespace Technically\DependencyResolver\Specs\Fixtures;
4+
5+
use Psr\Container\ContainerInterface;
6+
7+
final class MyUnionTypeDependencyService
8+
{
9+
/**
10+
* @var callable|ContainerInterface|string
11+
*/
12+
public $input;
13+
14+
public function __construct(string|callable|ContainerInterface $input)
15+
{
16+
$this->input = $input;
17+
}
18+
}

specs/dependency-resolver.spec.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
use Technically\DependencyResolver\Specs\Fixtures\MyAbstractContainerService;
1111
use Technically\DependencyResolver\Specs\Fixtures\MyNullableArgumentService;
1212
use Technically\DependencyResolver\Specs\Fixtures\MyOptionalArgumentService;
13+
use Technically\DependencyResolver\Specs\Fixtures\MyUnionTypeDependencyService;
1314
use Technically\DependencyResolver\Specs\Fixtures\MyUnresolvableScalarArgumentService;
1415
use Technically\DependencyResolver\Specs\Fixtures\MyUntypedArgumentService;
1516

@@ -43,6 +44,19 @@
4344
assert($resolved->container === $container);
4445
});
4546

47+
if (PHP_MAJOR_VERSION >= 8) {
48+
it('should instantiate a class resolving union type dependencies', function () {
49+
$container = new ArrayContainer();
50+
$container->set(ContainerInterface::class, $container);
51+
$resolver = new DependencyResolver($container);
52+
53+
$resolved = $resolver->resolve(MyUnionTypeDependencyService::class);
54+
55+
assert($resolved instanceof MyUnionTypeDependencyService);
56+
assert($resolved->input === $container);
57+
});
58+
}
59+
4660
it('should instantiate a class creating required dependencies recursively', function () {
4761
$container = new ArrayContainer();
4862
$resolver = new DependencyResolver($container);

src/DependencyResolver.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ private function getParameterTypes(ReflectionParameter $parameter, ?string $clas
169169

170170
/** @noinspection PhpElementIsNotAvailableInCurrentPhpVersionInspection */
171171
if (class_exists(\ReflectionUnionType::class) && $type instanceof \ReflectionUnionType) {
172-
array_map(
172+
return array_map(
173173
function (ReflectionNamedType $type) use ($className): Type {
174174
return new Type($type->getName(), $className);
175175
},

0 commit comments

Comments
 (0)