4 * This file is part of Psy Shell.
6 * (c) 2012-2018 Justin Hileman
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
12 namespace Psy\Test\Input;
14 use Psy\Input\FilterOptions;
15 use Symfony\Component\Console\Input\InputDefinition;
16 use Symfony\Component\Console\Input\StringInput;
18 class FilterOptionsTest extends \PHPUnit\Framework\TestCase
20 public function testGetOptions()
22 $opts = FilterOptions::getOptions();
23 $this->assertCount(3, $opts);
27 * @dataProvider validInputs
29 public function testBindValidInput($input, $hasFilter = true)
31 $input = $this->getInput($input);
32 $filterOptions = new FilterOptions();
33 $filterOptions->bind($input);
35 $this->assertEquals($hasFilter, $filterOptions->hasFilter());
38 public function validInputs()
42 ['--grep="bar" --invert'],
43 ['--grep="bar" --insensitive'],
44 ['--grep="bar" --invert --insensitive'],
50 * @dataProvider invalidInputs
51 * @expectedException \Psy\Exception\RuntimeException
53 public function testBindInvalidInput($input)
55 $input = $this->getInput($input);
56 $filterOptions = new FilterOptions();
57 $filterOptions->bind($input);
60 public function invalidInputs()
65 ['--invert --insensitive'],
67 // invalid because regex
73 * @dataProvider matchData
75 public function testMatch($input, $str, $matches)
77 $input = $this->getInput($input);
78 $filterOptions = new FilterOptions();
79 $filterOptions->bind($input);
81 $this->assertEquals($matches, $filterOptions->match($str));
84 public function matchData()
87 ['', 'whatever', true],
88 ['--grep FOO', 'foo', false],
89 ['--grep foo', 'foo', true],
90 ['--grep foo', 'food', true],
91 ['--grep oo', 'Food', true],
92 ['--grep oo -i', 'FOOD', true],
93 ['--grep foo -v', 'food', false],
94 ['--grep foo -v', 'whatever', true],
98 private function getInput($input)
100 $input = new StringInput($input);
101 $input->bind(new InputDefinition(FilterOptions::getOptions()));