Initial commit
This commit is contained in:
92
tests/src/DependencyResolverTest.php
Normal file
92
tests/src/DependencyResolverTest.php
Normal file
@@ -0,0 +1,92 @@
|
||||
<?php
|
||||
|
||||
namespace NoccyLabs\Hotwire;
|
||||
|
||||
use ClassA;
|
||||
use PHPUnit\Framework\Attributes\CoversClass;
|
||||
|
||||
#[CoversClass(DependencyResolver::class)]
|
||||
class DependencyResolverTest extends \PHPUnit\Framework\TestCase
|
||||
{
|
||||
|
||||
public function testAutowiringArguments(): void
|
||||
{
|
||||
$container = new Container();
|
||||
$container->add(\ClassA::class);
|
||||
$container->add(\ClassB::class);
|
||||
$container->add(\ClassC::class);
|
||||
|
||||
$resolver = new DependencyResolver();
|
||||
|
||||
$args = $resolver->autowireArguments($container, function (\ClassC $a, string $b, string $c = "42") { });
|
||||
|
||||
$this->assertInstanceOf(\ClassC::class, $args['a']);
|
||||
$this->assertNull($args['b']);
|
||||
$this->assertEquals("42", $args['c']);
|
||||
|
||||
}
|
||||
|
||||
public function testAutowiringCallback(): void
|
||||
{
|
||||
$container = new Container();
|
||||
$container->add(\ClassA::class);
|
||||
$container->add(\ClassB::class);
|
||||
$container->add(\ClassC::class);
|
||||
|
||||
$resolver = new DependencyResolver();
|
||||
|
||||
$hit = false;
|
||||
$cb = $resolver->autowire($container, function (\ClassC $a, string $b, string $c = "42") use (&$hit) {
|
||||
$hit = true;
|
||||
$this->assertEquals('hello', $b);
|
||||
$this->assertEquals('42', $c);
|
||||
return true;
|
||||
});
|
||||
$result = $cb(b: 'hello');
|
||||
|
||||
$this->assertTrue($hit);
|
||||
$this->assertTrue($result);
|
||||
|
||||
}
|
||||
|
||||
public function testAutowiringConstructor(): void
|
||||
{
|
||||
$container = new Container();
|
||||
$container->add(\ClassA::class);
|
||||
$container->add(\ClassB::class);
|
||||
$container->add(\ClassC::class);
|
||||
|
||||
$container->setParameter("b", "bazinga");
|
||||
|
||||
$resolver = new DependencyResolver();
|
||||
|
||||
$args = $resolver->autowireConstructorArguments($container, TestClass::class);
|
||||
$this->assertInstanceOf(\ClassC::class, $args['a']);
|
||||
$this->assertEquals("bazinga", $args['b']);
|
||||
$this->assertEquals("42", $args['c']);
|
||||
|
||||
}
|
||||
|
||||
public function testAutowiringConstructorWithParameters(): void
|
||||
{
|
||||
$container = new Container();
|
||||
$container->add(\ClassA::class);
|
||||
$container->add(\ClassB::class);
|
||||
$container->add(\ClassC::class);
|
||||
|
||||
$resolver = new DependencyResolver();
|
||||
|
||||
$args = $resolver->autowireConstructorArguments($container, TestClass::class);
|
||||
$this->assertInstanceOf(\ClassC::class, $args['a']);
|
||||
$this->assertEquals(null, $args['b']);
|
||||
$this->assertEquals("42", $args['c']);
|
||||
$this->assertInstanceOf(\ClassA::class, $args['d']);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class TestClass {
|
||||
public function __construct(\ClassC $a, string $b, string $c = "42", \ClassA $d) {
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user