Ver código fonte

Refactor based on code review

- Move the version api getter to the PluginManager And make it such that it can be mocked, but not pollute the public interface. That means "protected" visibility.
- The plugin api version constant should still be used throughout the code.
- Use different fixtures class names
- Use regex possessive quantifiers for performance
- Use full words for readability
nevvermind 9 anos atrás
pai
commit
3032f0a538

+ 0 - 10
src/Composer/Config.php

@@ -341,14 +341,4 @@ class Config
 
         return false;
     }
-
-    /**
-     * Returns the version of the internal composer-plugin-api package.
-     *
-     * @return string
-     */
-    public function getPluginApiVersion()
-    {
-        return PluginInterface::PLUGIN_API_VERSION;
-    }
 }

+ 1 - 1
src/Composer/Package/Version/VersionParser.php

@@ -246,7 +246,7 @@ class VersionParser
     private function isOldStylePluginApiVersion($requiredPluginApiVersion)
     {
         // catch "1.0", "1.0.0", "1.0.0.0" etc.
-        return (bool) preg_match('#^1(\.0)+$#', trim($requiredPluginApiVersion));
+        return (bool) preg_match('#^1(\.0)++$#', trim($requiredPluginApiVersion));
     }
 
     /**

+ 0 - 1
src/Composer/Plugin/PluginInterface.php

@@ -26,7 +26,6 @@ interface PluginInterface
      * Version number of the fake composer-plugin-api package
      *
      * @var string
-     * @deprecated Use \Composer\Config::getPluginApiVersion() instead.
      */
     const PLUGIN_API_VERSION = '1.0.0';
 

+ 15 - 4
src/Composer/Plugin/PluginManager.php

@@ -130,10 +130,11 @@ class PluginManager
                     throw new \RuntimeException("Plugin ".$package->getName()." is missing a require statement for a version of the composer-plugin-api package.");
                 }
 
-                $currPluginApiVersion = $this->composer->getConfig()->getPluginApiVersion();
-                $currPluginApiConstraint = new VersionConstraint('==', $this->versionParser->normalize($currPluginApiVersion));
-                if (!$requiresComposer->matches($currPluginApiConstraint)) {
-                    $this->io->writeError('<warning>The "' . $package->getName() . '" plugin was skipped because it requires a Plugin API version ("' . $requiresComposer->getPrettyString() . '") that does not match your Composer installation ("' . $currPluginApiVersion . '"). You may need to run composer update with the "--no-plugins" option.</warning>');
+                $currentPluginApiVersion    = $this->getPluginApiVersion();
+                $currentPluginApiConstraint = new VersionConstraint('==', $this->versionParser->normalize($currentPluginApiVersion));
+
+                if (!$requiresComposer->matches($currentPluginApiConstraint)) {
+                    $this->io->writeError('<warning>The "' . $package->getName() . '" plugin was skipped because it requires a Plugin API version ("' . $requiresComposer->getPrettyString() . '") that does not match your Composer installation ("' . $currentPluginApiVersion . '"). You may need to run composer update with the "--no-plugins" option.</warning>');
                     continue;
                 }
 
@@ -276,4 +277,14 @@ class PluginManager
 
         return $this->globalComposer->getInstallationManager()->getInstallPath($package);
     }
+
+    /**
+     * Returns the version of the internal composer-plugin-api package.
+     *
+     * @return string
+     */
+    protected function getPluginApiVersion()
+    {
+        return PluginInterface::PLUGIN_API_VERSION;
+    }
 }

+ 1 - 25
src/Composer/Repository/PlatformRepository.php

@@ -34,11 +34,6 @@ class PlatformRepository extends ArrayRepository
      */
     private $overrides;
 
-    /**
-     * @var Config
-     */
-    private $config;
-
     public function __construct(array $packages = array(), array $overrides = array())
     {
         parent::__construct($packages);
@@ -68,7 +63,7 @@ class PlatformRepository extends ArrayRepository
             parent::addPackage($package);
         }
 
-        $prettyVersion = $this->getConfig()->getPluginApiVersion();
+        $prettyVersion = PluginInterface::PLUGIN_API_VERSION;
         $version = $versionParser->normalize($prettyVersion);
         $composerPluginApi = new CompletePackage('composer-plugin-api', $version, $prettyVersion);
         $composerPluginApi->setDescription('The Composer Plugin API');
@@ -216,23 +211,4 @@ class PlatformRepository extends ArrayRepository
     {
         return 'ext-' . str_replace(' ', '-', $name);
     }
