diff --git a/tests/aot/symfony/attribute-array-arguments.phpt b/tests/aot/symfony/attribute-array-arguments.phpt new file mode 100644 index 00000000..8149b4ba --- /dev/null +++ b/tests/aot/symfony/attribute-array-arguments.phpt @@ -0,0 +1,35 @@ +--TEST-- +Symfony pattern: attribute array arguments +--SKIPIF-- + +--FILE-- +getAttributes(SymfonyLikeRoute::class)[0]->newInstance(); + var_dump($route->methods); +} +?> +--EXPECT-- +array(2) { + [0]=> + string(3) "GET" + [1]=> + string(4) "POST" +} diff --git a/tests/aot/symfony/attribute-named-args-reflection.phpt b/tests/aot/symfony/attribute-named-args-reflection.phpt new file mode 100644 index 00000000..5f76b521 --- /dev/null +++ b/tests/aot/symfony/attribute-named-args-reflection.phpt @@ -0,0 +1,51 @@ +--TEST-- +Symfony pattern: class attribute with named arguments and constructor normalization +--FILE-- +name = implode('|', $names); + } +} + +#[SymfonyLikeCommand(name: 'cache:clear', description: 'Clear cache', hidden: true, help: 'Clears generated cache')] +class SymfonyLikeClearCacheCommand +{ +} + +function main(): void +{ + $attribute = (new ReflectionClass(SymfonyLikeClearCacheCommand::class))->getAttributes(SymfonyLikeCommand::class)[0]; + $command = $attribute->newInstance(); + + var_dump($command->name); + var_dump($command->description); + var_dump($command->usages); +} +?> +--EXPECT-- +string(12) "|cache:clear" +string(11) "Clear cache" +array(0) { +} diff --git a/tests/aot/symfony/container-first-class-method-cache.phpt b/tests/aot/symfony/container-first-class-method-cache.phpt new file mode 100644 index 00000000..71f4b11d --- /dev/null +++ b/tests/aot/symfony/container-first-class-method-cache.phpt @@ -0,0 +1,39 @@ +--TEST-- +Symfony pattern: container caches first-class method callable with ??= +--FILE-- +getService ??= $this->getService(...), + ['foo', 'bar'], + ]; + } +} + +function main(): void +{ + $container = new SymfonyLikeContainer(); + [$factory, $ids] = $container->locator(); + + foreach ($ids as $id) { + var_dump($factory($id)); + } + + var_dump($container->getService instanceof Closure); +} +?> +--EXPECT-- +string(11) "service:foo" +string(11) "service:bar" +bool(true) diff --git a/tests/aot/symfony/dynamic-method-forward-unpack.phpt b/tests/aot/symfony/dynamic-method-forward-unpack.phpt new file mode 100644 index 00000000..07bb8cc4 --- /dev/null +++ b/tests/aot/symfony/dynamic-method-forward-unpack.phpt @@ -0,0 +1,33 @@ +--TEST-- +Symfony pattern: dynamic method forwarding with unpacked arguments +--FILE-- +serializer->{$method}(...$arguments); + } +} + +function main(): void +{ + $serializer = new SymfonyLikeTraceableSerializer(new SymfonyLikeInnerSerializer()); + var_dump($serializer->format('symfony', '[', ']')); +} +?> +--EXPECT-- +string(9) "[SYMFONY]" diff --git a/tests/aot/symfony/local-variable-type-widening.phpt b/tests/aot/symfony/local-variable-type-widening.phpt new file mode 100644 index 00000000..6c69a56a --- /dev/null +++ b/tests/aot/symfony/local-variable-type-widening.phpt @@ -0,0 +1,26 @@ +--TEST-- +Symfony pattern: local variable reassigns from string to array in constructor +--SKIPIF-- + +--FILE-- +name = implode('|', $name); + } +} + +function main(): void +{ + var_dump((new SymfonyLikeCommandNameNormalizer('cache:clear', ['cache:clean']))->name); +} +?> +--EXPECT-- +string(23) "cache:clear|cache:clean"