Add new tests and fix problem with the second option being chosen on down arrow
This commit is contained in:
parent
8a0bcfbed2
commit
2b73975023
@ -91,7 +91,7 @@ class DialogHelper extends Helper
|
|||||||
$i = 0;
|
$i = 0;
|
||||||
$matches = array();
|
$matches = array();
|
||||||
$numMatches = 0;
|
$numMatches = 0;
|
||||||
$ofs = 0;
|
$ofs = -1;
|
||||||
|
|
||||||
// Disable icanon (so we can fread each keypress) and echo (we'll do echoing here instead)
|
// Disable icanon (so we can fread each keypress) and echo (we'll do echoing here instead)
|
||||||
shell_exec('stty -icanon -echo');
|
shell_exec('stty -icanon -echo');
|
||||||
@ -109,6 +109,10 @@ class DialogHelper extends Helper
|
|||||||
$output->write("\033[1D");
|
$output->write("\033[1D");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($i === 0) {
|
||||||
|
$ofs = -1;
|
||||||
|
}
|
||||||
|
|
||||||
// Erase characters from cursor to end of line
|
// Erase characters from cursor to end of line
|
||||||
$output->write("\033[K");
|
$output->write("\033[K");
|
||||||
$ret = substr($ret, 0, $i);
|
$ret = substr($ret, 0, $i);
|
||||||
@ -126,6 +130,10 @@ class DialogHelper extends Helper
|
|||||||
if (0 === $i) {
|
if (0 === $i) {
|
||||||
$matches = $autocomplete;
|
$matches = $autocomplete;
|
||||||
$numMatches = count($matches);
|
$numMatches = count($matches);
|
||||||
|
|
||||||
|
if ('A' === $c[2] && -1 === $ofs) {
|
||||||
|
$ofs = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (0 === $numMatches) {
|
if (0 === $numMatches) {
|
||||||
|
@ -55,18 +55,24 @@ class DialogHelperTest extends \PHPUnit_Framework_TestCase
|
|||||||
rewind($output->getStream());
|
rewind($output->getStream());
|
||||||
$this->assertEquals('What time is it?', stream_get_contents($output->getStream()));
|
$this->assertEquals('What time is it?', stream_get_contents($output->getStream()));
|
||||||
|
|
||||||
$bundles = array('AcmeDemoBundle', 'AsseticBundle');
|
$bundles = array('AcmeDemoBundle', 'AsseticBundle', 'SecurityBundle', 'FooBundle');
|
||||||
|
|
||||||
// Acm<NEWLINE>
|
// Acm<NEWLINE>
|
||||||
// Ac<BACKSPACE><BACKSPACE>s<TAB>Test<NEWLINE>
|
// Ac<BACKSPACE><BACKSPACE>s<TAB>Test<NEWLINE>
|
||||||
// <NEWLINE>
|
// <NEWLINE>
|
||||||
$inputStream = $this->getInputStream("Acm\nAc\177\177s\tTest\n\n");
|
// <UP ARROW><UP ARROW><NEWLINE>
|
||||||
|
// <UP ARROW><UP ARROW><UP ARROW><UP ARROW><UP ARROW><TAB><NEWLINE>
|
||||||
|
// <DOWN ARROW><NEWLINE>
|
||||||
|
$inputStream = $this->getInputStream("Acm\nAc\177\177s\tTest\n\n\033[A\033[A\n\033[A\033[A\033[A\033[A\033[A\tTest\n\033[B\n");
|
||||||
$dialog->setInputStream($inputStream);
|
$dialog->setInputStream($inputStream);
|
||||||
|
|
||||||
if ($this->hasSttyAvailable()) {
|
if ($this->hasSttyAvailable()) {
|
||||||
$this->assertEquals('AcmeDemoBundle', $dialog->ask($this->getOutputStream(), 'Please select a bundle', 'FrameworkBundle', $bundles));
|
$this->assertEquals('AcmeDemoBundle', $dialog->ask($this->getOutputStream(), 'Please select a bundle', 'FrameworkBundle', $bundles));
|
||||||
$this->assertEquals('AsseticBundleTest', $dialog->ask($this->getOutputStream(), 'Please select a bundle', 'FrameworkBundle', $bundles));
|
$this->assertEquals('AsseticBundleTest', $dialog->ask($this->getOutputStream(), 'Please select a bundle', 'FrameworkBundle', $bundles));
|
||||||
$this->assertEquals('FrameworkBundle', $dialog->ask($this->getOutputStream(), 'Please select a bundle', 'FrameworkBundle', $bundles));
|
$this->assertEquals('FrameworkBundle', $dialog->ask($this->getOutputStream(), 'Please select a bundle', 'FrameworkBundle', $bundles));
|
||||||
|
$this->assertEquals('SecurityBundle', $dialog->ask($this->getOutputStream(), 'Please select a bundle', 'FrameworkBundle', $bundles));
|
||||||
|
$this->assertEquals('FooBundleTest', $dialog->ask($this->getOutputStream(), 'Please select a bundle', 'FrameworkBundle', $bundles));
|
||||||
|
$this->assertEquals('AcmeDemoBundle', $dialog->ask($this->getOutputStream(), 'Please select a bundle', 'FrameworkBundle', $bundles));
|
||||||
} else {
|
} else {
|
||||||
$this->markTestSkipped();
|
$this->markTestSkipped();
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user