|
5 | 5 | use Exception; |
6 | 6 | use PHPUnit\Framework\Attributes\CoversClass; |
7 | 7 | use PHPUnit\Framework\TestCase; |
| 8 | +use Webdevcave\Yadic\Annotations\ArrayOf; |
8 | 9 | use Webdevcave\Yadic\Annotations\Inject; |
9 | 10 | use Webdevcave\Yadic\Annotations\Provides; |
10 | 11 | use Webdevcave\Yadic\Annotations\Singleton; |
11 | 12 | use Webdevcave\Yadic\Exceptions\ContainerException; |
12 | 13 | use Webdevcave\Yadic\Exceptions\NotFoundException; |
13 | 14 | use Webdevcave\Yadic\ServiceContainer; |
| 15 | +use Webdevcave\Yadic\Tests\ExampleNamespace\Candidate; |
14 | 16 | use Webdevcave\Yadic\Tests\ExampleNamespace\ClassA; |
15 | 17 | use Webdevcave\Yadic\Tests\ExampleNamespace\ClassB; |
16 | 18 | use Webdevcave\Yadic\Tests\ExampleNamespace\ClassC; |
17 | 19 | use Webdevcave\Yadic\Tests\ExampleNamespace\ClassD; |
18 | 20 | use Webdevcave\Yadic\Tests\ExampleNamespace\InterfaceA; |
| 21 | +use Webdevcave\Yadic\Tests\ExampleNamespace\Skill; |
19 | 22 |
|
20 | 23 | #[CoversClass(ServiceContainer::class)] |
21 | 24 | #[CoversClass(Provides::class)] |
22 | 25 | #[CoversClass(Inject::class)] |
23 | 26 | #[CoversClass(Singleton::class)] |
| 27 | +#[CoversClass(ArrayOf::class)] |
24 | 28 | class ServiceContainerTest extends TestCase |
25 | 29 | { |
26 | 30 | private ?ServiceContainer $container; |
@@ -95,6 +99,46 @@ public function testNoAutowirableResource() |
95 | 99 | $this->container->get(ClassD::class); |
96 | 100 | } |
97 | 101 |
|
| 102 | + public function testHydrationForVector() |
| 103 | + { |
| 104 | + $data = [ |
| 105 | + ['title' => 'PHP'], |
| 106 | + ['title' => 'Java'], |
| 107 | + ['title' => 'Rust'], |
| 108 | + ['title' => 'React'], |
| 109 | + ]; |
| 110 | + $instances = $this->container->hydrate(Skill::class, $data); |
| 111 | + |
| 112 | + $this->assertContainsOnlyInstancesOf(Skill::class, $instances); |
| 113 | + |
| 114 | + foreach ($data as $key => $skill) { |
| 115 | + $this->assertEquals($skill['title'], $instances[$key]->title); |
| 116 | + } |
| 117 | + } |
| 118 | + |
| 119 | + public function testHydrationForMatrix() |
| 120 | + { |
| 121 | + $data = [ |
| 122 | + 'name' => 'John Doe', |
| 123 | + 'age' => 25, |
| 124 | + 'skills' => [ |
| 125 | + ['title' => 'PHP'], |
| 126 | + ['title' => 'Java'], |
| 127 | + ['title' => 'Rust'], |
| 128 | + ['title' => 'React'], |
| 129 | + ], |
| 130 | + ]; |
| 131 | + $instance = $this->container->hydrate(Candidate::class, $data); |
| 132 | + |
| 133 | + $this->assertInstanceOf(Candidate::class, $instance); |
| 134 | + $this->assertEquals($data['name'], $instance->name); |
| 135 | + $this->assertEquals($data['age'], $instance->age); |
| 136 | + |
| 137 | + foreach ($data['skills'] as $key => $skill) { |
| 138 | + $this->assertEquals($skill['title'], $instance->skills[$key]->title); |
| 139 | + } |
| 140 | + } |
| 141 | + |
98 | 142 | protected function setUp(): void |
99 | 143 | { |
100 | 144 | $this->container = new ServiceContainer(); |
|
0 commit comments