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 }