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 }
|