From 9f13a034571742aa45c9cdd3c5c0a915101a31a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9o=20FIDRY?= Date: Thu, 17 Apr 2025 13:53:16 +0200 Subject: [PATCH] fix --- src/Input/InputOptionsSerializer.php | 31 +++++++++++-------- tests/Input/InputOptionsSerializerTest.php | 2 +- .../DebugChildProcessInputsTest.php | 29 +++++++++-------- 3 files changed, 33 insertions(+), 29 deletions(-) diff --git a/src/Input/InputOptionsSerializer.php b/src/Input/InputOptionsSerializer.php index b15a87f..0641990 100644 --- a/src/Input/InputOptionsSerializer.php +++ b/src/Input/InputOptionsSerializer.php @@ -20,7 +20,8 @@ use function array_fill_keys; use function array_keys; use function array_map; -use function implode; +use function array_merge; +use function is_array; use function is_string; use function preg_match; use function sprintf; @@ -52,24 +53,31 @@ public static function serialize( array_fill_keys($excludedOptionNames, ''), ); - return array_map( - static fn (string $name) => self::serializeOption( + $serializedOptionsList = []; + + foreach (array_keys($filteredOptions) as $name) { + $serializedOption = self::serializeOption( $commandDefinition->getOption($name), $name, $filteredOptions[$name], - ), - array_keys($filteredOptions), - ); + ); + + $serializedOptionsList[] = is_array($serializedOption) ? $serializedOption : [$serializedOption]; + } + + return array_merge(...$serializedOptionsList); } /** * @param string|bool|int|float|null|array $value + * + * @return string|list */ private static function serializeOption( InputOption $option, string $name, array|bool|float|int|string|null $value, - ): string { + ): string|array { if ($option->isNegatable()) { return sprintf( '--%s%s', @@ -87,12 +95,9 @@ private static function serializeOption( if ($option->isArray()) { /** @var array $value */ - return implode( - '', - array_map( - static fn ($item) => self::serializeOptionWithValue($name, $item), - $value, - ), + return array_map( + static fn ($item) => self::serializeOptionWithValue($name, $item), + $value, ); } diff --git a/tests/Input/InputOptionsSerializerTest.php b/tests/Input/InputOptionsSerializerTest.php index e0c3b46..c5269a0 100644 --- a/tests/Input/InputOptionsSerializerTest.php +++ b/tests/Input/InputOptionsSerializerTest.php @@ -255,7 +255,7 @@ private static function optionSerializationProvider(): iterable InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY, ), ['--opt' => ['v1', 'v2', 'v3']], - ['--opt=v1--opt=v2--opt=v3'], + ['--opt=v1', '--opt=v2', '--opt=v3'], ); if (!$isSymfony4) { diff --git a/tests/Integration/DebugChildProcessInputsTest.php b/tests/Integration/DebugChildProcessInputsTest.php index 8a96c51..642ecb3 100644 --- a/tests/Integration/DebugChildProcessInputsTest.php +++ b/tests/Integration/DebugChildProcessInputsTest.php @@ -74,17 +74,16 @@ public function test_it_can_run_the_command_without_sub_processes( public static function inputProvider(): iterable { - // This test fails... - // yield 'default' => [ - // 'item', - // null, - // [], - // DebugChildProcessCommand::createContent( - // 'item', - // '', - // [], - // ), - // ]; + yield 'default' => [ + 'item', + null, + [], + DebugChildProcessCommand::createContent( + 'item', + '', + [], + ), + ]; yield 'with values' => [ 'item', @@ -93,7 +92,7 @@ public static function inputProvider(): iterable DebugChildProcessCommand::createContent( 'item', 'option', - ['option1--array-option=option2'], + ['option1', 'option2'], ), ]; @@ -104,7 +103,7 @@ public static function inputProvider(): iterable DebugChildProcessCommand::createContent( '"foo"', '"\"bar\""', - ['"\"option1\""--array-option="\"option2\""'], + ['"\"option1\""', '"\"option2\""'], ), ]; @@ -115,7 +114,7 @@ public static function inputProvider(): iterable DebugChildProcessCommand::createContent( '"o_id in(\'20\')"', '"\"p_id in(\'22\')\""', - ['"\"option in(\'1\')\""--array-option="\"option in(\'2\')\""'], + ['"\"option in(\'1\')\""', '"\"option in(\'2\')\""'], ), ]; @@ -126,7 +125,7 @@ public static function inputProvider(): iterable DebugChildProcessCommand::createContent( 'a b c d', '"d c b a"', - ['"option 1"--array-option="option 2"'], + ['"option 1"', '"option 2"'], ), ]; }