diff --git a/src/Composer/Command/SelfUpdateCommand.php b/src/Composer/Command/SelfUpdateCommand.php
index c9418b0a6..5e025b486 100644
--- a/src/Composer/Command/SelfUpdateCommand.php
+++ b/src/Composer/Command/SelfUpdateCommand.php
@@ -80,6 +80,10 @@ EOT
*/
protected function execute(InputInterface $input, OutputInterface $output): int
{
+ if ($_SERVER['argv'][0] === 'Standard input code') {
+ return 1;
+ }
+
// trigger autoloading of a few classes which may be needed when verifying/swapping the phar file
// to ensure we do not try to load them from the new phar, see https://github.com/composer/composer/issues/10252
class_exists('Composer\Util\Platform');
diff --git a/tests/Composer/Test/ApplicationTest.php b/tests/Composer/Test/ApplicationTest.php
index 8effc0684..f30374b2d 100644
--- a/tests/Composer/Test/ApplicationTest.php
+++ b/tests/Composer/Test/ApplicationTest.php
@@ -13,7 +13,9 @@
namespace Composer\Test;
use Composer\Console\Application;
+use Composer\Util\Platform;
use Composer\XdebugHandler\XdebugHandler;
+use Symfony\Component\Console\Input\ArrayInput;
use Symfony\Component\Console\Output\BufferedOutput;
class ApplicationTest extends TestCase
@@ -22,124 +24,51 @@ class ApplicationTest extends TestCase
{
parent::tearDown();
- putenv('COMPOSER_NO_INTERACTION');
+ Platform::clearEnv('COMPOSER_DISABLE_XDEBUG_WARN');
}
+ protected function setUp(): void
+ {
+ parent::setUp();
+
+ Platform::putEnv('COMPOSER_DISABLE_XDEBUG_WARN', '1');
+ }
+
+ /**
+ * @runInSeparateProcess
+ * @preserveGlobalState disabled
+ */
public function testDevWarning(): void
{
$application = new Application;
- $inputMock = $this->getMockBuilder('Symfony\Component\Console\Input\InputInterface')->getMock();
- $outputMock = $this->getMockBuilder('Symfony\Component\Console\Output\OutputInterface')->getMock();
-
- putenv('COMPOSER_NO_INTERACTION=1');
-
- $inputMock->expects($this->any())
- ->method('hasParameterOption')
- ->willReturnCallback(function ($opt): bool {
- switch ($opt) {
- case '--no-plugins':
- return true;
- case '--no-scripts':
- return false;
- case '--no-cache':
- return false;
- }
-
- return false;
- });
-
- $inputMock->expects($this->once())
- ->method('setInteractive')
- ->with($this->equalTo(false));
-
- $inputMock->expects($this->once())
- ->method('getParameterOption')
- ->with($this->equalTo(array('--working-dir', '-d')), $this->equalTo(null))
- ->will($this->returnValue(null));
-
- $inputMock->expects($this->any())
- ->method('getFirstArgument')
- ->will($this->returnValue('about'));
-
- $output = new BufferedOutput();
- $expectedOutput = '';
-
- if (XdebugHandler::isXdebugActive()) {
- $expectedOutput .= 'Composer is operating slower than normal because you have Xdebug enabled. See https://getcomposer.org/xdebug'.PHP_EOL;
- }
-
- $expectedOutput .= sprintf('Warning: This development build of Composer is over 60 days old. It is recommended to update it by running "%s self-update" to get the latest version.', $_SERVER['PHP_SELF']).PHP_EOL;
-
if (!defined('COMPOSER_DEV_WARNING_TIME')) {
define('COMPOSER_DEV_WARNING_TIME', time() - 1);
}
- $application->doRun($inputMock, $output);
+ $output = new BufferedOutput();
+ $application->doRun(new ArrayInput(['command' => 'about']), $output);
+ $expectedOutput = sprintf('Warning: This development build of Composer is over 60 days old. It is recommended to update it by running "%s self-update" to get the latest version.', $_SERVER['PHP_SELF']).PHP_EOL;
$this->assertStringContainsString($expectedOutput, $output->fetch());
}
/**
- * @param string $command
- * @return void
+ * @runInSeparateProcess
+ * @preserveGlobalState disabled
*/
- public function ensureNoDevWarning(string $command): void
+ public function testDevWarningSuppressedForSelfUpdate(): void
{
$application = new Application;
-
$application->add(new \Composer\Command\SelfUpdateCommand);
- $inputMock = $this->getMockBuilder('Symfony\Component\Console\Input\InputInterface')->getMock();
- $outputMock = $this->getMockBuilder('Symfony\Component\Console\Output\OutputInterface')->getMock();
-
- putenv('COMPOSER_NO_INTERACTION=1');
-
- $inputMock->expects($this->any())
- ->method('hasParameterOption')
- ->willReturnCallback(function ($opt): bool {
- switch ($opt) {
- case '--no-plugins':
- return true;
- case '--no-scripts':
- return false;
- case '--no-cache':
- return false;
- }
-
- return false;
- });
-
- $inputMock->expects($this->once())
- ->method('setInteractive')
- ->with($this->equalTo(false));
-
- $inputMock->expects($this->once())
- ->method('getParameterOption')
- ->with($this->equalTo(array('--working-dir', '-d')), $this->equalTo(null))
- ->will($this->returnValue(null));
-
- $inputMock->expects($this->any())
- ->method('getFirstArgument')
- ->will($this->returnValue('about'));
-
- $outputMock->expects($this->never())
- ->method("writeln");
-
if (!defined('COMPOSER_DEV_WARNING_TIME')) {
define('COMPOSER_DEV_WARNING_TIME', time() - 1);
}
- $application->doRun($inputMock, $outputMock);
- }
+ $output = new BufferedOutput();
+ $application->doRun(new ArrayInput(['command' => 'self-update']), $output);
- public function testDevWarningPrevented(): void
- {
- $this->ensureNoDevWarning('self-update');
- }
-
- public function testDevWarningPreventedAlias(): void
- {
- $this->ensureNoDevWarning('self-up');
+ $this->assertSame('', $output->fetch());
}
}