Mercurial > hg > isophonics-drupal-site
comparison vendor/psy/psysh/test/Psy/Test/Input/ShellInputTest.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:4c8ae668cc8c |
---|---|
1 <?php | |
2 | |
3 /* | |
4 * This file is part of Psy Shell. | |
5 * | |
6 * (c) 2012-2017 Justin Hileman | |
7 * | |
8 * For the full copyright and license information, please view the LICENSE | |
9 * file that was distributed with this source code. | |
10 */ | |
11 | |
12 namespace Psy\Tests\Input; | |
13 | |
14 use Psy\Input\CodeArgument; | |
15 use Psy\Input\ShellInput; | |
16 use Symfony\Component\Console\Input\InputArgument; | |
17 use Symfony\Component\Console\Input\InputDefinition; | |
18 use Symfony\Component\Console\Input\InputOption; | |
19 | |
20 class ShellInputTest extends \PHPUnit\Framework\TestCase | |
21 { | |
22 /** | |
23 * @dataProvider getTokenizeData | |
24 */ | |
25 public function testTokenize($input, $tokens, $message) | |
26 { | |
27 $input = new ShellInput($input); | |
28 $r = new \ReflectionClass('Psy\Input\ShellInput'); | |
29 $p = $r->getProperty('tokenPairs'); | |
30 $p->setAccessible(true); | |
31 $this->assertEquals($tokens, $p->getValue($input), $message); | |
32 } | |
33 | |
34 public function testInputOptionWithGivenString() | |
35 { | |
36 $definition = new InputDefinition(array( | |
37 new InputOption('foo', null, InputOption::VALUE_REQUIRED), | |
38 new CodeArgument('code', null, InputOption::VALUE_REQUIRED), | |
39 )); | |
40 | |
41 $input = new ShellInput('--foo=bar echo "baz\n";'); | |
42 $input->bind($definition); | |
43 $this->assertEquals('bar', $input->getOption('foo')); | |
44 $this->assertEquals('echo "baz\n";', $input->getArgument('code')); | |
45 } | |
46 | |
47 public function testInputOptionWithoutCodeArguments() | |
48 { | |
49 $definition = new InputDefinition(array( | |
50 new InputOption('foo', null, InputOption::VALUE_REQUIRED), | |
51 new InputArgument('bar', null, InputOption::VALUE_REQUIRED), | |
52 new InputArgument('baz', null, InputOption::VALUE_REQUIRED), | |
53 )); | |
54 | |
55 $input = new ShellInput('--foo=foo bar "baz\n"'); | |
56 $input->bind($definition); | |
57 $this->assertEquals('foo', $input->getOption('foo')); | |
58 $this->assertEquals('bar', $input->getArgument('bar')); | |
59 $this->assertEquals("baz\n", $input->getArgument('baz')); | |
60 } | |
61 | |
62 public function getTokenizeData() | |
63 { | |
64 // Test all the cases from StringInput test, ensuring they have an appropriate $rest token. | |
65 return array( | |
66 array( | |
67 '', | |
68 array(), | |
69 '->tokenize() parses an empty string', | |
70 ), | |
71 array( | |
72 'foo', | |
73 array(array('foo', 'foo')), | |
74 '->tokenize() parses arguments', | |
75 ), | |
76 array( | |
77 ' foo bar ', | |
78 array(array('foo', 'foo bar '), array('bar', 'bar ')), | |
79 '->tokenize() ignores whitespaces between arguments', | |
80 ), | |
81 array( | |
82 '"quoted"', | |
83 array(array('quoted', '"quoted"')), | |
84 '->tokenize() parses quoted arguments', | |
85 ), | |
86 array( | |
87 "'quoted'", | |
88 array(array('quoted', "'quoted'")), | |
89 '->tokenize() parses quoted arguments', | |
90 ), | |
91 array( | |
92 "'a\rb\nc\td'", | |
93 array(array("a\rb\nc\td", "'a\rb\nc\td'")), | |
94 '->tokenize() parses whitespace chars in strings', | |
95 ), | |
96 array( | |
97 "'a'\r'b'\n'c'\t'd'", | |
98 array( | |
99 array('a', "'a'\r'b'\n'c'\t'd'"), | |
100 array('b', "'b'\n'c'\t'd'"), | |
101 array('c', "'c'\t'd'"), | |
102 array('d', "'d'"), | |
103 ), | |
104 '->tokenize() parses whitespace chars between args as spaces', | |
105 ), | |
106 array( | |
107 '\"quoted\"', | |
108 array(array('"quoted"', '\"quoted\"')), | |
109 '->tokenize() parses escaped-quoted arguments', | |
110 ), | |
111 array( | |
112 "\'quoted\'", | |
113 array(array('\'quoted\'', "\'quoted\'")), | |
114 '->tokenize() parses escaped-quoted arguments', | |
115 ), | |
116 array( | |
117 '-a', | |
118 array(array('-a', '-a')), | |
119 '->tokenize() parses short options', | |
120 ), | |
121 array( | |
122 '-azc', | |
123 array(array('-azc', '-azc')), | |
124 '->tokenize() parses aggregated short options', | |
125 ), | |
126 array( | |
127 '-awithavalue', | |
128 array(array('-awithavalue', '-awithavalue')), | |
129 '->tokenize() parses short options with a value', | |
130 ), | |
131 array( | |
132 '-a"foo bar"', | |
133 array(array('-afoo bar', '-a"foo bar"')), | |
134 '->tokenize() parses short options with a value', | |
135 ), | |
136 array( | |
137 '-a"foo bar""foo bar"', | |
138 array(array('-afoo barfoo bar', '-a"foo bar""foo bar"')), | |
139 '->tokenize() parses short options with a value', | |
140 ), | |
141 array( | |
142 '-a\'foo bar\'', | |
143 array(array('-afoo bar', '-a\'foo bar\'')), | |
144 '->tokenize() parses short options with a value', | |
145 ), | |
146 array( | |
147 '-a\'foo bar\'\'foo bar\'', | |
148 array(array('-afoo barfoo bar', '-a\'foo bar\'\'foo bar\'')), | |
149 '->tokenize() parses short options with a value', | |
150 ), | |
151 array( | |
152 '-a\'foo bar\'"foo bar"', | |
153 array(array('-afoo barfoo bar', '-a\'foo bar\'"foo bar"')), | |
154 '->tokenize() parses short options with a value', | |
155 ), | |
156 array( | |
157 '--long-option', | |
158 array(array('--long-option', '--long-option')), | |
159 '->tokenize() parses long options', | |
160 ), | |
161 array( | |
162 '--long-option=foo', | |
163 array(array('--long-option=foo', '--long-option=foo')), | |
164 '->tokenize() parses long options with a value', | |
165 ), | |
166 array( | |
167 '--long-option="foo bar"', | |
168 array(array('--long-option=foo bar', '--long-option="foo bar"')), | |
169 '->tokenize() parses long options with a value', | |
170 ), | |
171 array( | |
172 '--long-option="foo bar""another"', | |
173 array(array('--long-option=foo baranother', '--long-option="foo bar""another"')), | |
174 '->tokenize() parses long options with a value', | |
175 ), | |
176 array( | |
177 '--long-option=\'foo bar\'', | |
178 array(array('--long-option=foo bar', '--long-option=\'foo bar\'')), | |
179 '->tokenize() parses long options with a value', | |
180 ), | |
181 array( | |
182 "--long-option='foo bar''another'", | |
183 array(array('--long-option=foo baranother', "--long-option='foo bar''another'")), | |
184 '->tokenize() parses long options with a value', | |
185 ), | |
186 array( | |
187 "--long-option='foo bar'\"another\"", | |
188 array(array('--long-option=foo baranother', "--long-option='foo bar'\"another\"")), | |
189 '->tokenize() parses long options with a value', | |
190 ), | |
191 array( | |
192 'foo -a -ffoo --long bar', | |
193 array( | |
194 array('foo', 'foo -a -ffoo --long bar'), | |
195 array('-a', '-a -ffoo --long bar'), | |
196 array('-ffoo', '-ffoo --long bar'), | |
197 array('--long', '--long bar'), | |
198 array('bar', 'bar'), | |
199 ), | |
200 '->tokenize() parses when several arguments and options', | |
201 ), | |
202 ); | |
203 } | |
204 } |