diff --git a/src/Composer/Console/Application.php b/src/Composer/Console/Application.php index 4ecb8b1a3..e0037f655 100644 --- a/src/Composer/Console/Application.php +++ b/src/Composer/Console/Application.php @@ -94,9 +94,17 @@ class Application extends BaseApplication $output->writeln('Composer only officially supports PHP 5.3.2 and above, you will most likely encounter problems with your PHP '.PHP_VERSION.', upgrading is strongly recommended.'); } - if (defined('COMPOSER_DEV_WARNING_TIME') && $this->getCommandName($input) !== 'self-update' && $this->getCommandName($input) !== 'selfupdate') { - if (time() > COMPOSER_DEV_WARNING_TIME) { - $output->writeln(sprintf('Warning: This development build of composer is over 30 days old. It is recommended to update it by running "%s self-update" to get the latest version.', $_SERVER['PHP_SELF'])); + if (defined('COMPOSER_DEV_WARNING_TIME')) { + $commandName = ''; + if ($name = $this->getCommandName($input)) { + try { + $commandName = $this->find($name)->getName(); + } catch (\InvalidArgumentException $e) {} + } + if ($commandName !== 'self-update' && $commandName !== 'selfupdate') { + if (time() > COMPOSER_DEV_WARNING_TIME) { + $output->writeln(sprintf('Warning: This development build of composer is over 30 days old. It is recommended to update it by running "%s self-update" to get the latest version.', $_SERVER['PHP_SELF'])); + } } } diff --git a/tests/Composer/Test/ApplicationTest.php b/tests/Composer/Test/ApplicationTest.php new file mode 100644 index 000000000..c99022671 --- /dev/null +++ b/tests/Composer/Test/ApplicationTest.php @@ -0,0 +1,76 @@ + + * Jordi Boggiano + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Composer\Test; + +use Composer\Console\Application; +use Composer\TestCase; + +class ApplicationTest extends TestCase +{ + public function testDevWarning() + { + $application = new Application; + + $inputMock = $this->getMock('Symfony\Component\Console\Input\InputInterface'); + $outputMock = $this->getMock('Symfony\Component\Console\Output\OutputInterface'); + + $inputMock->expects($this->once()) + ->method('getFirstArgument') + ->will($this->returnValue('list')); + + $outputMock->expects($this->once()) + ->method("writeln") + ->with($this->equalTo(sprintf('Warning: This development build of composer is over 30 days old. It is recommended to update it by running "%s self-update" to get the latest version.', $_SERVER['PHP_SELF']))); + + if (!defined('COMPOSER_DEV_WARNING_TIME')) { + define('COMPOSER_DEV_WARNING_TIME', time() - 1); + } + + $this->setExpectedException('RuntimeException'); + $application->doRun($inputMock, $outputMock); + } + + public function ensureNoDevWarning($command) + { + $application = new Application; + + $application->add(new \Composer\Command\SelfUpdateCommand); + + $inputMock = $this->getMock('Symfony\Component\Console\Input\InputInterface'); + $outputMock = $this->getMock('Symfony\Component\Console\Output\OutputInterface'); + + $inputMock->expects($this->once()) + ->method('getFirstArgument') + ->will($this->returnValue($command)); + + $outputMock->expects($this->never()) + ->method("writeln"); + + if (!defined('COMPOSER_DEV_WARNING_TIME')) { + define('COMPOSER_DEV_WARNING_TIME', time() - 1); + } + + $this->setExpectedException('RuntimeException'); + $application->doRun($inputMock, $outputMock); + } + + public function testDevWarningPrevented() + { + $this->ensureNoDevWarning('self-update'); + } + + public function testDevWarningPreventedAlias() + { + $this->ensureNoDevWarning('self-up'); + } +}