blob: faf672240be02b1b4a830ed68f5944ce0f99af75 [file] [log] [blame]
<?php
class MaintenanceShellArgumentsParserTest extends MediaWikiTestCase {
public static function provideArguments() {
return array(
array(
'foo',
array( 'foo' ),
'One plain argument'
),
array(
'foo bar',
array( 'foo', 'bar' ),
'Two plain arguments'
),
array(
'foo bar baz',
array( 'foo', 'bar', 'baz' ),
'Three plain arguments'
),
array(
'foo\ bar baz\ quux',
array( 'foo bar', 'baz quux' ),
'Plain argument with escaping'
),
array(
'\ foo \ bar \ baz',
array( ' foo', ' bar', ' baz' ),
'Plain argument with escaping at start of value'
),
array(
' \ foo \ bar \ baz ',
array( ' foo', ' bar', ' baz' ),
'Plain arguments with escaping and extra spacing'
),
array(
"foo\nbar",
array( "foo\nbar" ),
'Plain argument with line break'
),
array(
'"foo" "bar" "baz"',
array( 'foo', 'bar', 'baz' ),
'Double quoted arguments'
),
array(
'" foo " " bar " " baz "',
array( ' foo ', ' bar ', ' baz ' ),
'Double quoted arguments with spacing'
),
array(
'" foo\ " " bar\ " " baz\ "',
array( ' foo\ ', ' bar\ ', ' baz\ ' ),
'Double quoted arguments with spacing and backslashes'
),
array(
// one more backslash for each one because of PHP's escaping.
// Actual input: "foo\\" "\bar\"
'"foo\\\\" "\bar\"',
array( 'foo\\\\', '\bar\\' ),
'Double quoted arguments with multple backslashes'
),
array(
"\"foo\nbar\"",
array( "foo\nbar" ),
'Double quoted argument with line break'
),
array(
"'foo' 'bar' 'baz'",
array( 'foo', 'bar', 'baz' ),
'Single quoted arguments'
),
array(
"' foo ' ' bar ' ' baz '",
array( ' foo ', ' bar ', ' baz ' ),
'Single quoted arguments with spaces'
),
array(
"'foo\nbar'",
array( "foo\nbar" ),
'Single quoted argument with line break'
),
array(
'"foo""bar"\'quux\'',
array( 'foobarquux' ),
'Quotes only provide wrapping context, they are not value seperators'
),
array(
' path/to/something\ in/this\ directory.png --baz="quux" -abc="c++" -d e -- -f "' . "line\nbreak". '" ',
array(
'path/to/something in/this directory.png',
'--baz=quux',
'-abc=c++',
'-d',
'e',
'--',
'-f',
"line\nbreak",
),
'Everything thrown together in one giant example (using double quotes)'
),
);
}
/**
* @dataProvider provideArguments
*/
public function testParseArguments( $input, Array $expected, $message ) {
$parser = new MaintenanceShellArgumentsParser( $input );
$this->assertEquals(
$expected,
$parser->getArgv(),
$message
);
}
}