Chris@0: fs = new Filesystem; Chris@0: Chris@0: $this->composer = new Composer(); Chris@0: $this->config = new Config(); Chris@0: $this->composer->setConfig($this->config); Chris@0: Chris@0: $this->vendorDir = realpath(sys_get_temp_dir()) . DIRECTORY_SEPARATOR . 'baton-test-vendor'; Chris@0: $this->ensureDirectoryExistsAndClear($this->vendorDir); Chris@0: Chris@0: $this->binDir = realpath(sys_get_temp_dir()) . DIRECTORY_SEPARATOR . 'baton-test-bin'; Chris@0: $this->ensureDirectoryExistsAndClear($this->binDir); Chris@0: Chris@0: $this->config->merge(array( Chris@0: 'config' => array( Chris@0: 'vendor-dir' => $this->vendorDir, Chris@0: 'bin-dir' => $this->binDir, Chris@0: ), Chris@0: )); Chris@0: Chris@0: $this->dm = $this->getMockBuilder('Composer\Downloader\DownloadManager') Chris@0: ->disableOriginalConstructor() Chris@0: ->getMock(); Chris@0: $this->composer->setDownloadManager($this->dm); Chris@0: Chris@0: $this->repository = $this->getMock('Composer\Repository\InstalledRepositoryInterface'); Chris@0: $this->io = $this->getMock('Composer\IO\IOInterface'); Chris@0: } Chris@0: Chris@0: /** Chris@0: * tearDown Chris@0: * Chris@0: * @return void Chris@0: */ Chris@0: public function tearDown() Chris@0: { Chris@0: $this->fs->removeDirectory($this->vendorDir); Chris@0: $this->fs->removeDirectory($this->binDir); Chris@0: } Chris@0: Chris@0: /** Chris@0: * testSupports Chris@0: * Chris@0: * @return void Chris@0: * Chris@0: * @dataProvider dataForTestSupport Chris@0: */ Chris@0: public function testSupports($type, $expected) Chris@0: { Chris@0: $installer = new Installer($this->io, $this->composer); Chris@0: $this->assertSame($expected, $installer->supports($type), sprintf('Failed to show support for %s', $type)); Chris@0: } Chris@0: Chris@0: /** Chris@0: * dataForTestSupport Chris@0: */ Chris@0: public function dataForTestSupport() Chris@0: { Chris@0: return array( Chris@0: array('agl-module', true), Chris@0: array('aimeos-extension', true), Chris@0: array('annotatecms-module', true), Chris@0: array('annotatecms-component', true), Chris@0: array('annotatecms-service', true), Chris@0: array('attogram-module', true), Chris@0: array('bitrix-module', true), Chris@0: array('bitrix-component', true), Chris@0: array('bitrix-theme', true), Chris@0: array('bonefish-package', true), Chris@0: array('cakephp', false), Chris@0: array('cakephp-', false), Chris@0: array('cakephp-app', false), Chris@0: array('cakephp-plugin', true), Chris@0: array('chef-cookbook', true), Chris@0: array('chef-role', true), Chris@0: array('cockpit-module', true), Chris@0: array('codeigniter-app', false), Chris@0: array('codeigniter-library', true), Chris@0: array('codeigniter-third-party', true), Chris@0: array('codeigniter-module', true), Chris@0: array('concrete5-block', true), Chris@0: array('concrete5-package', true), Chris@0: array('concrete5-theme', true), Chris@0: array('concrete5-core', true), Chris@0: array('concrete5-update', true), Chris@0: array('craft-plugin', true), Chris@0: array('croogo-plugin', true), Chris@0: array('croogo-theme', true), Chris@0: array('decibel-app', true), Chris@0: array('dokuwiki-plugin', true), Chris@0: array('dokuwiki-template', true), Chris@0: array('drupal-module', true), Chris@0: array('dolibarr-module', true), Chris@0: array('ee3-theme', true), Chris@0: array('ee3-addon', true), Chris@0: array('ee2-theme', true), Chris@0: array('ee2-addon', true), Chris@0: array('elgg-plugin', true), Chris@0: array('eliasis-module', true), Chris@0: array('ezplatform-assets', true), Chris@0: array('ezplatform-meta-assets', true), Chris@0: array('fuel-module', true), Chris@0: array('fuel-package', true), Chris@0: array('fuel-theme', true), Chris@0: array('fuelphp-component', true), Chris@0: array('hurad-plugin', true), Chris@0: array('hurad-theme', true), Chris@0: array('imagecms-template', true), Chris@0: array('imagecms-module', true), Chris@0: array('imagecms-library', true), Chris@0: array('itop-extension', true), Chris@0: array('joomla-library', true), Chris@0: array('kanboard-plugin', true), Chris@0: array('kirby-plugin', true), Chris@0: array('kohana-module', true), Chris@0: array('lms-plugin', true), Chris@0: array('lms-template', true), Chris@0: array('lms-document-template', true), Chris@0: array('lms-userpanel-module', true), Chris@0: array('laravel-library', true), Chris@0: array('lavalite-theme', true), Chris@0: array('lavalite-package', true), Chris@0: array('lithium-library', true), Chris@0: array('magento-library', true), Chris@0: array('mako-package', true), Chris@0: array('modxevo-snippet', true), Chris@0: array('modxevo-plugin', true), Chris@0: array('modxevo-module', true), Chris@0: array('modxevo-template', true), Chris@0: array('modxevo-lib', true), Chris@0: array('mediawiki-extension', true), Chris@0: array('mediawiki-skin', true), Chris@0: array('microweber-module', true), Chris@0: array('modulework-module', true), Chris@0: array('moodle-mod', true), Chris@0: array('october-module', true), Chris@0: array('october-plugin', true), Chris@0: array('piwik-plugin', true), Chris@0: array('phpbb-extension', true), Chris@0: array('pimcore-plugin', true), Chris@0: array('plentymarkets-plugin', true), Chris@0: array('ppi-module', true), Chris@0: array('prestashop-module', true), Chris@0: array('prestashop-theme', true), Chris@0: array('puppet-module', true), Chris@0: array('porto-container', true), Chris@0: array('radphp-bundle', true), Chris@0: array('redaxo-addon', true), Chris@0: array('redaxo-bestyle-plugin', true), Chris@0: array('reindex-theme', true), Chris@0: array('reindex-plugin', true), Chris@0: array('roundcube-plugin', true), Chris@0: array('shopware-backend-plugin', true), Chris@0: array('shopware-core-plugin', true), Chris@0: array('shopware-frontend-plugin', true), Chris@0: array('shopware-theme', true), Chris@0: array('shopware-plugin', true), Chris@0: array('shopware-frontend-theme', true), Chris@0: array('silverstripe-module', true), Chris@0: array('silverstripe-theme', true), Chris@0: array('smf-module', true), Chris@0: array('smf-theme', true), Chris@0: array('sydes-module', true), Chris@0: array('sydes-theme', true), Chris@0: array('symfony1-plugin', true), Chris@0: array('thelia-module', true), Chris@0: array('thelia-frontoffice-template', true), Chris@0: array('thelia-backoffice-template', true), Chris@0: array('thelia-email-template', true), Chris@0: array('tusk-task', true), Chris@0: array('tusk-asset', true), Chris@0: array('typo3-flow-plugin', true), Chris@0: array('typo3-cms-extension', true), Chris@0: array('userfrosting-sprinkle', true), Chris@0: array('vanilla-plugin', true), Chris@0: array('vanilla-theme', true), Chris@0: array('whmcs-gateway', true), Chris@0: array('wolfcms-plugin', true), Chris@0: array('wordpress-plugin', true), Chris@0: array('wordpress-core', false), Chris@0: array('yawik-module', true), Chris@0: array('zend-library', true), Chris@0: array('zikula-module', true), Chris@0: array('zikula-theme', true), Chris@0: array('kodicms-plugin', true), Chris@0: array('kodicms-media', true), Chris@0: array('phifty-bundle', true), Chris@0: array('phifty-library', true), Chris@0: array('phifty-framework', true), Chris@0: array('osclass-plugin', true), Chris@0: array('osclass-theme', true), Chris@0: array('osclass-language', true), Chris@0: ); Chris@0: } Chris@0: Chris@0: /** Chris@0: * testInstallPath Chris@0: * Chris@0: * @dataProvider dataForTestInstallPath Chris@0: */ Chris@0: public function testInstallPath($type, $path, $name, $version = '1.0.0') Chris@0: { Chris@0: $installer = new Installer($this->io, $this->composer); Chris@0: $package = new Package($name, $version, $version); Chris@0: Chris@0: $package->setType($type); Chris@0: $result = $installer->getInstallPath($package); Chris@0: $this->assertEquals($path, $result); Chris@0: } Chris@0: Chris@0: /** Chris@0: * dataFormTestInstallPath Chris@0: */ Chris@0: public function dataForTestInstallPath() Chris@0: { Chris@0: return array( Chris@0: array('agl-module', 'More/MyTestPackage/', 'agl/my_test-package'), Chris@0: array('aimeos-extension', 'ext/ai-test/', 'author/ai-test'), Chris@0: array('annotatecms-module', 'addons/modules/my_module/', 'vysinsky/my_module'), Chris@0: array('annotatecms-component', 'addons/components/my_component/', 'vysinsky/my_component'), Chris@0: array('annotatecms-service', 'addons/services/my_service/', 'vysinsky/my_service'), Chris@0: array('attogram-module', 'modules/my_module/', 'author/my_module'), Chris@0: array('bitrix-module', 'bitrix/modules/my_module/', 'author/my_module'), Chris@0: array('bitrix-component', 'bitrix/components/my_component/', 'author/my_component'), Chris@0: array('bitrix-theme', 'bitrix/templates/my_theme/', 'author/my_theme'), Chris@0: array('bitrix-d7-module', 'bitrix/modules/author.my_module/', 'author/my_module'), Chris@0: array('bitrix-d7-component', 'bitrix/components/author/my_component/', 'author/my_component'), Chris@0: array('bitrix-d7-template', 'bitrix/templates/author_my_template/', 'author/my_template'), Chris@0: array('bonefish-package', 'Packages/bonefish/package/', 'bonefish/package'), Chris@0: array('cakephp-plugin', 'Plugin/Ftp/', 'shama/ftp'), Chris@0: array('chef-cookbook', 'Chef/mre/my_cookbook/', 'mre/my_cookbook'), Chris@0: array('chef-role', 'Chef/roles/my_role/', 'mre/my_role'), Chris@0: array('cockpit-module', 'cockpit/modules/addons/My_module/', 'piotr-cz/cockpit-my_module'), Chris@0: array('codeigniter-library', 'application/libraries/my_package/', 'shama/my_package'), Chris@0: array('codeigniter-module', 'application/modules/my_package/', 'shama/my_package'), Chris@0: array('concrete5-block', 'application/blocks/concrete5_block/', 'remo/concrete5_block'), Chris@0: array('concrete5-package', 'packages/concrete5_package/', 'remo/concrete5_package'), Chris@0: array('concrete5-theme', 'application/themes/concrete5_theme/', 'remo/concrete5_theme'), Chris@0: array('concrete5-core', 'concrete/', 'concrete5/core'), Chris@0: array('concrete5-update', 'updates/concrete5/', 'concrete5/concrete5'), Chris@0: array('craft-plugin', 'craft/plugins/my_plugin/', 'mdcpepper/my_plugin'), Chris@0: array('croogo-plugin', 'Plugin/Sitemaps/', 'fahad19/sitemaps'), Chris@0: array('croogo-theme', 'View/Themed/Readable/', 'rchavik/readable'), Chris@0: array('decibel-app', 'app/someapp/', 'author/someapp'), Chris@0: array('dokuwiki-plugin', 'lib/plugins/someplugin/', 'author/someplugin'), Chris@0: array('dokuwiki-template', 'lib/tpl/sometemplate/', 'author/sometemplate'), Chris@0: array('dolibarr-module', 'htdocs/custom/my_module/', 'shama/my_module'), Chris@0: array('drupal-module', 'modules/my_module/', 'shama/my_module'), Chris@0: array('drupal-theme', 'themes/my_module/', 'shama/my_module'), Chris@0: array('drupal-profile', 'profiles/my_module/', 'shama/my_module'), Chris@0: array('drupal-drush', 'drush/my_module/', 'shama/my_module'), Chris@0: array('elgg-plugin', 'mod/sample_plugin/', 'test/sample_plugin'), Chris@0: array('eliasis-module', 'modules/my_module/', 'shama/my_module'), Chris@0: array('ee3-addon', 'system/user/addons/ee_theme/', 'author/ee_theme'), Chris@0: array('ee3-theme', 'themes/user/ee_package/', 'author/ee_package'), Chris@0: array('ee2-addon', 'system/expressionengine/third_party/ee_theme/', 'author/ee_theme'), Chris@0: array('ee2-theme', 'themes/third_party/ee_package/', 'author/ee_package'), Chris@0: array('ezplatform-assets', 'web/assets/ezplatform/ezplatform_comp/', 'author/ezplatform_comp'), Chris@0: array('ezplatform-meta-assets', 'web/assets/ezplatform/', 'author/ezplatform_comp'), Chris@0: array('fuel-module', 'fuel/app/modules/module/', 'fuel/module'), Chris@0: array('fuel-package', 'fuel/packages/orm/', 'fuel/orm'), Chris@0: array('fuel-theme', 'fuel/app/themes/theme/', 'fuel/theme'), Chris@0: array('fuelphp-component', 'components/demo/', 'fuelphp/demo'), Chris@0: array('hurad-plugin', 'plugins/Akismet/', 'atkrad/akismet'), Chris@0: array('hurad-theme', 'plugins/Hurad2013/', 'atkrad/Hurad2013'), Chris@0: array('imagecms-template', 'templates/my_template/', 'shama/my_template'), Chris@0: array('imagecms-module', 'application/modules/my_module/', 'shama/my_module'), Chris@0: array('imagecms-library', 'application/libraries/my_library/', 'shama/my_library'), Chris@0: array('itop-extension', 'extensions/my_extension/', 'shama/my_extension'), Chris@0: array('joomla-plugin', 'plugins/my_plugin/', 'shama/my_plugin'), Chris@0: array('kanboard-plugin', 'plugins/my_plugin/', 'shama/my_plugin'), Chris@0: array('kirby-plugin', 'site/plugins/my_plugin/', 'shama/my_plugin'), Chris@0: array('kohana-module', 'modules/my_package/', 'shama/my_package'), Chris@0: array('lms-plugin', 'plugins/MyPackage/', 'shama/MyPackage'), Chris@0: array('lms-plugin', 'plugins/MyPackage/', 'shama/my_package'), Chris@0: array('lms-template', 'templates/MyPackage/', 'shama/MyPackage'), Chris@0: array('lms-template', 'templates/MyPackage/', 'shama/my_package'), Chris@0: array('lms-document-template', 'documents/templates/MyPackage/', 'shama/MyPackage'), Chris@0: array('lms-document-template', 'documents/templates/MyPackage/', 'shama/my_package'), Chris@0: array('lms-userpanel-module', 'userpanel/modules/MyPackage/', 'shama/MyPackage'), Chris@0: array('lms-userpanel-module', 'userpanel/modules/MyPackage/', 'shama/my_package'), Chris@0: array('laravel-library', 'libraries/my_package/', 'shama/my_package'), Chris@0: array('lavalite-theme', 'public/themes/my_theme/', 'shama/my_theme'), Chris@0: array('lavalite-package', 'packages/my_group/my_package/', 'my_group/my_package'), Chris@0: array('lithium-library', 'libraries/li3_test/', 'user/li3_test'), Chris@0: array('magento-library', 'lib/foo/', 'test/foo'), Chris@0: array('modxevo-snippet', 'assets/snippets/my_snippet/', 'shama/my_snippet'), Chris@0: array('modxevo-plugin', 'assets/plugins/my_plugin/', 'shama/my_plugin'), Chris@0: array('modxevo-module', 'assets/modules/my_module/', 'shama/my_module'), Chris@0: array('modxevo-template', 'assets/templates/my_template/', 'shama/my_template'), Chris@0: array('modxevo-lib', 'assets/lib/my_lib/', 'shama/my_lib'), Chris@0: array('mako-package', 'app/packages/my_package/', 'shama/my_package'), Chris@0: array('mediawiki-extension', 'extensions/APC/', 'author/APC'), Chris@0: array('mediawiki-extension', 'extensions/APC/', 'author/APC-extension'), Chris@0: array('mediawiki-extension', 'extensions/UploadWizard/', 'author/upload-wizard'), Chris@0: array('mediawiki-extension', 'extensions/SyntaxHighlight_GeSHi/', 'author/syntax-highlight_GeSHi'), Chris@0: array('mediawiki-skin', 'skins/someskin/', 'author/someskin-skin'), Chris@0: array('mediawiki-skin', 'skins/someskin/', 'author/someskin'), Chris@0: array('microweber-module', 'userfiles/modules/my-thing/', 'author/my-thing-module'), Chris@0: array('modulework-module', 'modules/my_package/', 'shama/my_package'), Chris@0: array('moodle-mod', 'mod/my_package/', 'shama/my_package'), Chris@0: array('october-module', 'modules/my_plugin/', 'shama/my_plugin'), Chris@0: array('october-plugin', 'plugins/shama/my_plugin/', 'shama/my_plugin'), Chris@0: array('october-theme', 'themes/my_theme/', 'shama/my_theme'), Chris@0: array('piwik-plugin', 'plugins/VisitSummary/', 'shama/visit-summary'), Chris@0: array('prestashop-module', 'modules/a-module/', 'vendor/a-module'), Chris@0: array('prestashop-theme', 'themes/a-theme/', 'vendor/a-theme'), Chris@0: array('phpbb-extension', 'ext/test/foo/', 'test/foo'), Chris@0: array('phpbb-style', 'styles/foo/', 'test/foo'), Chris@0: array('phpbb-language', 'language/foo/', 'test/foo'), Chris@0: array('pimcore-plugin', 'plugins/MyPlugin/', 'ubikz/my_plugin'), Chris@0: array('plentymarkets-plugin', 'HelloWorld/', 'plugin-hello-world'), Chris@0: array('ppi-module', 'modules/foo/', 'test/foo'), Chris@0: array('puppet-module', 'modules/puppet-name/', 'puppet/puppet-name'), Chris@0: array('porto-container', 'app/Containers/container-name/', 'test/container-name'), Chris@0: array('radphp-bundle', 'src/Migration/', 'atkrad/migration'), Chris@0: array('redaxo-addon', 'redaxo/include/addons/my_plugin/', 'shama/my_plugin'), Chris@0: array('redaxo-bestyle-plugin', 'redaxo/include/addons/be_style/plugins/my_plugin/', 'shama/my_plugin'), Chris@0: array('reindex-theme', 'themes/my_module/', 'author/my_module'), Chris@0: array('reindex-plugin', 'plugins/my_module/', 'author/my_module'), Chris@0: array('roundcube-plugin', 'plugins/base/', 'test/base'), Chris@0: array('roundcube-plugin', 'plugins/replace_dash/', 'test/replace-dash'), Chris@0: array('shopware-backend-plugin', 'engine/Shopware/Plugins/Local/Backend/ShamaMyBackendPlugin/', 'shama/my-backend-plugin'), Chris@0: array('shopware-core-plugin', 'engine/Shopware/Plugins/Local/Core/ShamaMyCorePlugin/', 'shama/my-core-plugin'), Chris@0: array('shopware-frontend-plugin', 'engine/Shopware/Plugins/Local/Frontend/ShamaMyFrontendPlugin/', 'shama/my-frontend-plugin'), Chris@0: array('shopware-theme', 'templates/my_theme/', 'shama/my-theme'), Chris@0: array('shopware-frontend-theme', 'themes/Frontend/ShamaMyFrontendTheme/', 'shama/my-frontend-theme'), Chris@0: array('shopware-plugin', 'custom/plugins/ShamaMyPlugin/', 'shama/my-plugin'), Chris@0: array('silverstripe-module', 'my_module/', 'shama/my_module'), Chris@0: array('silverstripe-module', 'sapphire/', 'silverstripe/framework', '2.4.0'), Chris@0: array('silverstripe-module', 'framework/', 'silverstripe/framework', '3.0.0'), Chris@0: array('silverstripe-module', 'framework/', 'silverstripe/framework', '3.0.0-rc1'), Chris@0: array('silverstripe-module', 'framework/', 'silverstripe/framework', 'my/branch'), Chris@0: array('silverstripe-theme', 'themes/my_theme/', 'shama/my_theme'), Chris@0: array('smf-module', 'Sources/my_module/', 'shama/my_module'), Chris@0: array('smf-theme', 'Themes/my_theme/', 'shama/my_theme'), Chris@0: array('symfony1-plugin', 'plugins/sfShamaPlugin/', 'shama/sfShamaPlugin'), Chris@0: array('symfony1-plugin', 'plugins/sfShamaPlugin/', 'shama/sf-shama-plugin'), Chris@0: array('thelia-module', 'local/modules/my_module/', 'shama/my_module'), Chris@0: array('thelia-frontoffice-template', 'templates/frontOffice/my_template_fo/', 'shama/my_template_fo'), Chris@0: array('thelia-backoffice-template', 'templates/backOffice/my_template_bo/', 'shama/my_template_bo'), Chris@0: array('thelia-email-template', 'templates/email/my_template_email/', 'shama/my_template_email'), Chris@0: array('tusk-task', '.tusk/tasks/my_task/', 'shama/my_task'), Chris@0: array('typo3-flow-package', 'Packages/Application/my_package/', 'shama/my_package'), Chris@0: array('typo3-flow-build', 'Build/my_package/', 'shama/my_package'), Chris@0: array('typo3-cms-extension', 'typo3conf/ext/my_extension/', 'shama/my_extension'), Chris@0: array('userfrosting-sprinkle', 'app/sprinkles/my_sprinkle/', 'shama/my_sprinkle'), Chris@0: array('vanilla-plugin', 'plugins/my_plugin/', 'shama/my_plugin'), Chris@0: array('vanilla-theme', 'themes/my_theme/', 'shama/my_theme'), Chris@0: array('whmcs-gateway', 'modules/gateways/gateway_name/', 'vendor/gateway_name'), Chris@0: array('wolfcms-plugin', 'wolf/plugins/my_plugin/', 'shama/my_plugin'), Chris@0: array('wordpress-plugin', 'wp-content/plugins/my_plugin/', 'shama/my_plugin'), Chris@0: array('wordpress-muplugin', 'wp-content/mu-plugins/my_plugin/', 'shama/my_plugin'), Chris@0: array('zend-extra', 'extras/library/zend_test/', 'shama/zend_test'), Chris@0: array('zikula-module', 'modules/my-test_module/', 'my/test_module'), Chris@0: array('zikula-theme', 'themes/my-test_theme/', 'my/test_theme'), Chris@0: array('kodicms-media', 'cms/media/vendor/my_media/', 'shama/my_media'), Chris@0: array('kodicms-plugin', 'cms/plugins/my_plugin/', 'shama/my_plugin'), Chris@0: array('phifty-bundle', 'bundles/core/', 'shama/core'), Chris@0: array('phifty-library', 'libraries/my-lib/', 'shama/my-lib'), Chris@0: array('phifty-framework', 'frameworks/my-framework/', 'shama/my-framework'), Chris@0: array('yawik-module', 'module/MyModule/', 'shama/my_module'), Chris@0: array('osclass-plugin', 'oc-content/plugins/sample_plugin/', 'test/sample_plugin'), Chris@0: array('osclass-theme', 'oc-content/themes/sample_theme/', 'test/sample_theme'), Chris@0: array('osclass-language', 'oc-content/languages/sample_lang/', 'test/sample_lang'), Chris@0: ); Chris@0: } Chris@0: Chris@0: /** Chris@0: * testGetCakePHPInstallPathException Chris@0: * Chris@0: * @return void Chris@0: * Chris@0: * @expectedException \InvalidArgumentException Chris@0: */ Chris@0: public function testGetCakePHPInstallPathException() Chris@0: { Chris@0: $installer = new Installer($this->io, $this->composer); Chris@0: $package = new Package('shama/ftp', '1.0.0', '1.0.0'); Chris@0: Chris@0: $package->setType('cakephp-whoops'); Chris@0: $result = $installer->getInstallPath($package); Chris@0: } Chris@0: Chris@0: /** Chris@0: * testCustomInstallPath Chris@0: */ Chris@0: public function testCustomInstallPath() Chris@0: { Chris@0: $installer = new Installer($this->io, $this->composer); Chris@0: $package = new Package('shama/ftp', '1.0.0', '1.0.0'); Chris@0: $package->setType('cakephp-plugin'); Chris@0: $consumerPackage = new RootPackage('foo/bar', '1.0.0', '1.0.0'); Chris@0: $this->composer->setPackage($consumerPackage); Chris@0: $consumerPackage->setExtra(array( Chris@0: 'installer-paths' => array( Chris@0: 'my/custom/path/{$name}/' => array( Chris@0: 'shama/ftp', Chris@0: 'foo/bar', Chris@0: ), Chris@0: ), Chris@0: )); Chris@0: $result = $installer->getInstallPath($package); Chris@0: $this->assertEquals('my/custom/path/Ftp/', $result); Chris@0: } Chris@0: Chris@0: /** Chris@0: * testCustomInstallerName Chris@0: */ Chris@0: public function testCustomInstallerName() Chris@0: { Chris@0: $installer = new Installer($this->io, $this->composer); Chris@0: $package = new Package('shama/cakephp-ftp-plugin', '1.0.0', '1.0.0'); Chris@0: $package->setType('cakephp-plugin'); Chris@0: $package->setExtra(array( Chris@0: 'installer-name' => 'FTP', Chris@0: )); Chris@0: $result = $installer->getInstallPath($package); Chris@0: $this->assertEquals('Plugin/FTP/', $result); Chris@0: } Chris@0: Chris@0: /** Chris@0: * testCustomTypePath Chris@0: */ Chris@0: public function testCustomTypePath() Chris@0: { Chris@0: $installer = new Installer($this->io, $this->composer); Chris@0: $package = new Package('slbmeh/my_plugin', '1.0.0', '1.0.0'); Chris@0: $package->setType('wordpress-plugin'); Chris@0: $consumerPackage = new RootPackage('foo/bar', '1.0.0', '1.0.0'); Chris@0: $this->composer->setPackage($consumerPackage); Chris@0: $consumerPackage->setExtra(array( Chris@0: 'installer-paths' => array( Chris@0: 'my/custom/path/{$name}/' => array( Chris@0: 'type:wordpress-plugin' Chris@0: ), Chris@0: ), Chris@0: )); Chris@0: $result = $installer->getInstallPath($package); Chris@0: $this->assertEquals('my/custom/path/my_plugin/', $result); Chris@0: } Chris@0: Chris@0: /** Chris@0: * testVendorPath Chris@0: */ Chris@0: public function testVendorPath() Chris@0: { Chris@0: $installer = new Installer($this->io, $this->composer); Chris@0: $package = new Package('penyaskito/my_module', '1.0.0', '1.0.0'); Chris@0: $package->setType('drupal-module'); Chris@0: $consumerPackage = new RootPackage('drupal/drupal', '1.0.0', '1.0.0'); Chris@0: $this->composer->setPackage($consumerPackage); Chris@0: $consumerPackage->setExtra(array( Chris@0: 'installer-paths' => array( Chris@0: 'modules/custom/{$name}/' => array( Chris@0: 'vendor:penyaskito' Chris@0: ), Chris@0: ), Chris@0: )); Chris@0: $result = $installer->getInstallPath($package); Chris@0: $this->assertEquals('modules/custom/my_module/', $result); Chris@0: } Chris@0: Chris@0: /** Chris@0: * testNoVendorName Chris@0: */ Chris@0: public function testNoVendorName() Chris@0: { Chris@0: $installer = new Installer($this->io, $this->composer); Chris@0: $package = new Package('sfPhpunitPlugin', '1.0.0', '1.0.0'); Chris@0: Chris@0: $package->setType('symfony1-plugin'); Chris@0: $result = $installer->getInstallPath($package); Chris@0: $this->assertEquals('plugins/sfPhpunitPlugin/', $result); Chris@0: } Chris@0: Chris@0: /** Chris@0: * testTypo3Inflection Chris@0: */ Chris@0: public function testTypo3Inflection() Chris@0: { Chris@0: $installer = new Installer($this->io, $this->composer); Chris@0: $package = new Package('typo3/fluid', '1.0.0', '1.0.0'); Chris@0: Chris@0: $package->setAutoload(array( Chris@0: 'psr-0' => array( Chris@0: 'TYPO3\\Fluid' => 'Classes', Chris@0: ), Chris@0: )); Chris@0: Chris@0: $package->setType('typo3-flow-package'); Chris@0: $result = $installer->getInstallPath($package); Chris@0: $this->assertEquals('Packages/Application/TYPO3.Fluid/', $result); Chris@0: } Chris@0: Chris@0: public function testUninstallAndDeletePackageFromLocalRepo() Chris@0: { Chris@0: $package = new Package('foo', '1.0.0', '1.0.0'); Chris@0: Chris@0: $installer = $this->getMock('Composer\Installers\Installer', array('getInstallPath'), array($this->io, $this->composer)); Chris@0: $installer->expects($this->once())->method('getInstallPath')->with($package)->will($this->returnValue(sys_get_temp_dir().'/foo')); Chris@0: Chris@0: $repo = $this->getMock('Composer\Repository\InstalledRepositoryInterface'); Chris@0: $repo->expects($this->once())->method('hasPackage')->with($package)->will($this->returnValue(true)); Chris@0: $repo->expects($this->once())->method('removePackage')->with($package); Chris@0: Chris@0: $installer->uninstall($repo, $package); Chris@0: } Chris@0: }