From af420c120d22851618beb0f2d09f036fd1a307ce Mon Sep 17 00:00:00 2001 From: Remi Collet Date: Wed, 1 Jul 2015 13:20:48 +0200 Subject: [PATCH 1/6] avoid duplicated path with addPrefix --- .../Component/ClassLoader/ClassLoader.php | 14 +++++++---- .../ClassLoader/Tests/ClassLoaderTest.php | 24 ++++++++++++++++++- 2 files changed, 32 insertions(+), 6 deletions(-) diff --git a/src/Symfony/Component/ClassLoader/ClassLoader.php b/src/Symfony/Component/ClassLoader/ClassLoader.php index 6fcbb06327..1343bdb9a7 100644 --- a/src/Symfony/Component/ClassLoader/ClassLoader.php +++ b/src/Symfony/Component/ClassLoader/ClassLoader.php @@ -91,12 +91,16 @@ class ClassLoader return; } if (isset($this->prefixes[$prefix])) { - $this->prefixes[$prefix] = array_merge( - $this->prefixes[$prefix], - (array) $paths - ); + if (is_array($paths)) { + $this->prefixes[$prefix] = array_unique(array_merge( + $this->prefixes[$prefix], + $paths + )); + } else if (!in_array($paths, $this->prefixes[$prefix])) { + $this->prefixes[$prefix][] = $paths; + } } else { - $this->prefixes[$prefix] = (array) $paths; + $this->prefixes[$prefix] = array_unique((array) $paths); } } diff --git a/src/Symfony/Component/ClassLoader/Tests/ClassLoaderTest.php b/src/Symfony/Component/ClassLoader/Tests/ClassLoaderTest.php index 9dae537442..6be3ae6f91 100644 --- a/src/Symfony/Component/ClassLoader/Tests/ClassLoaderTest.php +++ b/src/Symfony/Component/ClassLoader/Tests/ClassLoaderTest.php @@ -76,14 +76,36 @@ class ClassLoaderTest extends \PHPUnit_Framework_TestCase ); } - public function testAddPrefix() + public function testAddPrefixSingle() { $loader = new ClassLoader(); $loader->addPrefix('Foo', __DIR__.DIRECTORY_SEPARATOR.'Fixtures'); $loader->addPrefix('Foo', __DIR__.DIRECTORY_SEPARATOR.'Fixtures'); $prefixes = $loader->getPrefixes(); $this->assertArrayHasKey('Foo', $prefixes); + $this->assertCount(1, $prefixes['Foo']); + } + + public function testAddPrefixesSingle() + { + $loader = new ClassLoader(); + $loader->addPrefixes(array('Foo' => array('foo', 'foo'))); + $loader->addPrefixes(array('Foo' => array('foo'))); + $prefixes = $loader->getPrefixes(); + $this->assertArrayHasKey('Foo', $prefixes); + $this->assertCount(1, $prefixes['Foo'], print_r($prefixes, true)); + } + + public function testAddPrefixMulti() + { + $loader = new ClassLoader(); + $loader->addPrefix('Foo', 'foo'); + $loader->addPrefix('Foo', 'bar'); + $prefixes = $loader->getPrefixes(); + $this->assertArrayHasKey('Foo', $prefixes); $this->assertCount(2, $prefixes['Foo']); + $this->assertContains('foo', $prefixes['Foo']); + $this->assertContains('bar', $prefixes['Foo']); } public function testUseIncludePath() From a83d525b902bc727539e122030934da3199eae21 Mon Sep 17 00:00:00 2001 From: Dane Powell Date: Fri, 26 Jun 2015 15:41:07 -0500 Subject: [PATCH 2/6] fixed #15118 [Filesystem] mirroring a symlink copies absolute file path --- src/Symfony/Component/Filesystem/Filesystem.php | 2 +- src/Symfony/Component/Filesystem/Tests/FilesystemTest.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Symfony/Component/Filesystem/Filesystem.php b/src/Symfony/Component/Filesystem/Filesystem.php index 636942a693..a934fd201f 100644 --- a/src/Symfony/Component/Filesystem/Filesystem.php +++ b/src/Symfony/Component/Filesystem/Filesystem.php @@ -402,7 +402,7 @@ class Filesystem } } else { if (is_link($file)) { - $this->symlink($file->getRealPath(), $target); + $this->symlink($file->getLinkTarget(), $target); } elseif (is_dir($file)) { $this->mkdir($target); } elseif (is_file($file)) { diff --git a/src/Symfony/Component/Filesystem/Tests/FilesystemTest.php b/src/Symfony/Component/Filesystem/Tests/FilesystemTest.php index 76f8fc0346..cd9adee97e 100644 --- a/src/Symfony/Component/Filesystem/Tests/FilesystemTest.php +++ b/src/Symfony/Component/Filesystem/Tests/FilesystemTest.php @@ -906,7 +906,7 @@ class FilesystemTest extends \PHPUnit_Framework_TestCase $this->assertTrue(is_dir($targetPath)); $this->assertFileEquals($sourcePath.'/nested/file1.txt', $targetPath.DIRECTORY_SEPARATOR.'link1/file1.txt'); $this->assertTrue(is_link($targetPath.DIRECTORY_SEPARATOR.'link1')); - $this->assertEquals($sourcePath.'nested', readlink($targetPath.DIRECTORY_SEPARATOR.'link1')); + $this->assertEquals('nested', readlink($targetPath.DIRECTORY_SEPARATOR.'link1')); } /** From 1c43a4e622050f476f31af9eb6c7f0366c14a47c Mon Sep 17 00:00:00 2001 From: Fabien Potencier Date: Tue, 6 Oct 2015 17:46:46 +0200 Subject: [PATCH 3/6] fixed CS --- src/Symfony/Component/ClassLoader/ClassLoader.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/ClassLoader/ClassLoader.php b/src/Symfony/Component/ClassLoader/ClassLoader.php index 1343bdb9a7..fc0a569485 100644 --- a/src/Symfony/Component/ClassLoader/ClassLoader.php +++ b/src/Symfony/Component/ClassLoader/ClassLoader.php @@ -96,7 +96,7 @@ class ClassLoader $this->prefixes[$prefix], $paths )); - } else if (!in_array($paths, $this->prefixes[$prefix])) { + } elseif (!in_array($paths, $this->prefixes[$prefix])) { $this->prefixes[$prefix][] = $paths; } } else { From 0f618596794f2040e590e77fd1b15c69c9b45cea Mon Sep 17 00:00:00 2001 From: Fabien Potencier Date: Tue, 6 Oct 2015 18:38:49 +0200 Subject: [PATCH 4/6] [Validator] added a failing test --- .../Tests/Constraints/UrlValidatorTest.php | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/Symfony/Component/Validator/Tests/Constraints/UrlValidatorTest.php b/src/Symfony/Component/Validator/Tests/Constraints/UrlValidatorTest.php index 5406b354ce..e496245c0a 100644 --- a/src/Symfony/Component/Validator/Tests/Constraints/UrlValidatorTest.php +++ b/src/Symfony/Component/Validator/Tests/Constraints/UrlValidatorTest.php @@ -35,6 +35,13 @@ class UrlValidatorTest extends AbstractConstraintValidatorTest $this->assertNoViolation(); } + public function testEmptyStringFromObjectIsValid() + { + $this->validator->validate(new EmailProvider(), new Url()); + + $this->assertNoViolation(); + } + /** * @expectedException \Symfony\Component\Validator\Exception\UnexpectedTypeException */ @@ -171,3 +178,11 @@ class UrlValidatorTest extends AbstractConstraintValidatorTest ); } } + +class EmailProvider +{ + public function __toString() + { + return ''; + } +} From e0910d9f493c6dfdc4d1f6ea5a152d3c65a2b1eb Mon Sep 17 00:00:00 2001 From: Victor Bocharsky Date: Sat, 26 Sep 2015 11:31:35 +0300 Subject: [PATCH 5/6] Fix URL validator failure with empty string --- .../Component/Validator/Constraints/UrlValidator.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Component/Validator/Constraints/UrlValidator.php b/src/Symfony/Component/Validator/Constraints/UrlValidator.php index 84bc3d1124..51ef8992c6 100644 --- a/src/Symfony/Component/Validator/Constraints/UrlValidator.php +++ b/src/Symfony/Component/Validator/Constraints/UrlValidator.php @@ -41,7 +41,7 @@ class UrlValidator extends ConstraintValidator */ public function validate($value, Constraint $constraint) { - if (null === $value || '' === $value) { + if (null === $value) { return; } @@ -50,6 +50,10 @@ class UrlValidator extends ConstraintValidator } $value = (string) $value; + if ('' === $value) { + return; + } + $pattern = sprintf(static::PATTERN, implode('|', $constraint->protocols)); if (!preg_match($pattern, $value)) { From 25fbcc3746510e938bd72a9267749524edac36f0 Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Wed, 7 Oct 2015 08:18:30 +0200 Subject: [PATCH 6/6] [ci] fix phpunit wrapper --- appveyor.yml | 24 ++++++++++++------------ phpunit | 4 ---- 2 files changed, 12 insertions(+), 16 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 48889d140a..a6f29ce6c1 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -13,7 +13,7 @@ init: - SET SYMFONY_DEPRECATIONS_HELPER=weak - SET PHP=1 - SET ANSICON=121x90 (121x90) - - SET PHP_INI_MATRIX=php.ini-min-ext php.ini-max-ext + - SET PHP_INI_MATRIX=php.ini-min php.ini-max install: - IF EXIST c:\php (SET PHP=0) ELSE (mkdir c:\php) @@ -31,18 +31,18 @@ install: - IF %PHP%==1 7z x php_memcache-3.0.8-5.3-nts-vc9-x86.zip -y > 7z.log - IF %PHP%==1 cd .. - IF %PHP%==1 echo @php %%~dp0composer.phar %%* > composer.bat - - IF %PHP%==1 copy /Y php.ini-development php.ini-min-ext - - IF %PHP%==1 echo date.timezone="UTC" >> php.ini-min-ext - - IF %PHP%==1 echo extension_dir=ext >> php.ini-min-ext - - IF %PHP%==1 echo extension=php_openssl.dll >> php.ini-min-ext - - IF %PHP%==1 copy /Y php.ini-min-ext php.ini-max-ext - - IF %PHP%==1 echo extension=php_apc.dll >> php.ini-max-ext - - IF %PHP%==1 echo extension=php_intl.dll >> php.ini-max-ext - - IF %PHP%==1 echo extension=php_mbstring.dll >> php.ini-max-ext - - IF %PHP%==1 echo extension=php_fileinfo.dll >> php.ini-max-ext - - IF %PHP%==1 echo extension=php_pdo_sqlite.dll >> php.ini-max-ext + - IF %PHP%==1 copy /Y php.ini-development php.ini-min + - IF %PHP%==1 echo date.timezone="UTC" >> php.ini-min + - IF %PHP%==1 echo extension_dir=ext >> php.ini-min + - IF %PHP%==1 echo extension=php_openssl.dll >> php.ini-min + - IF %PHP%==1 copy /Y php.ini-min php.ini-max + - IF %PHP%==1 echo extension=php_apc.dll >> php.ini-max + - IF %PHP%==1 echo extension=php_intl.dll >> php.ini-max + - IF %PHP%==1 echo extension=php_mbstring.dll >> php.ini-max + - IF %PHP%==1 echo extension=php_fileinfo.dll >> php.ini-max + - IF %PHP%==1 echo extension=php_pdo_sqlite.dll >> php.ini-max - appveyor DownloadFile https://getcomposer.org/composer.phar - - copy /Y php.ini-max-ext php.ini + - copy /Y php.ini-max php.ini - cd c:\projects\symfony - php phpunit install - IF %APPVEYOR_REPO_BRANCH%==master (SET COMPOSER_ROOT_VERSION=dev-master) ELSE (SET COMPOSER_ROOT_VERSION=%APPVEYOR_REPO_BRANCH%.x-dev) diff --git a/phpunit b/phpunit index d8bc15e26d..01d6e0f910 100755 --- a/phpunit +++ b/phpunit @@ -24,10 +24,6 @@ if (!file_exists($COMPOSER = __DIR__.'/composer.phar')) { $PHP = ProcessUtils::escapeArgument($PHP); $COMPOSER = $PHP.' '.ProcessUtils::escapeArgument($COMPOSER); -if (!(isset($argv[1]) && 'install' === $argv[1]) && !file_exists(__DIR__.'/vendor')) { - passthru("$COMPOSER update --no-progress --ansi"); -} - if (!file_exists("$PHPUNIT_DIR/phpunit-$PHPUNIT_VERSION/phpunit")) { // Build a standalone phpunit without symfony/yaml