From 3960edd64e27e5ba9dfee7bb8b81b37153c4f074 Mon Sep 17 00:00:00 2001 From: Nils Adermann Date: Wed, 14 Aug 2013 17:42:11 +0200 Subject: [PATCH] Turn EventDispatcher into generic solution handling plugins as well --- src/Composer/Autoload/AutoloadGenerator.php | 6 +- src/Composer/Composer.php | 8 +- src/Composer/Downloader/FileDownloader.php | 25 ++++-- src/Composer/Downloader/ZipDownloader.php | 5 +- src/Composer/EventDispatcher/Event.php | 72 +++++++++++++++++ .../EventDispatcher.php | 70 ++++++++++++++-- src/Composer/Factory.php | 22 ++--- src/Composer/Installer.php | 2 +- src/Composer/Plugin/PluginEvents.php | 31 +++++++ src/Composer/Plugin/PluginManager.php | 4 + .../Plugin/PrepareRemoteFilesystemEvent.php | 80 +++++++++++++++++++ src/Composer/Script/Event.php | 22 +---- .../Test/Autoload/AutoloadGeneratorTest.php | 6 +- .../Test/Downloader/FileDownloaderTest.php | 2 +- .../EventDispatcherTest.php | 25 +++--- tests/Composer/Test/InstallerTest.php | 4 +- .../Test/Plugin/PluginInstallerTest.php | 2 +- 17 files changed, 319 insertions(+), 67 deletions(-) create mode 100644 src/Composer/EventDispatcher/Event.php rename src/Composer/{Script => EventDispatcher}/EventDispatcher.php (72%) create mode 100644 src/Composer/Plugin/PluginEvents.php create mode 100644 src/Composer/Plugin/PrepareRemoteFilesystemEvent.php rename tests/Composer/Test/{Script => EventDispatcher}/EventDispatcherTest.php (83%) diff --git a/src/Composer/Autoload/AutoloadGenerator.php b/src/Composer/Autoload/AutoloadGenerator.php index b0fe9b232..88f0f4e68 100644 --- a/src/Composer/Autoload/AutoloadGenerator.php +++ b/src/Composer/Autoload/AutoloadGenerator.php @@ -13,12 +13,12 @@ namespace Composer\Autoload; use Composer\Config; +use Composer\EventDispatcher\EventDispatcher; use Composer\Installer\InstallationManager; use Composer\Package\AliasPackage; use Composer\Package\PackageInterface; use Composer\Repository\InstalledRepositoryInterface; use Composer\Util\Filesystem; -use Composer\Script\EventDispatcher; use Composer\Script\ScriptEvents; /** @@ -39,7 +39,7 @@ class AutoloadGenerator public function dump(Config $config, InstalledRepositoryInterface $localRepo, PackageInterface $mainPackage, InstallationManager $installationManager, $targetDir, $scanPsr0Packages = false, $suffix = '') { - $this->eventDispatcher->dispatch(ScriptEvents::PRE_AUTOLOAD_DUMP); + $this->eventDispatcher->dispatchScript(ScriptEvents::PRE_AUTOLOAD_DUMP); $filesystem = new Filesystem(); $filesystem->ensureDirectoryExists($config->get('vendor-dir')); @@ -191,7 +191,7 @@ EOF; fclose($targetLoader); unset($sourceLoader, $targetLoader); - $this->eventDispatcher->dispatch(ScriptEvents::POST_AUTOLOAD_DUMP); + $this->eventDispatcher->dispatchScript(ScriptEvents::POST_AUTOLOAD_DUMP); } public function buildPackageMap(InstallationManager $installationManager, PackageInterface $mainPackage, array $packages) diff --git a/src/Composer/Composer.php b/src/Composer/Composer.php index 02da7a3f5..e77316e4c 100644 --- a/src/Composer/Composer.php +++ b/src/Composer/Composer.php @@ -18,7 +18,7 @@ use Composer\Repository\RepositoryManager; use Composer\Installer\InstallationManager; use Composer\Plugin\PluginManager; use Composer\Downloader\DownloadManager; -use Composer\Script\EventDispatcher; +use Composer\EventDispatcher\EventDispatcher; use Composer\Autoload\AutoloadGenerator; /** @@ -65,7 +65,7 @@ class Composer private $config; /** - * @var Script\EventDispatcher + * @var EventDispatcher\EventDispatcher */ private $eventDispatcher; @@ -188,7 +188,7 @@ class Composer } /** - * @param Script\EventDispatcher $eventDispatcher + * @param EventDispatcher\EventDispatcher $eventDispatcher */ public function setEventDispatcher(EventDispatcher $eventDispatcher) { @@ -196,7 +196,7 @@ class Composer } /** - * @return Script\EventDispatcher + * @return EventDispatcher\EventDispatcher */ public function getEventDispatcher() { diff --git a/src/Composer/Downloader/FileDownloader.php b/src/Composer/Downloader/FileDownloader.php index 8ed0712bf..b9852d730 100644 --- a/src/Composer/Downloader/FileDownloader.php +++ b/src/Composer/Downloader/FileDownloader.php @@ -17,6 +17,9 @@ use Composer\Cache; use Composer\IO\IOInterface; use Composer\Package\PackageInterface; use Composer\Package\Version\VersionParser; +use Composer\Plugin\PluginEvents; +use Composer\Plugin\PrepareRemoteFilesystemEvent; +use Composer\EventDispatcher\EventDispatcher; use Composer\Util\Filesystem; use Composer\Util\GitHub; use Composer\Util\RemoteFilesystem; @@ -27,6 +30,7 @@ use Composer\Util\RemoteFilesystem; * @author Kirill chEbba Chebunin * @author Jordi Boggiano * @author François Pluchino + * @author Nils Adermann */ class FileDownloader implements DownloaderInterface { @@ -43,14 +47,16 @@ class FileDownloader implements DownloaderInterface * * @param IOInterface $io The IO instance * @param Config $config The config + * @param EventDispatcher $eventDispatcher The event dispatcher * @param Cache $cache Optional cache instance * @param RemoteFilesystem $rfs The remote filesystem * @param Filesystem $filesystem The filesystem */ - public function __construct(IOInterface $io, Config $config, Cache $cache = null, RemoteFilesystem $rfs = null, Filesystem $filesystem = null) + public function __construct(IOInterface $io, Config $config, EventDispatcher $eventDispatcher = null, Cache $cache = null, RemoteFilesystem $rfs = null, Filesystem $filesystem = null) { $this->io = $io; $this->config = $config; + $this->eventDispatcher = $eventDispatcher; $this->rfs = $rfs ?: new RemoteFilesystem($io); $this->filesystem = $filesystem ?: new Filesystem(); $this->cache = $cache; @@ -88,6 +94,12 @@ class FileDownloader implements DownloaderInterface $processedUrl = $this->processUrl($package, $url); $hostname = parse_url($processedUrl, PHP_URL_HOST); + $prepRfsEvent = new PrepareRemoteFilesystemEvent(PluginEvents::PREPARE_REMOTE_FILESYSTEM, $this->rfs, $processedUrl); + if ($this->eventDispatcher) { + $this->eventDispatcher->dispatch($prepRfsEvent->getName(), $prepRfsEvent); + } + $rfs = $prepRfsEvent->getRemoteFilesystem(); + if (strpos($hostname, '.github.com') === (strlen($hostname) - 11)) { $hostname = 'github.com'; } @@ -103,7 +115,7 @@ class FileDownloader implements DownloaderInterface $retries = 3; while ($retries--) { try { - $this->rfs->copy($hostname, $processedUrl, $fileName, $this->outputProgress); + $rfs->copy($hostname, $processedUrl, $fileName, $this->outputProgress); break; } catch (TransportException $e) { // if we got an http response with a proper code, then requesting again will probably not help, abort @@ -124,15 +136,18 @@ class FileDownloader implements DownloaderInterface $this->io->write(' Loading from cache'); } } catch (TransportException $e) { - if (in_array($e->getCode(), array(404, 403)) && 'github.com' === $hostname && !$this->io->hasAuthentication($hostname)) { + if (!in_array($e->getCode(), array(404, 403, 412))) { + throw $e; + } + if ('github.com' === $hostname && !$this->io->hasAuthentication($hostname)) { $message = "\n".'Could not fetch '.$processedUrl.', enter your GitHub credentials '.($e->getCode() === 404 ? 'to access private repos' : 'to go over the API rate limit'); - $gitHubUtil = new GitHub($this->io, $this->config, null, $this->rfs); + $gitHubUtil = new GitHub($this->io, $this->config, null, $rfs); if (!$gitHubUtil->authorizeOAuth($hostname) && (!$this->io->isInteractive() || !$gitHubUtil->authorizeOAuthInteractively($hostname, $message)) ) { throw $e; } - $this->rfs->copy($hostname, $processedUrl, $fileName, $this->outputProgress); + $rfs->copy($hostname, $processedUrl, $fileName, $this->outputProgress); } else { throw $e; } diff --git a/src/Composer/Downloader/ZipDownloader.php b/src/Composer/Downloader/ZipDownloader.php index 80bc60272..c2394543d 100644 --- a/src/Composer/Downloader/ZipDownloader.php +++ b/src/Composer/Downloader/ZipDownloader.php @@ -14,6 +14,7 @@ namespace Composer\Downloader; use Composer\Config; use Composer\Cache; +use Composer\EventDispatcher\EventDispatcher; use Composer\Util\ProcessExecutor; use Composer\IO\IOInterface; use ZipArchive; @@ -25,10 +26,10 @@ class ZipDownloader extends ArchiveDownloader { protected $process; - public function __construct(IOInterface $io, Config $config, Cache $cache = null, ProcessExecutor $process = null) + public function __construct(IOInterface $io, Config $config, EventDispatcher $eventDispatcher = null, Cache $cache = null, ProcessExecutor $process = null) { $this->process = $process ?: new ProcessExecutor($io); - parent::__construct($io, $config, $cache); + parent::__construct($io, $config, $eventDispatcher, $cache); } protected function extract($file, $path) diff --git a/src/Composer/EventDispatcher/Event.php b/src/Composer/EventDispatcher/Event.php new file mode 100644 index 000000000..c0a887372 --- /dev/null +++ b/src/Composer/EventDispatcher/Event.php @@ -0,0 +1,72 @@ + + * Jordi Boggiano + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Composer\EventDispatcher; + +use Composer\Composer; +use Composer\IO\IOInterface; + +/** + * The base event class + * + * @author Nils Adermann + */ +class Event +{ + /** + * @var string This event's name + */ + protected $name; + + /** + * @var boolean Whether the event should not be passed to more listeners + */ + private $propagationStopped = false; + + /** + * Constructor. + * + * @param string $name The event name + */ + public function __construct($name) + { + $this->name = $name; + } + + /** + * Returns the event's name. + * + * @return string The event name + */ + public function getName() + { + return $this->name; + } + + /** + * Checks if stopPropagation has been called + * + * @return boolean Whether propagation has been stopped + */ + public function isPropagationStopped() + { + return $this->propagationStopped; + } + + /** + * Prevents the event from being passed to further listeners + */ + public function stopPropagation() + { + $this->propagationStopped = true; + } +} diff --git a/src/Composer/Script/EventDispatcher.php b/src/Composer/EventDispatcher/EventDispatcher.php similarity index 72% rename from src/Composer/Script/EventDispatcher.php rename to src/Composer/EventDispatcher/EventDispatcher.php index 46d3d94d7..d15ceb212 100644 --- a/src/Composer/Script/EventDispatcher.php +++ b/src/Composer/EventDispatcher/EventDispatcher.php @@ -10,11 +10,14 @@ * file that was distributed with this source code. */ -namespace Composer\Script; +namespace Composer\EventDispatcher; use Composer\IO\IOInterface; use Composer\Composer; use Composer\DependencyResolver\Operation\OperationInterface; +use Composer\Script; +use Composer\Script\CommandEvent; +use Composer\Script\PackageEvent; use Composer\Util\ProcessExecutor; /** @@ -28,6 +31,7 @@ use Composer\Util\ProcessExecutor; * * @author François Pluchino * @author Jordi Boggiano + * @author Nils Adermann */ class EventDispatcher { @@ -50,16 +54,31 @@ class EventDispatcher $this->process = $process ?: new ProcessExecutor($io); } + /** + * Dispatch an event + * + * @param string $eventName An event name + * @param Event $event + */ + public function dispatch($eventName, Event $event = null) + { + if (null == $event) { + $event = new Event($eventName); + } + + $this->doDispatch($event); + } + /** * Dispatch a script event. * * @param string $eventName The constant in ScriptEvents * @param Event $event */ - public function dispatch($eventName, Event $event = null) + public function dispatchScript($eventName, Script\Event $event = null) { if (null == $event) { - $event = new Event($eventName, $this->composer, $this->io); + $event = new Script\Event($eventName, $this->composer, $this->io); } $this->doDispatch($event); @@ -100,7 +119,9 @@ class EventDispatcher $listeners = $this->getListeners($event); foreach ($listeners as $callable) { - if ($this->isPhpScript($callable)) { + if ((is_array($callable) && $is_callable($callable)) || $callable instanceof Closure) { + $callable($event); + } elseif ($this->isPhpScript($callable)) { $className = substr($callable, 0, strpos($callable, '::')); $methodName = substr($callable, strpos($callable, '::') + 2); @@ -127,6 +148,10 @@ class EventDispatcher throw new \RuntimeException('Error Output: '.$this->process->getErrorOutput(), $exitCode); } } + + if ($event->isPropagationStopped()) { + break; + } } } @@ -140,11 +165,46 @@ class EventDispatcher $className::$methodName($event); } + protected function addListener($eventName, $listener, $priority = 0) + { + $this->listeners[$eventName][$priority][] = $listener; + } + + protected function addSubscriber($subscriber) + { + foreach ($subscriber->getSubscribedEvents() as $eventName => $params) { + if (is_string($params)) { + $this->addListener($eventName, array($subscriber, $params)); + } elseif (is_string($params[0])) { + $this->addListener($eventName, array($subscriber, $params[0]), isset($params[1]) ? $params[1] : 0); + } else { + foreach ($params as $listener) { + $this->addListener($eventName, array($subscriber, $listener[0]), isset($listener[1]) ? $listener[1] : 0); + } + } + } + } + + protected function getListeners(Event $event) + { + $scriptListeners = $this->getScriptListeners($event); + + if (!isset($this->listeners[$event->getName()][0])) { + $this->listeners[$event->getName()][0] = array(); + } + krsort($this->listeners[$event->getName()]); + + $listeners = $this->listeners; + $listeners[$event->getName()][0] = array_merge($listeners[$event->getName()][0], $scriptListeners); + + return call_user_func_array('array_merge', $listeners[$event->getName()]); + } + /** * @param Event $event Event object * @return array Listeners */ - protected function getListeners(Event $event) + protected function getScriptListeners(Event $event) { $package = $this->composer->getPackage(); $scripts = $package->getScripts(); diff --git a/src/Composer/Factory.php b/src/Composer/Factory.php index 029833bf1..a7609469a 100644 --- a/src/Composer/Factory.php +++ b/src/Composer/Factory.php @@ -21,7 +21,7 @@ use Composer\Repository\RepositoryManager; use Composer\Util\ProcessExecutor; use Composer\Util\RemoteFilesystem; use Symfony\Component\Console\Formatter\OutputFormatterStyle; -use Composer\Script\EventDispatcher; +use Composer\EventDispatcher\EventDispatcher; use Composer\Autoload\AutoloadGenerator; use Composer\Package\Version\VersionParser; @@ -227,9 +227,6 @@ class Factory $loader = new Package\Loader\RootPackageLoader($rm, $config, $parser, new ProcessExecutor($io)); $package = $loader->load($localConfig); - // initialize download manager - $dm = $this->createDownloadManager($io, $config); - // initialize installation manager $im = $this->createInstallationManager(); @@ -238,11 +235,15 @@ class Factory $composer->setConfig($config); $composer->setPackage($package); $composer->setRepositoryManager($rm); - $composer->setDownloadManager($dm); $composer->setInstallationManager($im); // initialize event dispatcher $dispatcher = new EventDispatcher($composer, $io); + + // initialize download manager + $dm = $this->createDownloadManager($io, $config, $dispatcher); + + $composer->setDownloadManager($dm); $composer->setEventDispatcher($dispatcher); // initialize autoload generator @@ -304,9 +305,10 @@ class Factory /** * @param IO\IOInterface $io * @param Config $config + * @param EventDispatcher $eventDispatcher * @return Downloader\DownloadManager */ - public function createDownloadManager(IOInterface $io, Config $config) + public function createDownloadManager(IOInterface $io, Config $config, EventDispatcher $eventDispatcher = null) { $cache = null; if ($config->get('cache-files-ttl') > 0) { @@ -330,10 +332,10 @@ class Factory $dm->setDownloader('git', new Downloader\GitDownloader($io, $config)); $dm->setDownloader('svn', new Downloader\SvnDownloader($io, $config)); $dm->setDownloader('hg', new Downloader\HgDownloader($io, $config)); - $dm->setDownloader('zip', new Downloader\ZipDownloader($io, $config, $cache)); - $dm->setDownloader('tar', new Downloader\TarDownloader($io, $config, $cache)); - $dm->setDownloader('phar', new Downloader\PharDownloader($io, $config, $cache)); - $dm->setDownloader('file', new Downloader\FileDownloader($io, $config, $cache)); + $dm->setDownloader('zip', new Downloader\ZipDownloader($io, $config, $eventDispatcher, $cache)); + $dm->setDownloader('tar', new Downloader\TarDownloader($io, $config, $eventDispatcher, $cache)); + $dm->setDownloader('phar', new Downloader\PharDownloader($io, $config, $eventDispatcher, $cache)); + $dm->setDownloader('file', new Downloader\FileDownloader($io, $config, $eventDispatcher, $cache)); return $dm; } diff --git a/src/Composer/Installer.php b/src/Composer/Installer.php index 1d3ec9255..aec6e55a7 100644 --- a/src/Composer/Installer.php +++ b/src/Composer/Installer.php @@ -24,6 +24,7 @@ use Composer\DependencyResolver\Rule; use Composer\DependencyResolver\Solver; use Composer\DependencyResolver\SolverProblemsException; use Composer\Downloader\DownloadManager; +use Composer\EventDispatcher\EventDispatcher; use Composer\Installer\InstallationManager; use Composer\Config; use Composer\Installer\NoopInstaller; @@ -41,7 +42,6 @@ use Composer\Repository\InstalledFilesystemRepository; use Composer\Repository\PlatformRepository; use Composer\Repository\RepositoryInterface; use Composer\Repository\RepositoryManager; -use Composer\Script\EventDispatcher; use Composer\Script\ScriptEvents; /** diff --git a/src/Composer/Plugin/PluginEvents.php b/src/Composer/Plugin/PluginEvents.php new file mode 100644 index 000000000..bfdfba3dd --- /dev/null +++ b/src/Composer/Plugin/PluginEvents.php @@ -0,0 +1,31 @@ + + * Jordi Boggiano + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Composer\Plugin; + +/** + * The Plugin Events. + * + * @author Nils Adermann + */ +class PluginEvents +{ + /** + * The PREPARE_REMOTE_FILESYSTEM event occurs before downloading a file + * + * The event listener method receives a + * Composer\Plugin\PrepareRemoteFilesystemEvent instance. + * + * @var string + */ + const PREPARE_REMOTE_FILESYSTEM = 'prepare-remote-filesystem'; +} diff --git a/src/Composer/Plugin/PluginManager.php b/src/Composer/Plugin/PluginManager.php index 24e4890ac..1d424627a 100644 --- a/src/Composer/Plugin/PluginManager.php +++ b/src/Composer/Plugin/PluginManager.php @@ -64,6 +64,10 @@ class PluginManager { $this->plugins[] = $plugin; $plugin->activate($this->composer); + + if ($plugin instanceof \Symfony\Component\EventDispatcher\EventSubscriberInterface) { + $this->composer->getPluginEventDispatcher()->addSubscriber($plugin); + } } public function getPlugins() diff --git a/src/Composer/Plugin/PrepareRemoteFilesystemEvent.php b/src/Composer/Plugin/PrepareRemoteFilesystemEvent.php new file mode 100644 index 000000000..91b0543f3 --- /dev/null +++ b/src/Composer/Plugin/PrepareRemoteFilesystemEvent.php @@ -0,0 +1,80 @@ + + * Jordi Boggiano + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Composer\Plugin; + +use Composer\Composer; +use Composer\IO\IOInterface; +use Composer\EventDispatcher\Event; +use Composer\Util\RemoteFilesystem; + +/** + * The Prepare Remote Filesystem Event. + * + * @author Nils Adermann + */ +class PrepareRemoteFilesystemEvent extends Event +{ + /** + * @var RemoteFilesystem + */ + private $rfs; + + /** + * @var string + */ + private $processedUrl; + + /** + * Constructor. + * + * @param string $name The event name + * @param Composer $composer The composer object + * @param IOInterface $io The IOInterface object + * @param boolean $devMode Whether or not we are in dev mode + * @param OperationInterface $operation The operation object + */ + public function __construct($name, RemoteFilesystem $rfs, $processedUrl) + { + parent::__construct($name); + $this->rfs = $rfs; + $this->processedUrl = $processedUrl; + } + + /** + * Returns the remote filesystem + * + * @return OperationInterface + */ + public function getRemoteFilesystem() + { + return $this->rfs; + } + + /** + * Sets the remote filesystem + */ + public function setRemoteFilesystem(RemoteFilesystem $rfs) + { + $this->rfs = $rfs; + } + + /** + * Retrieves the processed URL this remote filesystem will be used for + * + * @return string + */ + public function getProcessedUrl() + { + return $this->processedUrl; + } +} diff --git a/src/Composer/Script/Event.php b/src/Composer/Script/Event.php index cafea2948..40b109b2d 100644 --- a/src/Composer/Script/Event.php +++ b/src/Composer/Script/Event.php @@ -16,17 +16,13 @@ use Composer\Composer; use Composer\IO\IOInterface; /** - * The base event class + * The script event class * * @author François Pluchino + * @author Nils Adermann */ -class Event +class Event extends \Composer\EventDispatcher\Event { - /** - * @var string This event's name - */ - private $name; - /** * @var Composer The composer instance */ @@ -52,22 +48,12 @@ class Event */ public function __construct($name, Composer $composer, IOInterface $io, $devMode = false) { - $this->name = $name; + parent::__construct($name); $this->composer = $composer; $this->io = $io; $this->devMode = $devMode; } - /** - * Returns the event's name. - * - * @return string The event name - */ - public function getName() - { - return $this->name; - } - /** * Returns the composer instance. * diff --git a/tests/Composer/Test/Autoload/AutoloadGeneratorTest.php b/tests/Composer/Test/Autoload/AutoloadGeneratorTest.php index dc1fa529e..9955f314f 100644 --- a/tests/Composer/Test/Autoload/AutoloadGeneratorTest.php +++ b/tests/Composer/Test/Autoload/AutoloadGeneratorTest.php @@ -72,7 +72,7 @@ class AutoloadGeneratorTest extends TestCase })); $this->repository = $this->getMock('Composer\Repository\InstalledRepositoryInterface'); - $this->eventDispatcher = $this->getMockBuilder('Composer\Script\EventDispatcher') + $this->eventDispatcher = $this->getMockBuilder('Composer\EventDispatcher\EventDispatcher') ->disableOriginalConstructor() ->getMock(); @@ -626,12 +626,12 @@ EOF; { $this->eventDispatcher ->expects($this->at(0)) - ->method('dispatch') + ->method('dispatchScript') ->with(ScriptEvents::PRE_AUTOLOAD_DUMP, false); $this->eventDispatcher ->expects($this->at(1)) - ->method('dispatch') + ->method('dispatchScript') ->with(ScriptEvents::POST_AUTOLOAD_DUMP, false); $package = new Package('a', '1.0', '1.0'); diff --git a/tests/Composer/Test/Downloader/FileDownloaderTest.php b/tests/Composer/Test/Downloader/FileDownloaderTest.php index 99dcaab18..c91798120 100644 --- a/tests/Composer/Test/Downloader/FileDownloaderTest.php +++ b/tests/Composer/Test/Downloader/FileDownloaderTest.php @@ -23,7 +23,7 @@ class FileDownloaderTest extends \PHPUnit_Framework_TestCase $config = $config ?: $this->getMock('Composer\Config'); $rfs = $rfs ?: $this->getMockBuilder('Composer\Util\RemoteFilesystem')->disableOriginalConstructor()->getMock(); - return new FileDownloader($io, $config, null, $rfs); + return new FileDownloader($io, $config, null, null, $rfs); } /** diff --git a/tests/Composer/Test/Script/EventDispatcherTest.php b/tests/Composer/Test/EventDispatcher/EventDispatcherTest.php similarity index 83% rename from tests/Composer/Test/Script/EventDispatcherTest.php rename to tests/Composer/Test/EventDispatcher/EventDispatcherTest.php index cd8f8e76f..7a15679d1 100644 --- a/tests/Composer/Test/Script/EventDispatcherTest.php +++ b/tests/Composer/Test/EventDispatcher/EventDispatcherTest.php @@ -10,11 +10,12 @@ * file that was distributed with this source code. */ -namespace Composer\Test\Script; +namespace Composer\Test\EventDispatcher; +use Composer\EventDispatcher\Event; +use Composer\EventDispatcher\EventDispatcher; use Composer\Test\TestCase; -use Composer\Script\Event; -use Composer\Script\EventDispatcher; +use Composer\Script; use Composer\Util\ProcessExecutor; class EventDispatcherTest extends TestCase @@ -26,12 +27,12 @@ class EventDispatcherTest extends TestCase { $io = $this->getMock('Composer\IO\IOInterface'); $dispatcher = $this->getDispatcherStubForListenersTest(array( - "Composer\Test\Script\EventDispatcherTest::call" + "Composer\Test\EventDispatcher\EventDispatcherTest::call" ), $io); $io->expects($this->once()) ->method('write') - ->with('Script Composer\Test\Script\EventDispatcherTest::call handling the post-install-cmd event terminated with an exception'); + ->with('Script Composer\Test\EventDispatcher\EventDispatcherTest::call handling the post-install-cmd event terminated with an exception'); $dispatcher->dispatchCommandEvent("post-install-cmd", false); } @@ -43,7 +44,7 @@ class EventDispatcherTest extends TestCase public function testDispatcherCanExecuteSingleCommandLineScript($command) { $process = $this->getMock('Composer\Util\ProcessExecutor'); - $dispatcher = $this->getMockBuilder('Composer\Script\EventDispatcher') + $dispatcher = $this->getMockBuilder('Composer\EventDispatcher\EventDispatcher') ->setConstructorArgs(array( $this->getMock('Composer\Composer'), $this->getMock('Composer\IO\IOInterface'), @@ -68,7 +69,7 @@ class EventDispatcherTest extends TestCase public function testDispatcherCanExecuteCliAndPhpInSameEventScriptStack() { $process = $this->getMock('Composer\Util\ProcessExecutor'); - $dispatcher = $this->getMockBuilder('Composer\Script\EventDispatcher') + $dispatcher = $this->getMockBuilder('Composer\EventDispatcher\EventDispatcher') ->setConstructorArgs(array( $this->getMock('Composer\Composer'), $this->getMock('Composer\IO\IOInterface'), @@ -86,7 +87,7 @@ class EventDispatcherTest extends TestCase $listeners = array( 'echo -n foo', - 'Composer\\Test\\Script\\EventDispatcherTest::someMethod', + 'Composer\\Test\\EventDispatcher\\EventDispatcherTest::someMethod', 'echo -n bar', ); $dispatcher->expects($this->atLeastOnce()) @@ -95,7 +96,7 @@ class EventDispatcherTest extends TestCase $dispatcher->expects($this->once()) ->method('executeEventPhpScript') - ->with('Composer\Test\Script\EventDispatcherTest', 'someMethod') + ->with('Composer\Test\EventDispatcher\EventDispatcherTest', 'someMethod') ->will($this->returnValue(true)); $dispatcher->dispatchCommandEvent("post-install-cmd", false); @@ -103,7 +104,7 @@ class EventDispatcherTest extends TestCase private function getDispatcherStubForListenersTest($listeners, $io) { - $dispatcher = $this->getMockBuilder('Composer\Script\EventDispatcher') + $dispatcher = $this->getMockBuilder('Composer\EventDispatcher\EventDispatcher') ->setConstructorArgs(array( $this->getMock('Composer\Composer'), $io, @@ -129,7 +130,7 @@ class EventDispatcherTest extends TestCase public function testDispatcherOutputsCommands() { - $dispatcher = $this->getMockBuilder('Composer\Script\EventDispatcher') + $dispatcher = $this->getMockBuilder('Composer\EventDispatcher\EventDispatcher') ->setConstructorArgs(array( $this->getMock('Composer\Composer'), $this->getMock('Composer\IO\IOInterface'), @@ -150,7 +151,7 @@ class EventDispatcherTest extends TestCase public function testDispatcherOutputsErrorOnFailedCommand() { - $dispatcher = $this->getMockBuilder('Composer\Script\EventDispatcher') + $dispatcher = $this->getMockBuilder('Composer\EventDispatcher\EventDispatcher') ->setConstructorArgs(array( $this->getMock('Composer\Composer'), $io = $this->getMock('Composer\IO\IOInterface'), diff --git a/tests/Composer/Test/InstallerTest.php b/tests/Composer/Test/InstallerTest.php index 7c3791791..e3ec2b927 100644 --- a/tests/Composer/Test/InstallerTest.php +++ b/tests/Composer/Test/InstallerTest.php @@ -66,7 +66,7 @@ class InstallerTest extends TestCase $locker = $this->getMockBuilder('Composer\Package\Locker')->disableOriginalConstructor()->getMock(); $installationManager = new InstallationManagerMock(); - $eventDispatcher = $this->getMockBuilder('Composer\Script\EventDispatcher')->disableOriginalConstructor()->getMock(); + $eventDispatcher = $this->getMockBuilder('Composer\EventDispatcher\EventDispatcher')->disableOriginalConstructor()->getMock(); $autoloadGenerator = $this->getMockBuilder('Composer\Autoload\AutoloadGenerator')->disableOriginalConstructor()->getMock(); $installer = new Installer($io, $config, clone $rootPackage, $downloadManager, $repositoryManager, $locker, $installationManager, $eventDispatcher, $autoloadGenerator); @@ -189,7 +189,7 @@ class InstallerTest extends TestCase $locker = new Locker($io, $lockJsonMock, $repositoryManager, $composer->getInstallationManager(), md5(json_encode($composerConfig))); $composer->setLocker($locker); - $eventDispatcher = $this->getMockBuilder('Composer\Script\EventDispatcher')->disableOriginalConstructor()->getMock(); + $eventDispatcher = $this->getMockBuilder('Composer\EventDispatcher\EventDispatcher')->disableOriginalConstructor()->getMock(); $autoloadGenerator = $this->getMock('Composer\Autoload\AutoloadGenerator', array(), array($eventDispatcher)); $composer->setAutoloadGenerator($autoloadGenerator); $composer->setEventDispatcher($eventDispatcher); diff --git a/tests/Composer/Test/Plugin/PluginInstallerTest.php b/tests/Composer/Test/Plugin/PluginInstallerTest.php index ab5696af8..8734993ea 100644 --- a/tests/Composer/Test/Plugin/PluginInstallerTest.php +++ b/tests/Composer/Test/Plugin/PluginInstallerTest.php @@ -53,7 +53,7 @@ class PluginInstallerTest extends \PHPUnit_Framework_TestCase $this->io = $this->getMock('Composer\IO\IOInterface'); - $dispatcher = $this->getMockBuilder('Composer\Script\EventDispatcher')->disableOriginalConstructor()->getMock(); + $dispatcher = $this->getMockBuilder('Composer\EventDispatcher\EventDispatcher')->disableOriginalConstructor()->getMock(); $this->autoloadGenerator = new AutoloadGenerator($dispatcher); $this->composer = new Composer();