Merge branch '2.7' into 2.8

* 2.7:
  Php Inspections (EA Ultimate): address some of one-time used local variables
  [Intl] Load locale aliases to support alias fallbacks
  [CssSelector] Fix CSS identifiers parsing - they can start with dash
This commit is contained in:
Fabien Potencier 2018-03-10 12:19:36 -06:00
commit b0bbdefbdb
9 changed files with 101 additions and 18 deletions

View File

@ -54,8 +54,7 @@ class TwigExtractor extends AbstractFileExtractor implements ExtractorInterface
*/
public function extract($resource, MessageCatalogue $catalogue)
{
$files = $this->extractFiles($resource);
foreach ($files as $file) {
foreach ($this->extractFiles($resource) as $file) {
try {
$this->extractTemplate(file_get_contents($file->getPathname()), $catalogue);
} catch (Error $e) {

View File

@ -46,7 +46,7 @@ class TokenizerPatterns
$this->nonAsciiPattern = '[^\x00-\x7F]';
$this->nmCharPattern = '[_a-z0-9-]|'.$this->escapePattern.'|'.$this->nonAsciiPattern;
$this->nmStartPattern = '[_a-z]|'.$this->escapePattern.'|'.$this->nonAsciiPattern;
$this->identifierPattern = '(?:'.$this->nmStartPattern.')(?:'.$this->nmCharPattern.')*';
$this->identifierPattern = '-?(?:'.$this->nmStartPattern.')(?:'.$this->nmCharPattern.')*';
$this->hashPattern = '#((?:'.$this->nmCharPattern.')+)';
$this->numberPattern = '[+-]?(?:[0-9]*\.[0-9]+|[0-9]+)';
$this->quotedStringPattern = '([^\n\r\f%s]|'.$this->stringEscapePattern.')*';

View File

@ -186,6 +186,7 @@ class ParserTest extends TestCase
array('foo:after', 'Element[foo]', 'after'),
array('foo::selection', 'Element[foo]', 'selection'),
array('lorem#ipsum ~ a#b.c[href]:empty::selection', 'CombinedSelector[Hash[Element[lorem]#ipsum] ~ Pseudo[Attribute[Class[Hash[Element[a]#b].c][href]]:empty]]', 'selection'),
array('video::-webkit-media-controls', 'Element[video]', '-webkit-media-controls'),
);
}

View File

@ -133,9 +133,7 @@ class LegacyChoiceListAdapter implements ChoiceListInterface
$this->values = array();
$this->structuredValues = $this->adaptedList->getValues();
$innerChoices = $this->adaptedList->getChoices();
foreach ($innerChoices as $index => $choice) {
foreach ($this->adaptedList->getChoices() as $index => $choice) {
$value = $this->structuredValues[$index];
$this->values[] = $value;
$this->choices[$value] = $choice;

View File

@ -80,6 +80,7 @@ class FormType extends BaseType
}
}
$formConfig = $form->getConfig();
$view->vars = array_replace($view->vars, array(
'read_only' => isset($view->vars['attr']['readonly']) && false !== $view->vars['attr']['readonly'], // deprecated
'errors' => $form->getErrors(),
@ -91,9 +92,9 @@ class FormType extends BaseType
'pattern' => isset($options['attr']['pattern']) ? $options['attr']['pattern'] : null, // Deprecated
'size' => null,
'label_attr' => $options['label_attr'],
'compound' => $form->getConfig()->getCompound(),
'method' => $form->getConfig()->getMethod(),
'action' => $form->getConfig()->getAction(),
'compound' => $formConfig->getCompound(),
'method' => $formConfig->getMethod(),
'action' => $formConfig->getAction(),
'submitted' => $form->isSubmitted(),
));
}

View File

@ -65,9 +65,7 @@ class ValidationListener implements EventSubscriberInterface
if ($form->isRoot()) {
// Validate the form in group "Default"
$violations = $this->validator->validate($form);
foreach ($violations as $violation) {
foreach ($this->validator->validate($form) as $violation) {
// Allow the "invalid" constraint to be put onto
// non-synchronized forms
// ConstraintViolation::getConstraint() must not expect to provide a constraint as long as Symfony\Component\Validator\ExecutionContext exists (before 3.0)

View File

@ -264,12 +264,8 @@ class ValidatorTypeGuesser implements FormTypeGuesserInterface
$classMetadata = $this->metadataFactory->getMetadataFor($class);
if ($classMetadata instanceof ClassMetadataInterface && $classMetadata->hasPropertyMetadata($property)) {
$memberMetadatas = $classMetadata->getPropertyMetadata($property);
foreach ($memberMetadatas as $memberMetadata) {
$constraints = $memberMetadata->getConstraints();
foreach ($constraints as $constraint) {
foreach ($classMetadata->getPropertyMetadata($property) as $memberMetadata) {
foreach ($memberMetadata->getConstraints() as $constraint) {
if ($guess = $closure($constraint)) {
$guesses[] = $guess;
}

View File

@ -15,6 +15,7 @@ use Symfony\Component\Intl\Data\Bundle\Reader\JsonBundleReader;
use Symfony\Component\Intl\Data\Bundle\Reader\BufferedBundleReader;
use Symfony\Component\Intl\Data\Bundle\Reader\BundleEntryReader;
use Symfony\Component\Intl\Data\Bundle\Reader\BundleEntryReaderInterface;
use Symfony\Component\Intl\Data\Provider\LocaleDataProvider;
use Symfony\Component\Intl\Data\Provider\ScriptDataProvider;
use Symfony\Component\Intl\ResourceBundle\CurrencyBundle;
use Symfony\Component\Intl\ResourceBundle\CurrencyBundleInterface;
@ -259,6 +260,11 @@ final class Intl
new JsonBundleReader(),
self::BUFFER_SIZE
));
$localeDataProvider = new LocaleDataProvider(
self::getDataDirectory().'/'.self::LOCALE_DIR,
self::$entryReader
);
self::$entryReader->setLocaleAliases($localeDataProvider->getAliases());
}
return self::$entryReader;

View File

@ -0,0 +1,84 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\Intl\Tests;
use Symfony\Component\Intl\Intl;
use PHPUnit\Framework\TestCase;
class IntlTest extends TestCase
{
/**
* @requires extension intl
*/
public function testIsExtensionLoadedChecksIfIntlExtensionIsLoaded()
{
$this->assertTrue(Intl::isExtensionLoaded());
}
public function testGetCurrencyBundleCreatesTheCurrencyBundle()
{
$this->assertInstanceOf('Symfony\Component\Intl\ResourceBundle\CurrencyBundleInterface', Intl::getCurrencyBundle());
}
public function testGetLanguageBundleCreatesTheLanguageBundle()
{
$this->assertInstanceOf('Symfony\Component\Intl\ResourceBundle\LanguageBundleInterface', Intl::getLanguageBundle());
}
public function testGetLocaleBundleCreatesTheLocaleBundle()
{
$this->assertInstanceOf('Symfony\Component\Intl\ResourceBundle\LocaleBundleInterface', Intl::getLocaleBundle());
}
public function testGetRegionBundleCreatesTheRegionBundle()
{
$this->assertInstanceOf('Symfony\Component\Intl\ResourceBundle\LocaleBundleInterface', Intl::getLocaleBundle());
}
public function testGetIcuVersionReadsTheVersionOfInstalledIcuLibrary()
{
$this->assertStringMatchesFormat('%d.%d', Intl::getIcuVersion());
}
public function testGetIcuDataVersionReadsTheVersionOfInstalledIcuData()
{
$this->assertStringMatchesFormat('%d.%d', Intl::getIcuDataVersion());
}
public function testGetIcuStubVersionReadsTheVersionOfBundledStubs()
{
$this->assertStringMatchesFormat('%d.%d', Intl::getIcuStubVersion());
}
public function testGetDataDirectoryReturnsThePathToIcuData()
{
$this->assertTrue(is_dir(Intl::getDataDirectory()));
}
/**
* @requires extension intl
*/
public function testLocaleAliasesAreLoaded()
{
\Locale::setDefault('zh_TW');
$countryNameZhTw = Intl::getRegionBundle()->getCountryName('AD');
\Locale::setDefault('zh_Hant_TW');
$countryNameHantZhTw = Intl::getRegionBundle()->getCountryName('AD');
\Locale::setDefault('zh');
$countryNameZh = Intl::getRegionBundle()->getCountryName('AD');
$this->assertSame($countryNameZhTw, $countryNameHantZhTw, 'zh_TW is an alias to zh_Hant_TW');
$this->assertNotSame($countryNameZh, $countryNameZhTw, 'zh_TW does not fall back to zh');
}
}