Yaffs site version 1.1
[yaffs-website] / vendor / psy / psysh / test / Psy / Test / Input / ShellInputTest.php
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 }