diff --git a/tests/aot/symfony/assetmapper-uasort-array-spread-compare.phpt b/tests/aot/symfony/assetmapper-uasort-array-spread-compare.phpt new file mode 100644 index 00000000..45affe1d --- /dev/null +++ b/tests/aot/symfony/assetmapper-uasort-array-spread-compare.phpt @@ -0,0 +1,31 @@ +--TEST-- +Symfony AssetMapper pattern: uasort with array spread spaceship comparison +--FILE-- + [(bool) $a[1], ...$a] <=> [(bool) $b[1], ...$b]); + + return $rows; +} + +function main(): void +{ + $rows = [ + ['assets/z.css', ''], + ['assets/app.js', 'App\\'], + ['assets/a.css', ''], + ['vendor/package.js', 'Vendor\\'], + ]; + + foreach (sort_path_rows($rows) as $row) { + echo $row[0], '|', $row[1], "\n"; + } +} +?> +--EXPECT-- +assets/a.css| +assets/z.css| +assets/app.js|App\ +vendor/package.js|Vendor\ diff --git a/tests/aot/symfony/domcrawler-form-php-values.phpt b/tests/aot/symfony/domcrawler-form-php-values.phpt new file mode 100644 index 00000000..f08d7976 --- /dev/null +++ b/tests/aot/symfony/domcrawler-form-php-values.phpt @@ -0,0 +1,48 @@ +--TEST-- +Symfony DomCrawler pattern: parse_str values and recursive replace with unpack +--FILE-- + $value) { + $qs = http_build_query([$name => $value], '', '&'); + if ($qs) { + parse_str($qs, $expandedValue); + $varName = substr($name, 0, strlen(key($expandedValue))); + $values[] = [$varName => current($expandedValue)]; + } + } + + return array_replace_recursive([], ...$values); +} + +function main(): void +{ + var_dump(expand_form_values([ + 'user[name]' => 'Ada', + 'user[roles][0]' => 'admin', + 'user[roles][1]' => 'editor', + 'token' => 'abc', + ])); +} +?> +--EXPECT-- +array(2) { + ["user"]=> + array(2) { + ["name"]=> + string(3) "Ada" + ["roles"]=> + array(2) { + [0]=> + string(5) "admin" + [1]=> + string(6) "editor" + } + } + ["token"]=> + string(3) "abc" +} diff --git a/tests/aot/symfony/htmlsanitizer-nullsafe-render-fallback.phpt b/tests/aot/symfony/htmlsanitizer-nullsafe-render-fallback.phpt new file mode 100644 index 00000000..a35edfd8 --- /dev/null +++ b/tests/aot/symfony/htmlsanitizer-nullsafe-render-fallback.phpt @@ -0,0 +1,54 @@ +--TEST-- +Symfony HtmlSanitizer pattern: array visitor lookup with nullsafe render fallback +--FILE-- +html; + } +} + +final class Visitor +{ + public function __construct(private ?RenderedNode $node) + { + } + + public function visit(object $parsed): ?RenderedNode + { + return $this->node; + } +} + +function render_sanitized(array $domVisitors, string $context, ?object $parsed): string +{ + if (null === $parsed) { + return ''; + } + + return $domVisitors[$context]->visit($parsed)?->render() ?? ''; +} + +function main(): void +{ + $visitors = [ + 'body' => new Visitor(new RenderedNode('
ok
')), + 'head' => new Visitor(null), + ]; + + var_dump(render_sanitized($visitors, 'body', new stdClass())); + var_dump(render_sanitized($visitors, 'head', new stdClass())); + var_dump(render_sanitized($visitors, 'body', null)); +} +?> +--EXPECT-- +string(9) "ok
" +string(0) "" +string(0) "" diff --git a/tests/aot/symfony/importmap-filter-use-key.phpt b/tests/aot/symfony/importmap-filter-use-key.phpt new file mode 100644 index 00000000..042d6d15 --- /dev/null +++ b/tests/aot/symfony/importmap-filter-use-key.phpt @@ -0,0 +1,30 @@ +--TEST-- +Symfony AssetMapper pattern: array_filter with ARRAY_FILTER_USE_KEY +--FILE-- + !is_int($key), ARRAY_FILTER_USE_KEY); +} + +function main(): void +{ + var_dump(strip_numeric_keys([ + 0 => '@symfony/stimulus-bundle', + 'package' => '@symfony/stimulus-bundle', + 1 => 'extra', + 'version' => '1.2.3', + 'alias' => 'stimulus', + ])); +} +?> +--EXPECT-- +array(3) { + ["package"]=> + string(24) "@symfony/stimulus-bundle" + ["version"]=> + string(5) "1.2.3" + ["alias"]=> + string(8) "stimulus" +} diff --git a/tests/aot/symfony/translation-plural-locale-match.phpt b/tests/aot/symfony/translation-plural-locale-match.phpt new file mode 100644 index 00000000..0811dcf5 --- /dev/null +++ b/tests/aot/symfony/translation-plural-locale-match.phpt @@ -0,0 +1,31 @@ +--TEST-- +Symfony Translation pattern: complex conditional expression as match subject +--FILE-- + 3 ? substr($locale, 0, strrpos($locale, '_')) : $locale) { + 'en', + 'fr' => 1, + 'pt_BR' => 2, + 'en_US_POSIX' => 3, + default => 0, + }; +} + +function main(): void +{ + var_dump(plural_locale_bucket('en_GB')); + var_dump(plural_locale_bucket('fr_CA')); + var_dump(plural_locale_bucket('pt_BR')); + var_dump(plural_locale_bucket('en_US_POSIX')); + var_dump(plural_locale_bucket('zh_Hant')); +} +?> +--EXPECT-- +int(1) +int(1) +int(2) +int(3) +int(0)