private function insertMissingCommandNames(ArgsFormatInputDefinition $inputDefinition, $lenient = false) { // Start with the default values of the arguments. $inputArguments = $inputDefinition->getArguments(); $fixedValues = array(); $commandNames = $inputDefinition->getCommandNamesByArgumentName(); // Flatten the actual arguments, in case they contain a multi-valued // argument. $actualValues = $this->flatten($this->arguments); // Reset all array pointers. reset($commandNames); reset($actualValues); reset($inputArguments); // Skip the command names. The resulting pointer is like this: // // actual: [ 0: remote, 1: origin, 2: foo/bar ] // ^ $this->skipCommandNames($actualValues, $commandNames); // Copy the command names into the fixed array. The result is: // // fixed: [ cmd1: remote, cmd2: add ] $this->copyArgumentValues($commandNames, $inputArguments, $fixedValues, $lenient); // Copy the remaining actual values. The result is: // // fixed: [ cmd1: remote, cmd2: add, name: origin, target: foo/bar ] $this->copyArgumentValues($actualValues, $inputArguments, $fixedValues, $lenient); // Overwrite all current arguments with the fixed values foreach ($fixedValues as $name => $value) { $this->arguments[$name] = $value; } }
public function testAdaptOptionWithDescriptionAndDefault() { $argsFormat = ArgsFormat::build()->addOption(new Option('option', 'o', Option::OPTIONAL_VALUE, 'The description', 'The default'))->getFormat(); $adapter = new ArgsFormatInputDefinition($argsFormat); $this->assertEquals(array(), $adapter->getArguments()); $this->assertEquals(array('option' => new InputOption('option', 'o', InputOption::VALUE_OPTIONAL, 'The description', 'The default')), $adapter->getOptions()); }