Skip to content

Commit f699aa7

Browse files
committed
Add a test for untyped argument dependencies
1 parent 0011d6d commit f699aa7

File tree

3 files changed

+32
-1
lines changed

3 files changed

+32
-1
lines changed
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?php
2+
3+
namespace Technically\DependencyResolver\Specs\Fixtures;
4+
5+
final class MyUntypedArgumentService
6+
{
7+
public $input;
8+
9+
public function __construct($input)
10+
{
11+
$this->input = $input;
12+
}
13+
}

specs/dependency-resolver.spec.php

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
use Technically\DependencyResolver\Specs\Fixtures\MyNullableArgumentService;
1212
use Technically\DependencyResolver\Specs\Fixtures\MyOptionalArgumentService;
1313
use Technically\DependencyResolver\Specs\Fixtures\MyUnresolvableScalarArgumentService;
14+
use Technically\DependencyResolver\Specs\Fixtures\MyUntypedArgumentService;
1415

1516
describe('DependencyResolver', function() {
1617
it('should instantiate', function () {
@@ -121,4 +122,21 @@
121122
assert($exception->getArgumentName() === 'name');
122123
assert($exception->getMessage() === 'Could not autowire argument `name` for `Technically\DependencyResolver\Specs\Fixtures\MyUnresolvableScalarArgumentService`.');
123124
});
125+
126+
it('should throw exception if untyped dependency cannot be autowired', function () {
127+
$container = new ArrayContainer();
128+
$resolver = new DependencyResolver($container);
129+
130+
try {
131+
$resolver->resolve(MyUntypedArgumentService::class);
132+
} catch (Exception $exception) {
133+
// passthru
134+
}
135+
136+
assert(isset($exception));
137+
assert($exception instanceof CannotAutowireDependencyArgument);
138+
assert($exception->getDependencyName() === MyUntypedArgumentService::class);
139+
assert($exception->getArgumentName() === 'input');
140+
assert($exception->getMessage() === 'Could not autowire argument `input` for `Technically\DependencyResolver\Specs\Fixtures\MyUntypedArgumentService`.');
141+
});
124142
});

src/DependencyResolver.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ private function resolveArgument(string $className, Argument $argument, array $b
126126
return $argument->getDefaultValue();
127127
}
128128

129-
if ($argument->isNullable()) {
129+
if ($argument->isNullable() && count($argument->getTypes()) > 0) {
130130
return null;
131131
}
132132

0 commit comments

Comments
 (0)