Skip to content

Commit d66d29c

Browse files
authored
[Fix] Make CompileParameters not break parameter values with equals sign (#281)
1 parent 5c17447 commit d66d29c

File tree

2 files changed

+16
-3
lines changed

2 files changed

+16
-3
lines changed

src/Task.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ public function compileParameters($console = false)
100100
};
101101

102102
return collect($matches)->reduce(function ($carry, $parameter) use ($console, &$argument_index, $duplicate_parameter_index) {
103-
$param = explode('=', $parameter[0]);
103+
$param = explode('=', $parameter[0], 2);
104104

105105
if (count($param) > 1) {
106106
$trimmed_param = trim(trim($param[1], '"'), "'");

tests/Feature/CompileParametersTest.php

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,10 +94,10 @@ public function test_multiple_mixed_arguments()
9494
public function test_all_mixed_arguments()
9595
{
9696
$task = Task::factory()->create();
97-
$task->parameters = 'arg1 arg2=test arg3=15 arg4 --flag --flag2 --option=yes --someplace=warm';
97+
$task->parameters = 'arg1 arg2=test arg3=15 arg4 --flag --flag2 --option=yes --someplace=warm --equals="a=1 and b=2"';
9898
$parameters = $task->compileParameters();
9999

100-
$this->assertCount(8, $parameters);
100+
$this->assertCount(9, $parameters);
101101
$this->assertSame('arg1', $parameters[0]);
102102
$this->assertSame('test', $parameters['arg2']);
103103
$this->assertSame('15', $parameters['arg3']);
@@ -106,6 +106,7 @@ public function test_all_mixed_arguments()
106106
$this->assertArrayHasKey('--flag', $parameters);
107107
$this->assertSame(true, $parameters['--flag']);
108108
$this->assertSame(true, $parameters['--flag2']);
109+
$this->assertSame('a=1 and b=2', $parameters['--equals']);
109110
}
110111

111112
public function test_all_mixed_arguments_console()
@@ -146,4 +147,16 @@ public function test_array_argument()
146147
$this->assertSame('1', $parameters['--id'][0]);
147148
$this->assertSame('2', $parameters['--id'][1]);
148149
}
150+
151+
public function test_equals_value_not_breaks()
152+
{
153+
$task = Task::factory()->create();
154+
$task->parameters = 'arg1="a=b" --option="c=d" --option="a=1 and b=2"';
155+
$parameters = $task->compileParameters(true);
156+
157+
$this->assertCount(2, $parameters);
158+
$this->assertSame('a=b', $parameters[0]);
159+
$this->assertSame('c=d', $parameters['--option'][0]);
160+
$this->assertSame('a=1 and b=2', $parameters['--option'][1]);
161+
}
149162
}

0 commit comments

Comments
 (0)