Initial commit
This commit is contained in:
12
tests/classes/ClassA.php
Normal file
12
tests/classes/ClassA.php
Normal file
@@ -0,0 +1,12 @@
|
||||
<?php
|
||||
|
||||
#[NoccyLabs\Hotwire\Attributes\AsService]
|
||||
class ClassA
|
||||
{
|
||||
public function __construct(
|
||||
public readonly ClassB $classB,
|
||||
public readonly ClassC $classC,
|
||||
)
|
||||
{
|
||||
}
|
||||
}
|
11
tests/classes/ClassB.php
Normal file
11
tests/classes/ClassB.php
Normal file
@@ -0,0 +1,11 @@
|
||||
<?php
|
||||
|
||||
#[NoccyLabs\Hotwire\Attributes\AsService]
|
||||
class ClassB
|
||||
{
|
||||
public function __construct(
|
||||
public readonly ClassC $classC,
|
||||
)
|
||||
{
|
||||
}
|
||||
}
|
10
tests/classes/ClassC.php
Normal file
10
tests/classes/ClassC.php
Normal file
@@ -0,0 +1,10 @@
|
||||
<?php
|
||||
|
||||
#[NoccyLabs\Hotwire\Attributes\AsService]
|
||||
class ClassC
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
}
|
||||
}
|
||||
|
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