-
-    /**
-     * @param Config $config
-     */
-    public function setConfig(Config $config)
-    {
-        $this->config = $config;
-    }
-
-    /**
-     * @return Config
-     */
-    public function getConfig()
-    {
-        if (!$this->config) {
-            $this->config = new Config;
-        }
-        return $this->config;
-    }
 }

+ 1 - 1
tests/Composer/Test/Plugin/Fixtures/plugin-v5/Installer/Plugin.php → tests/Composer/Test/Plugin/Fixtures/plugin-v5/Installer/Plugin5.php

@@ -6,7 +6,7 @@ use Composer\Composer;
 use Composer\IO\IOInterface;
 use Composer\Plugin\PluginInterface;
 
-class Plugin implements PluginInterface
+class Plugin5 implements PluginInterface
 {
     public function activate(Composer $composer, IOInterface $io)
     {

+ 1 - 1
tests/Composer/Test/Plugin/Fixtures/plugin-v5/composer.json

@@ -4,7 +4,7 @@
     "type": "composer-plugin",
     "autoload": { "psr-0": { "Installer": "" } },
     "extra": {
-        "class": "Installer\\Plugin"
+        "class": "Installer\\Plugin5"
     },
     "require": {
         "composer-plugin-api": "*"

+ 1 - 1
tests/Composer/Test/Plugin/Fixtures/plugin-v6/Installer/Plugin.php → tests/Composer/Test/Plugin/Fixtures/plugin-v6/Installer/Plugin6.php

@@ -6,7 +6,7 @@ use Composer\Composer;
 use Composer\IO\IOInterface;
 use Composer\Plugin\PluginInterface;
 
-class Plugin implements PluginInterface
+class Plugin6 implements PluginInterface
 {
     public function activate(Composer $composer, IOInterface $io)
     {

+ 2 - 2
tests/Composer/Test/Plugin/Fixtures/plugin-v6/composer.json

@@ -1,10 +1,10 @@
 {
-    "name": "plugin-v5",
+    "name": "plugin-v6",
     "version": "1.0.0",
     "type": "composer-plugin",
     "autoload": { "psr-0": { "Installer": "" } },
     "extra": {
-        "class": "Installer\\Plugin"
+        "class": "Installer\\Plugin6"
     },
     "require": {
         "composer-plugin-api": "~1.2"

+ 1 - 1
tests/Composer/Test/Plugin/Fixtures/plugin-v7/Installer/Plugin.php → tests/Composer/Test/Plugin/Fixtures/plugin-v7/Installer/Plugin7.php

@@ -6,7 +6,7 @@ use Composer\Composer;
 use Composer\IO\IOInterface;
 use Composer\Plugin\PluginInterface;
 
-class Plugin implements PluginInterface
+class Plugin7 implements PluginInterface
 {
     public function activate(Composer $composer, IOInterface $io)
     {

+ 2 - 2
tests/Composer/Test/Plugin/Fixtures/plugin-v7/composer.json

@@ -1,10 +1,10 @@
 {
-    "name": "plugin-v5",
+    "name": "plugin-v7",
     "version": "1.0.0",
     "type": "composer-plugin",
     "autoload": { "psr-0": { "Installer": "" } },
     "extra": {
-        "class": "Installer\\Plugin"
+        "class": "Installer\\Plugin7"
     },
     "require": {
         "composer-plugin-api": ">=3.0.0 <5.5"

+ 9 - 13
tests/Composer/Test/Plugin/PluginInstallerTest.php

@@ -222,19 +222,15 @@ class PluginInstallerTest extends TestCase
     private function setPluginApiVersionWithPlugins($newPluginApiVersion, array $plugins = array())
     {
         // reset the plugin manager's installed plugins
-        $this->pm = new PluginManager($this->io, $this->composer);
-
-        /** @var \PHPUnit_Framework_MockObject_MockObject $config */
-        $config = $this->getMock('Composer\Config', array('getPluginApiVersion'));
-
-        // mock Config to return whatever Plugin API version we wish
-        $config->expects($this->any())
-               ->method('getPluginApiVersion')
-               ->will($this->returnValue($newPluginApiVersion));
-
-        // transfer the defaults in our Config mock and set it
-        $config->merge($this->composer->getConfig()->raw());
-        $this->composer->setConfig($config);
+        $this->pm = $this->getMockBuilder('Composer\Plugin\PluginManager')
+                         ->setMethods(array('getPluginApiVersion'))
+                         ->setConstructorArgs(array($this->io, $this->composer))
+                         ->getMock();
+
+        // mock the Plugin API version
+        $this->pm->expects($this->any())
+                 ->method('getPluginApiVersion')
+                 ->will($this->returnValue($newPluginApiVersion));
 
         $plugApiInternalPackage = $this->getPackage(
             'composer-plugin-api',