diff --git a/src/Composer/Package/Version/VersionParser.php b/src/Composer/Package/Version/VersionParser.php index 65791848b..54d7f09c0 100644 --- a/src/Composer/Package/Version/VersionParser.php +++ b/src/Composer/Package/Version/VersionParser.php @@ -12,6 +12,7 @@ namespace Composer\Package\Version; +use Composer\Repository\PlatformRepository; use Composer\Semver\VersionParser as SemverVersionParser; class VersionParser extends SemverVersionParser @@ -47,7 +48,7 @@ class VersionParser extends SemverVersionParser for ($i = 0, $count = count($pairs); $i < $count; $i++) { $pair = preg_replace('{^([^=: ]+)[=: ](.*)$}', '$1 $2', trim($pairs[$i])); - if (false === strpos($pair, ' ') && isset($pairs[$i + 1]) && false === strpos($pairs[$i + 1], '/')) { + if (false === strpos($pair, ' ') && isset($pairs[$i + 1]) && false === strpos($pairs[$i + 1], '/') && !preg_match(PlatformRepository::PLATFORM_PACKAGE_REGEX, $pairs[$i + 1])) { $pair .= ' '.$pairs[$i + 1]; $i++; } diff --git a/tests/Composer/Test/Package/Version/VersionParserTest.php b/tests/Composer/Test/Package/Version/VersionParserTest.php new file mode 100644 index 000000000..4ae2e2a25 --- /dev/null +++ b/tests/Composer/Test/Package/Version/VersionParserTest.php @@ -0,0 +1,37 @@ + + * Jordi Boggiano + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Composer\Test\Package\Version; + +use Composer\Package\Version\VersionParser; + +class VersionParserTest extends \PHPUnit_Framework_TestCase +{ + /** + * @dataProvider getParseNameVersionPairsData + */ + public function testParseNameVersionPairs($pairs, $result) + { + $versionParser = new VersionParser(); + + $this->assertSame($result, $versionParser->parseNameVersionPairs($pairs)); + } + + public function getParseNameVersionPairsData() + { + return array( + array(array('php:^7.0'), array(array('name' => 'php', 'version' => '^7.0'))), + array(array('php', '^7.0'), array(array('name' => 'php', 'version' => '^7.0'))), + array(array('php', 'ext-apcu'), array(array('name' => 'php'), array('name' => 'ext-apcu'))), + ); + } +}