Merge "Selenium: replace UserLoginPage with BlankPage where possible"
[lhc/web/wiklou.git] / tests / phpunit / includes / shell / CommandTest.php
index f7275e1..c5e8e89 100644 (file)
@@ -4,9 +4,13 @@ use MediaWiki\Shell\Command;
 use Wikimedia\TestingAccessWrapper;
 
 /**
+ * @covers \MediaWiki\Shell\Command
  * @group Shell
  */
-class CommandTest extends PHPUnit_Framework_TestCase {
+class CommandTest extends PHPUnit\Framework\TestCase {
+
+       use MediaWikiCoversValidator;
+
        private function requirePosix() {
                if ( wfIsWindows() ) {
                        $this->markTestSkipped( 'This test requires a POSIX environment.' );
@@ -115,15 +119,18 @@ class CommandTest extends PHPUnit_Framework_TestCase {
        }
 
        public function testT69870() {
-               $commandLine = wfIsWindows()
-                       // 333 = 331 + CRLF
-                       ? ( 'for /l %i in (1, 1, 1001) do @echo ' . str_repeat( '*', 331 ) )
-                       : 'printf "%-333333s" "*"';
+               if ( wfIsWindows() ) {
+                       // T209159: Anonymous pipe under Windows does not support asynchronous read and write,
+                       // and the default buffer is too small (~4K), it is easy to be blocked.
+                       $this->markTestSkipped(
+                               'T209159: Anonymous pipe under Windows cannot withstand such a large amount of data'
+                       );
+               }
 
                // Test several times because it involves a race condition that may randomly succeed or fail
                for ( $i = 0; $i < 10; $i++ ) {
                        $command = new Command();
-                       $output = $command->unsafeParams( $commandLine )
+                       $output = $command->unsafeParams( 'printf "%-333333s" "*"' )
                                ->execute()
                                ->getStdout();
                        $this->assertEquals( 333333, strlen( $output ) );
@@ -150,4 +157,28 @@ class CommandTest extends PHPUnit_Framework_TestCase {
                $this->assertSame( 1, count( $logger->getBuffer() ) );
                $this->assertSame( trim( $logger->getBuffer()[0][2]['error'] ), 'ThisIsStderr' );
        }
+
+       public function testInput() {
+               $this->requirePosix();
+
+               $command = new Command();
+               $command->params( 'cat' );
+               $command->input( 'abc' );
+               $result = $command->execute();
+               $this->assertSame( 'abc', $result->getStdout() );
+
+               // now try it with something that does not fit into a single block
+               $command = new Command();
+               $command->params( 'cat' );
+               $command->input( str_repeat( '!', 1000000 ) );
+               $result = $command->execute();
+               $this->assertSame( 1000000, strlen( $result->getStdout() ) );
+
+               // And try it with empty input
+               $command = new Command();
+               $command->params( 'cat' );
+               $command->input( '' );
+               $result = $command->execute();
+               $this->assertSame( '', $result->getStdout() );
+       }
 }