Chris@0: bind($definition); Chris@0: return $input; Chris@0: } Chris@0: Chris@0: protected function getFormat(FormatterOptions $options, $defaults = []) Chris@0: { Chris@0: return $options->get(FormatterOptions::FORMAT, [], $options->get(FormatterOptions::DEFAULT_FORMAT, $defaults, '')); Chris@0: } Chris@0: Chris@0: public function testFormatterOptions() { Chris@0: $configurationData = [ Chris@0: FormatterOptions::DEFAULT_FORMAT => 'table', Chris@0: 'test' => 'one', Chris@0: 'try' => 'two', Chris@0: ]; Chris@0: $userOptions = [ Chris@0: 'try' => 'three', Chris@0: ]; Chris@0: $defaults = [ Chris@0: FormatterOptions::DEFAULT_FORMAT => 'var_export', Chris@0: 'try' => 'four', Chris@0: 'default-only' => 'defaulty', Chris@0: ]; Chris@0: Chris@0: // Create a StringInput object and ensure that Symfony Console is working right. Chris@0: $input = $this->createStringInput('test --format=yaml --include-field-labels'); Chris@0: $testValue = $input->getOption(FormatterOptions::INCLUDE_FIELD_LABELS); Chris@0: $this->assertTrue($testValue); Chris@0: $testValue = $input->getOption(FormatterOptions::FORMAT); Chris@0: $this->assertEquals('yaml', $testValue); Chris@0: Chris@0: // $options->get() only returns the default parameter is there is Chris@0: // no matching key in configuration, userOptions or defaults. Chris@0: $options = new FormatterOptions($configurationData, $userOptions); Chris@0: $this->assertEquals('', $options->get('default-only')); Chris@0: $this->assertEquals('defaulty', $options->get('default-only', $defaults)); Chris@0: $this->assertEquals('defaulty', $options->get('default-only', $defaults, 'irrelevant')); Chris@0: $this->assertEquals('three', $options->get('try')); Chris@0: $this->assertEquals('three', $options->get('try', $defaults)); Chris@0: $this->assertEquals('three', $options->get('try', $defaults, 'irrelevant')); Chris@0: $this->assertFalse($options->get('no-such-key')); Chris@0: $this->assertFalse($options->get('no-such-key', $defaults)); Chris@0: $this->assertEquals('last-chance', $options->get('no-such-key', $defaults, 'last-chance')); Chris@0: Chris@0: // Change a user option Chris@0: $options = new FormatterOptions($configurationData, $userOptions); Chris@0: $options->setOption('try', 'changed'); Chris@0: $this->assertEquals('changed', $options->get('try')); Chris@0: $this->assertEquals('changed', $options->get('try', $defaults)); Chris@0: $this->assertEquals('changed', $options->get('try', $defaults, 'irrelevant')); Chris@0: Chris@0: // Configuration has higher priority than defaults Chris@0: $options = new FormatterOptions($configurationData, $userOptions); Chris@0: $this->assertEquals('table', $this->getFormat($options)); Chris@0: $this->assertEquals('table', $this->getFormat($options, $defaults)); Chris@0: Chris@0: // Override has higher priority than configuration and defaults Chris@0: $options = new FormatterOptions($configurationData, $userOptions); Chris@0: $newOptions = $options->override([FormatterOptions::DEFAULT_FORMAT => 'json']); Chris@0: $this->assertEquals('json', $this->getFormat($newOptions)); Chris@0: $this->assertEquals('json', $this->getFormat($newOptions, $defaults)); Chris@0: Chris@0: $options = new FormatterOptions($configurationData, $userOptions); Chris@0: $options->setConfigurationDefault(FormatterOptions::DEFAULT_FORMAT, 'php'); Chris@0: $this->assertEquals('table', $this->getFormat($options)); Chris@0: Chris@0: $options = new FormatterOptions($configurationData, $userOptions); Chris@0: $options->setConfigurationData([]); Chris@0: $this->assertEquals('', $this->getFormat($options)); Chris@0: Chris@0: // It is only possible to override options that appear in '$default' Chris@0: // with $input; if there are no defaults, then the --format=yaml Chris@0: // option will not be picked up. Chris@0: $options = new FormatterOptions($configurationData, $userOptions); Chris@0: $options->setInput($input); Chris@0: $this->assertEquals('table', $options->get(FormatterOptions::DEFAULT_FORMAT)); Chris@0: $this->assertEquals('table', $options->get(FormatterOptions::DEFAULT_FORMAT, $defaults, 'irrelevant')); Chris@0: Chris@0: // We won't see the default value unless the configuration value is empty. Chris@0: $options = new FormatterOptions([], $userOptions); Chris@0: $this->assertEquals('var_export', $options->get(FormatterOptions::DEFAULT_FORMAT, $defaults, 'irrelevant')); Chris@0: } Chris@0: }