|
2 | 2 |
|
3 | 3 | namespace Cspray\AnnotatedContainer;
|
4 | 4 |
|
| 5 | +use Cspray\AnnotatedContainerFixture\ConfigurationWithArrayEnum\FooEnum; |
| 6 | +use Cspray\AnnotatedContainerFixture\ConfigurationWithAssocArrayEnum; |
5 | 7 | use Cspray\AnnotatedContainerFixture\ConfigurationWithEnum\MyEnum;
|
6 | 8 | use Cspray\AnnotatedContainerFixture\Fixtures;
|
7 | 9 | use Cspray\AnnotatedTarget\PhpParserAnnotatedTargetParser;
|
@@ -248,18 +250,46 @@ public function testSerializeWithEnumInjectDefinitions() {
|
248 | 250 | ], $json['injectDefinitions']);
|
249 | 251 | }
|
250 | 252 |
|
| 253 | + public function testSerializeWithArrayEnumInjectDefinitions() { |
| 254 | + $serializer = new JsonContainerDefinitionSerializer(); |
| 255 | + $containerDefinition = $this->containerDefinitionCompiler->compile( |
| 256 | + ContainerDefinitionCompileOptionsBuilder::scanDirectories(Fixtures::configurationWithArrayEnum()->getPath())->build() |
| 257 | + ); |
| 258 | + |
| 259 | + $json = json_decode($serializer->serialize($containerDefinition), true); |
| 260 | + self::assertArrayHasKey('injectDefinitions', $json); |
| 261 | + self::assertContains([ |
| 262 | + 'injectTargetType' => Fixtures::configurationWithArrayEnum()->myConfiguration()->getName(), |
| 263 | + 'injectTargetMethod' => null, |
| 264 | + 'injectTargetName' => 'cases', |
| 265 | + 'type' => 'array', |
| 266 | + 'value' => [ |
| 267 | + [ |
| 268 | + 'type' => FooEnum::class, |
| 269 | + 'value' => 'Bar' |
| 270 | + ], |
| 271 | + [ |
| 272 | + 'type' => FooEnum::class, |
| 273 | + 'value' => 'Qux' |
| 274 | + ] |
| 275 | + ], |
| 276 | + 'profiles' => ['default'], |
| 277 | + 'storeName' => null |
| 278 | + ], $json['injectDefinitions']); |
| 279 | + } |
| 280 | + |
251 | 281 | /** ======================================== Deserialization Testing ==============================================*/
|
252 | 282 |
|
253 | 283 | public function serializeDeserializeSerializeDirs() : array {
|
254 | 284 | return [
|
255 |
| - [Fixtures::singleConcreteService()->getPath()], |
256 |
| - [Fixtures::delegatedService()->getPath()], |
257 |
| - [Fixtures::interfacePrepareServices()->getPath()], |
258 |
| - [Fixtures::profileResolvedServices()->getPath()], |
259 |
| - [Fixtures::abstractClassAliasedService()->getPath()], |
260 |
| - [Fixtures::namedServices()->getPath()], |
261 |
| - [Fixtures::injectConstructorServices()->getPath()], |
262 |
| - [Fixtures::configurationServices()->getPath()] |
| 285 | + 'singleConcrete' => [Fixtures::singleConcreteService()->getPath()], |
| 286 | + 'delegatedService' => [Fixtures::delegatedService()->getPath()], |
| 287 | + 'interfacePrepareServices' => [Fixtures::interfacePrepareServices()->getPath()], |
| 288 | + 'profileResolvedServices' => [Fixtures::profileResolvedServices()->getPath()], |
| 289 | + 'abstractClassAliasedService' => [Fixtures::abstractClassAliasedService()->getPath()], |
| 290 | + 'namedServices' => [Fixtures::namedServices()->getPath()], |
| 291 | + 'injectConstructorServices' => [Fixtures::injectConstructorServices()->getPath()], |
| 292 | + 'configurationServices' => [Fixtures::configurationServices()->getPath()] |
263 | 293 | ];
|
264 | 294 | }
|
265 | 295 |
|
@@ -363,6 +393,38 @@ public function testDeserializeWithEnum() {
|
363 | 393 | self::assertSame(MyEnum::Foo, $injectDefinitions[0]->getValue());
|
364 | 394 | }
|
365 | 395 |
|
| 396 | + public function testDeserializeWithArrayEnum() { |
| 397 | + $serializer = new JsonContainerDefinitionSerializer(); |
| 398 | + $containerDefinition = $this->containerDefinitionCompiler->compile( |
| 399 | + ContainerDefinitionCompileOptionsBuilder::scanDirectories(Fixtures::configurationWithArrayEnum()->getPath())->build() |
| 400 | + ); |
| 401 | + |
| 402 | + $serialized = $serializer->serialize($containerDefinition); |
| 403 | + $subjectDefinition = $serializer->deserialize($serialized); |
| 404 | + |
| 405 | + $injectDefinitions = $subjectDefinition->getInjectDefinitions(); |
| 406 | + |
| 407 | + self::assertCount(1, $injectDefinitions); |
| 408 | + self::assertSame([FooEnum::Bar, FooEnum::Qux], $injectDefinitions[0]->getValue()); |
| 409 | + } |
| 410 | + |
| 411 | + public function testDeserializeWithAssocArrayEnum() { |
| 412 | + $serializer = new JsonContainerDefinitionSerializer(); |
| 413 | + $containerDefinition = $this->containerDefinitionCompiler->compile( |
| 414 | + ContainerDefinitionCompileOptionsBuilder::scanDirectories(Fixtures::configurationWithAssocArrayEnum()->getPath())->build() |
| 415 | + ); |
| 416 | + |
| 417 | + $serialized = $serializer->serialize($containerDefinition); |
| 418 | + $subjectDefinition = $serializer->deserialize($serialized); |
| 419 | + |
| 420 | + $injectDefinitions = $subjectDefinition->getInjectDefinitions(); |
| 421 | + |
| 422 | + self::assertCount(1, $injectDefinitions); |
| 423 | + self::assertSame([ |
| 424 | + 'b' => ConfigurationWithAssocArrayEnum\MyEnum::B, |
| 425 | + 'c' => ConfigurationWithAssocArrayEnum\MyEnum::C |
| 426 | + ], $injectDefinitions[0]->getValue()); |
| 427 | + } |
366 | 428 | }
|
367 | 429 |
|
368 | 430 |
|
0 commit comments