X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=tests%2Fphpunit%2Fincludes%2Fshell%2FCommandTest.php;h=f7275e14e8c3e0d460f734f01f4ce1f15e9ee8e4;hb=565558f4ef6762df13613d3ef03804b39423cf2e;hp=33a7f44704caeb5d207c339aebd8989d72c6c19e;hpb=7320a9577e882fbeacb1772977fbfecf8aa5424d;p=lhc%2Fweb%2Fwiklou.git diff --git a/tests/phpunit/includes/shell/CommandTest.php b/tests/phpunit/includes/shell/CommandTest.php index 33a7f44704..f7275e14e8 100644 --- a/tests/phpunit/includes/shell/CommandTest.php +++ b/tests/phpunit/includes/shell/CommandTest.php @@ -1,22 +1,12 @@ markTestSkipped( 'destructors are unreliable in HHVM' ); - } - $command = new Command(); - $command->params( 'true' ); - } - private function requirePosix() { if ( wfIsWindows() ) { $this->markTestSkipped( 'This test requires a POSIX environment.' ); @@ -57,23 +47,71 @@ class CommandTest extends PHPUnit_Framework_TestCase { $this->assertSame( "bar\n", $result->getStdout() ); } + public function testStdout() { + $this->requirePosix(); + + $command = new Command(); + + $result = $command + ->params( 'bash', '-c', 'echo ThisIsStderr 1>&2' ) + ->execute(); + + $this->assertNotContains( 'ThisIsStderr', $result->getStdout() ); + $this->assertEquals( "ThisIsStderr\n", $result->getStderr() ); + } + + public function testStdoutRedirection() { + $this->requirePosix(); + + $command = new Command(); + + $result = $command + ->params( 'bash', '-c', 'echo ThisIsStderr 1>&2' ) + ->includeStderr( true ) + ->execute(); + + $this->assertEquals( "ThisIsStderr\n", $result->getStdout() ); + $this->assertNull( $result->getStderr() ); + } + public function testOutput() { global $IP; $this->requirePosix(); + chdir( $IP ); $command = new Command(); $result = $command - ->params( [ 'ls', "$IP/index.php" ] ) + ->params( [ 'ls', 'index.php' ] ) ->execute(); - $this->assertSame( "$IP/index.php", trim( $result->getStdout() ) ); + $this->assertRegExp( '/^index.php$/m', $result->getStdout() ); + $this->assertSame( null, $result->getStderr() ); $command = new Command(); $result = $command ->params( [ 'ls', 'index.php', 'no-such-file' ] ) ->includeStderr() ->execute(); + $this->assertRegExp( '/^index.php$/m', $result->getStdout() ); $this->assertRegExp( '/^.+no-such-file.*$/m', $result->getStdout() ); + $this->assertSame( null, $result->getStderr() ); + + $command = new Command(); + $result = $command + ->params( [ 'ls', 'index.php', 'no-such-file' ] ) + ->execute(); + $this->assertRegExp( '/^index.php$/m', $result->getStdout() ); + $this->assertRegExp( '/^.+no-such-file.*$/m', $result->getStderr() ); + } + + /** + * Test that null values are skipped by params() and unsafeParams() + */ + public function testNullsAreSkipped() { + $command = TestingAccessWrapper::newFromObject( new Command ); + $command->params( 'echo', 'a', null, 'b' ); + $command->unsafeParams( 'c', null, 'd' ); + $this->assertEquals( "'echo' 'a' 'b' c d", $command->command ); } public function testT69870() { @@ -91,4 +129,25 @@ class CommandTest extends PHPUnit_Framework_TestCase { $this->assertEquals( 333333, strlen( $output ) ); } } + + public function testLogStderr() { + $this->requirePosix(); + + $logger = new TestLogger( true, function ( $message, $level, $context ) { + return $level === Psr\Log\LogLevel::ERROR ? '1' : null; + }, true ); + $command = new Command(); + $command->setLogger( $logger ); + $command->params( 'bash', '-c', 'echo ThisIsStderr 1>&2' ); + $command->execute(); + $this->assertEmpty( $logger->getBuffer() ); + + $command = new Command(); + $command->setLogger( $logger ); + $command->logStderr(); + $command->params( 'bash', '-c', 'echo ThisIsStderr 1>&2' ); + $command->execute(); + $this->assertSame( 1, count( $logger->getBuffer() ) ); + $this->assertSame( trim( $logger->getBuffer()[0][2]['error'] ), 'ThisIsStderr' ); + } }