annotate vendor/consolidation/output-formatters/tests/testFormatterOptions.php @ 9:1fc0ff908d1f

Add another data file
author Chris Cannam
date Mon, 05 Feb 2018 12:34:32 +0000
parents 4c8ae668cc8c
children
rev   line source
Chris@0 1 <?php
Chris@0 2 namespace Consolidation\OutputFormatters;
Chris@0 3
Chris@0 4 use Consolidation\OutputFormatters\Options\FormatterOptions;
Chris@0 5 use Symfony\Component\Console\Input\StringInput;
Chris@0 6 use Symfony\Component\Console\Input\InputOption;
Chris@0 7 use Symfony\Component\Console\Input\InputArgument;
Chris@0 8 use Symfony\Component\Console\Input\InputDefinition;
Chris@0 9
Chris@0 10 class FormatterOptionsTests extends \PHPUnit_Framework_TestCase
Chris@0 11 {
Chris@0 12 public function createStringInput($testCommandline)
Chris@0 13 {
Chris@0 14 $input = new StringInput($testCommandline);
Chris@0 15 $optionDefinitions = [
Chris@0 16 new InputArgument('unused', InputArgument::REQUIRED),
Chris@0 17 new InputOption(FormatterOptions::FORMAT, null, InputOption::VALUE_REQUIRED),
Chris@0 18 new InputOption(FormatterOptions::TABLE_STYLE, null, InputOption::VALUE_REQUIRED),
Chris@0 19 new InputOption(FormatterOptions::FIELD, null, InputOption::VALUE_REQUIRED),
Chris@0 20 new InputOption(FormatterOptions::FIELDS, null, InputOption::VALUE_REQUIRED),
Chris@0 21 new InputOption(FormatterOptions::INCLUDE_FIELD_LABELS, null, InputOption::VALUE_NONE),
Chris@0 22 new InputOption(FormatterOptions::ROW_LABELS, null, InputOption::VALUE_REQUIRED),
Chris@0 23 new InputOption(FormatterOptions::FIELD_LABELS, null, InputOption::VALUE_REQUIRED),
Chris@0 24 // These probably don't make senes to alter via options
Chris@0 25 new InputOption(FormatterOptions::DEFAULT_FORMAT, null, InputOption::VALUE_REQUIRED),
Chris@0 26 new InputOption(FormatterOptions::DEFAULT_FIELDS, null, InputOption::VALUE_REQUIRED),
Chris@0 27 new InputOption(FormatterOptions::LIST_ORIENTATION, null, InputOption::VALUE_NONE),
Chris@0 28 ];
Chris@0 29 $definition = new InputDefinition($optionDefinitions);
Chris@0 30 $input->bind($definition);
Chris@0 31 return $input;
Chris@0 32 }
Chris@0 33
Chris@0 34 protected function getFormat(FormatterOptions $options, $defaults = [])
Chris@0 35 {
Chris@0 36 return $options->get(FormatterOptions::FORMAT, [], $options->get(FormatterOptions::DEFAULT_FORMAT, $defaults, ''));
Chris@0 37 }
Chris@0 38
Chris@0 39 public function testFormatterOptions() {
Chris@0 40 $configurationData = [
Chris@0 41 FormatterOptions::DEFAULT_FORMAT => 'table',
Chris@0 42 'test' => 'one',
Chris@0 43 'try' => 'two',
Chris@0 44 ];
Chris@0 45 $userOptions = [
Chris@0 46 'try' => 'three',
Chris@0 47 ];
Chris@0 48 $defaults = [
Chris@0 49 FormatterOptions::DEFAULT_FORMAT => 'var_export',
Chris@0 50 'try' => 'four',
Chris@0 51 'default-only' => 'defaulty',
Chris@0 52 ];
Chris@0 53
Chris@0 54 // Create a StringInput object and ensure that Symfony Console is working right.
Chris@0 55 $input = $this->createStringInput('test --format=yaml --include-field-labels');
Chris@0 56 $testValue = $input->getOption(FormatterOptions::INCLUDE_FIELD_LABELS);
Chris@0 57 $this->assertTrue($testValue);
Chris@0 58 $testValue = $input->getOption(FormatterOptions::FORMAT);
Chris@0 59 $this->assertEquals('yaml', $testValue);
Chris@0 60
Chris@0 61 // $options->get() only returns the default parameter is there is
Chris@0 62 // no matching key in configuration, userOptions or defaults.
Chris@0 63 $options = new FormatterOptions($configurationData, $userOptions);
Chris@0 64 $this->assertEquals('', $options->get('default-only'));
Chris@0 65 $this->assertEquals('defaulty', $options->get('default-only', $defaults));
Chris@0 66 $this->assertEquals('defaulty', $options->get('default-only', $defaults, 'irrelevant'));
Chris@0 67 $this->assertEquals('three', $options->get('try'));
Chris@0 68 $this->assertEquals('three', $options->get('try', $defaults));
Chris@0 69 $this->assertEquals('three', $options->get('try', $defaults, 'irrelevant'));
Chris@0 70 $this->assertFalse($options->get('no-such-key'));
Chris@0 71 $this->assertFalse($options->get('no-such-key', $defaults));
Chris@0 72 $this->assertEquals('last-chance', $options->get('no-such-key', $defaults, 'last-chance'));
Chris@0 73
Chris@0 74 // Change a user option
Chris@0 75 $options = new FormatterOptions($configurationData, $userOptions);
Chris@0 76 $options->setOption('try', 'changed');
Chris@0 77 $this->assertEquals('changed', $options->get('try'));
Chris@0 78 $this->assertEquals('changed', $options->get('try', $defaults));
Chris@0 79 $this->assertEquals('changed', $options->get('try', $defaults, 'irrelevant'));
Chris@0 80
Chris@0 81 // Configuration has higher priority than defaults
Chris@0 82 $options = new FormatterOptions($configurationData, $userOptions);
Chris@0 83 $this->assertEquals('table', $this->getFormat($options));
Chris@0 84 $this->assertEquals('table', $this->getFormat($options, $defaults));
Chris@0 85
Chris@0 86 // Override has higher priority than configuration and defaults
Chris@0 87 $options = new FormatterOptions($configurationData, $userOptions);
Chris@0 88 $newOptions = $options->override([FormatterOptions::DEFAULT_FORMAT => 'json']);
Chris@0 89 $this->assertEquals('json', $this->getFormat($newOptions));
Chris@0 90 $this->assertEquals('json', $this->getFormat($newOptions, $defaults));
Chris@0 91
Chris@0 92 $options = new FormatterOptions($configurationData, $userOptions);
Chris@0 93 $options->setConfigurationDefault(FormatterOptions::DEFAULT_FORMAT, 'php');
Chris@0 94 $this->assertEquals('table', $this->getFormat($options));
Chris@0 95
Chris@0 96 $options = new FormatterOptions($configurationData, $userOptions);
Chris@0 97 $options->setConfigurationData([]);
Chris@0 98 $this->assertEquals('', $this->getFormat($options));
Chris@0 99
Chris@0 100 // It is only possible to override options that appear in '$default'
Chris@0 101 // with $input; if there are no defaults, then the --format=yaml
Chris@0 102 // option will not be picked up.
Chris@0 103 $options = new FormatterOptions($configurationData, $userOptions);
Chris@0 104 $options->setInput($input);
Chris@0 105 $this->assertEquals('table', $options->get(FormatterOptions::DEFAULT_FORMAT));
Chris@0 106 $this->assertEquals('table', $options->get(FormatterOptions::DEFAULT_FORMAT, $defaults, 'irrelevant'));
Chris@0 107
Chris@0 108 // We won't see the default value unless the configuration value is empty.
Chris@0 109 $options = new FormatterOptions([], $userOptions);
Chris@0 110 $this->assertEquals('var_export', $options->get(FormatterOptions::DEFAULT_FORMAT, $defaults, 'irrelevant'));
Chris@0 111 }
Chris@0 112 }