Merge branch '2.7' into 2.8
* 2.7: [Console] Don't go past exact matches when autocompleting Disable autoloader call on interface_exists check [Validator] Fix LazyLoadingMetadataFactory with PSR6Cache for non classname if tested values isn't an existing class
This commit is contained in:
commit
32c04bdcbb
@ -284,7 +284,7 @@ class QuestionHelper extends Helper
|
||||
|
||||
foreach ($autocomplete as $value) {
|
||||
// If typed characters match the beginning chunk of value (e.g. [AcmeDe]moBundle)
|
||||
if (0 === strpos($value, $ret) && $i !== strlen($value)) {
|
||||
if (0 === strpos($value, $ret)) {
|
||||
$matches[$numMatches++] = $value;
|
||||
}
|
||||
}
|
||||
|
@ -160,6 +160,30 @@ class QuestionHelperTest extends TestCase
|
||||
$this->assertEquals('AsseticBundle', $dialog->ask($this->createInputInterfaceMock(), $this->createOutputInterface(), $question));
|
||||
}
|
||||
|
||||
public function testAskWithAutocompleteWithExactMatch()
|
||||
{
|
||||
if (!$this->hasSttyAvailable()) {
|
||||
$this->markTestSkipped('`stty` is required to test autocomplete functionality');
|
||||
}
|
||||
|
||||
$inputStream = $this->getInputStream("b\n");
|
||||
|
||||
$possibleChoices = array(
|
||||
'a' => 'berlin',
|
||||
'b' => 'copenhagen',
|
||||
'c' => 'amsterdam',
|
||||
);
|
||||
|
||||
$dialog = new QuestionHelper();
|
||||
$dialog->setInputStream($inputStream);
|
||||
$dialog->setHelperSet(new HelperSet(array(new FormatterHelper())));
|
||||
|
||||
$question = new ChoiceQuestion('Please select a city', $possibleChoices);
|
||||
$question->setMaxAttempts(1);
|
||||
|
||||
$this->assertSame('b', $dialog->ask($this->createInputInterfaceMock(), $this->createOutputInterface(), $question));
|
||||
}
|
||||
|
||||
public function testAutocompleteWithTrailingBackslash()
|
||||
{
|
||||
if (!$this->hasSttyAvailable()) {
|
||||
|
@ -90,6 +90,10 @@ class LazyLoadingMetadataFactory implements MetadataFactoryInterface
|
||||
return $this->loadedClasses[$class];
|
||||
}
|
||||
|
||||
if (!class_exists($class) && !interface_exists($class, false)) {
|
||||
throw new NoSuchMetadataException(sprintf('The class or interface "%s" does not exist.', $class));
|
||||
}
|
||||
|
||||
if (null !== $this->cache && false !== ($metadata = $this->cache->read($class))) {
|
||||
// Include constraints from the parent class
|
||||
$this->mergeConstraints($metadata);
|
||||
@ -97,10 +101,6 @@ class LazyLoadingMetadataFactory implements MetadataFactoryInterface
|
||||
return $this->loadedClasses[$class] = $metadata;
|
||||
}
|
||||
|
||||
if (!class_exists($class) && !interface_exists($class)) {
|
||||
throw new NoSuchMetadataException(sprintf('The class or interface "%s" does not exist.', $class));
|
||||
}
|
||||
|
||||
$metadata = new ClassMetadata($class);
|
||||
|
||||
if (null !== $this->loader) {
|
||||
|
@ -149,6 +149,21 @@ class LazyLoadingMetadataFactoryTest extends TestCase
|
||||
$this->assertEquals($metadata, $factory->getMetadataFor(self::PARENT_CLASS));
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException \Symfony\Component\Validator\Exception\NoSuchMetadataException
|
||||
*/
|
||||
public function testNonClassNameStringValues()
|
||||
{
|
||||
$testedValue = 'error@example.com';
|
||||
$loader = $this->getMockBuilder('Symfony\Component\Validator\Mapping\Loader\LoaderInterface')->getMock();
|
||||
$cache = $this->getMockBuilder('Symfony\Component\Validator\Mapping\Cache\CacheInterface')->getMock();
|
||||
$factory = new LazyLoadingMetadataFactory($loader, $cache);
|
||||
$cache
|
||||
->expects($this->never())
|
||||
->method('read');
|
||||
$factory->getMetadataFor($testedValue);
|
||||
}
|
||||
|
||||
public function testMetadataCacheWithRuntimeConstraint()
|
||||
{
|
||||
$cache = $this->getMockBuilder('Symfony\Component\Validator\Mapping\Cache\CacheInterface')->getMock();
|
||||
|
Reference in New Issue
Block a user