blob: 79dae71c2cf41b36de4d157854a77769882cb1d0 [file] [log] [blame]
<?php
/**
* ezcConsoleInputTest class.
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
* @package ConsoleTools
* @subpackage Tests
* @version //autogentag//
* @copyright Copyright (C) 2005-2010 eZ Systems AS. All rights reserved.
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
*/
/**
* Test suite for ezcConsoleInput class.
*
* @package ConsoleTools
* @subpackage Tests
*/
class ezcConsoleInputTest extends ezcTestCase
{
private $testOptions = array(
array(
'short' => 't',
'long' => 'testing',
'options' => array(),
),
array(
'short' => 's',
'long' => 'subway',
'options' => array(),
),
array(
'short' => '',
'long' => 'carry',
'options' => array(),
),
array(
'short' => 'v',
'long' => 'visual',
'options' => array(
'multiple' => true,
'arguments' => false,
),
),
array(
'short' => 'o',
'long' => 'original',
'options' => array(
'type' => ezcConsoleInput::TYPE_STRING,
),
),
array(
'short' => 'b',
'long' => 'build',
'options' => array(
'type' => ezcConsoleInput::TYPE_INT,
'default' => 42,
),
),
array(
'short' => 'd',
'long' => 'destroy',
'options' => array(
'type' => ezcConsoleInput::TYPE_STRING,
'default' => 'world',
),
),
array(
'short' => 'y',
'long' => 'yank',
'options' => array(
'type' => ezcConsoleInput::TYPE_STRING,
'multiple' => true,
'shorthelp' => 'Some stupid short text.',
'longhelp' => 'Some even more stupid, but somewhat longer long describtion.',
),
),
array(
'short' => 'c',
'long' => 'console',
'options' => array(
'shorthelp' => 'Some stupid short text.',
'longhelp' => 'Some even more stupid, but somewhat longer long describtion.',
'depends' => array( 't', 'o', 'b', 'y' ),
),
),
array(
'short' => 'e',
'long' => 'edit',
'options' => array(
'excludes' => array( 't', 'y' ),
'arguments' => false,
),
),
array(
'short' => 'n',
'long' => 'new',
'options' => array(
'depends' => array( 't', 'o' ),
'excludes' => array( 'b', 'y' ),
'arguments' => false,
),
),
);
private $testAliasesSuccess = array(
array(
'short' => 'k',
'long' => 'kelvin',
'ref' => 't',
),
array(
'short' => 'f',
'long' => 'foobar',
'ref' => 'o',
),
);
private $testAliasesFailure = array(
array(
'short' => 'l',
'long' => 'lurking',
'ref' => 'x',
),
array(
'short' => 'e',
'long' => 'elvis',
'ref' => 'z',
),
array(
'short' => 'd',
'long' => 'destroy',
'ref' => 'd',
),
);
private $testArgsSuccess = array(
array(
'foo.php',
'-o',
'"Test string2"',
'--build',
'42',
),
array(
'foo.php',
'-b',
'42',
'--yank',
'"a"',
'--yank',
'"b"',
'--yank',
'"c"',
),
array(
'foo.php',
'--yank=a',
'--yank=b',
'--yank="c"',
'-y',
'1',
'-y',
'2'
),
array(
'foo.php',
'--yank=a',
'--yank=b',
'-y',
'1',
'arg1',
'arg2',
),
);
public static function suite()
{
return new PHPUnit_Framework_TestSuite( "ezcConsoleInputTest" );
}
protected function setUp()
{
$this->input = new ezcConsoleInput();
foreach ( $this->testOptions as $paramData )
{
$this->input->registerOption( $this->createFakeOption( $paramData ) );
}
}
protected function createFakeOption( $paramData )
{
$param = new ezcConsoleOption( $paramData['short'], $paramData['long'] );
foreach ( $paramData['options'] as $name => $val )
{
if ( $name === 'depends' )
{
foreach ( $val as $dep )
{
$param->addDependency( new ezcConsoleOptionRule( $this->input->getOption( $dep ) ) );
}
continue;
}
if ( $name === 'excludes' )
{
foreach ( $val as $dep )
{
$param->addExclusion(new ezcConsoleOptionRule( $this->input->getOption( $dep ) ) );
}
continue;
}
$param->$name = $val;
}
return $param;
}
protected function tearDown()
{
unset( $this->input );
}
public function testRegisterOptionSuccess()
{
$input = new ezcConsoleInput();
foreach ( $this->testOptions as $optionData )
{
$option = $this->createFakeOption( $optionData );
$input->registerOption( $option );
if ( $option->short !== '' )
{
$this->assertEquals(
$option,
$input->getOption( $optionData['short'] ),
'Parameter not registered correctly with short name <' . $optionData['short'] . '>.'
);
}
$this->assertEquals(
$option,
$input->getOption( $optionData['long'] ),
'Parameter not registered correctly with long name <' . $optionData['long'] . '>.'
);
}
}
public function testRegisterOptionFailure()
{
$input = new ezcConsoleInput();
foreach ( $this->testOptions as $optionData )
{
$option = $this->createFakeOption( $optionData );
$input->registerOption( $option );
}
foreach ( $this->testOptions as $optionData )
{
$option = $this->createFakeOption( $optionData );
$exceptionThrown = false;
try
{
$input->registerOption( $option );
}
catch ( ezcConsoleOptionAlreadyRegisteredException $e )
{
$exceptionThrown = true;
}
$this->assertTrue(
$exceptionThrown,
"Exception not thrown on double registered option " . $optionData["short"] === "" ? "determined by long name." : "determined by short name."
);
}
}
public function testUnregisterOptionSuccess()
{
// register aliases for testing
$validParams = array();
foreach ( $this->input->getOptions() as $param )
{
$validParams[$param->short] = $param;
}
foreach ( $this->testAliasesSuccess as $alias )
{
$this->input->registerAlias( $alias['short'], $alias['long'], $validParams[$alias['ref']] );
}
// test itself
foreach ( $this->input->getOptions() as $option )
{
$this->input->unregisterOption( $option );
$exceptionThrown = false;
try
{
$this->input->getOption( isset( $option->short ) ? $option->short : $option->long );
}
catch ( ezcConsoleOptionNotExistsException $e )
{
$exceptionThrown = true;
}
$this->assertTrue( $exceptionThrown, "Exception not unregistered correctly -{$option->short}/--{$option->long}." );
}
$this->assertEquals( 0, count( $this->input->getOptions() ) );
}
public function testUnregisterOptionFailure()
{
$option = new ezcConsoleOption( "x", "execute" );
try
{
$this->input->unregisterOption( $option );
}
catch ( ezcConsoleOptionNotExistsException $e )
{
return;
}
$this->fail( "Exception not thrown on unregistering a non existent option." );
}
public function testFromStringSuccess()
{
$param = new ezcConsoleInput();
$param->registerOptionString( '[a:|all:][u?|user?][i|info][o+test|overall+][d*|destroy*]' );
$res['a'] = new ezcConsoleOption(
'a',
'all',
ezcConsoleInput::TYPE_NONE,
NULL,
false,
'No help available.',
'Sorry, there is no help text available for this parameter.',
array(),
array (),
true
);
$res['u'] = new ezcConsoleOption(
'u',
'user',
ezcConsoleInput::TYPE_STRING,
'',
false,
'No help available.',
'Sorry, there is no help text available for this parameter.',
array (),
array (),
true
);
$res['o'] = new ezcConsoleOption(
'o',
'overall',
ezcConsoleInput::TYPE_STRING,
'test',
true,
'No help available.',
'Sorry, there is no help text available for this parameter.',
array (),
array (),
true
);
$res['d'] = new ezcConsoleOption(
'd',
'destroy',
ezcConsoleInput::TYPE_NONE,
null,
true,
'No help available.',
'Sorry, there is no help text available for this parameter.',
array (),
array (),
true
);
$this->assertEquals( $res['a'], $param->getOption( 'a' ), 'Option -a not registered correctly.' );
$this->assertEquals( $res['u'], $param->getOption( 'u' ), 'Option -u not registered correctly.' );
$this->assertEquals( $res['o'], $param->getOption( 'o' ), 'Option -o not registered correctly.' );
$this->assertEquals( $res['d'], $param->getOption( 'd' ), 'Option -d not registered correctly.' );
}
public function testFromStringFailure()
{
$param = new ezcConsoleInput();
try
{
$param->registerOptionString( '[a:]' );
}
catch ( ezcConsoleOptionStringNotWellformedException $e )
{
return;
}
$this->fail( "Exception not thrown on not wellformed option string." );
}
/**
* testRegisterAliasSuccess
*
* @access public
*/
public function testRegisterAliasSuccess()
{
$validParams = array();
foreach ( $this->input->getOptions() as $param )
{
$validParams[$param->short] = $param;
}
foreach ( $this->testAliasesSuccess as $alias )
{
$this->input->registerAlias( $alias['short'], $alias['long'], $validParams[$alias['ref']] );
$this->assertTrue( $this->input->hasOption( $alias['short'] ), "Short name not available after alias registration." );
$this->assertTrue( $this->input->hasOption( $alias['long'] ), "Long name not available after alias registration." );
}
}
/**
* testRegisterAliasFailure
*
* @access public
*/
public function testRegisterAliasFailure()
{
$refOption = new ezcConsoleOption( 'foo', 'bar' );
foreach ( $this->testAliasesFailure as $alias )
{
$exceptionThrown = false;
try
{
$this->input->registerAlias( $alias['short'], $alias['long'], $refOption );
}
catch ( ezcConsoleOptionNotExistsException $e )
{
$exceptionThrown = true;
}
$this->assertTrue( $exceptionThrown, "Exception not thrown on regstering invalid alias --{$alias['short']}/--{$alias['long']}." );
}
foreach ( $this->testOptions as $option )
{
$exceptionThrown = false;
try
{
$this->input->registerAlias( $option['short'], $option['long'], $this->input->getOption( "t" ) );
}
catch ( ezcConsoleOptionAlreadyRegisteredException $e )
{
$exceptionThrown = true;
}
$this->assertTrue( $exceptionThrown, "Exception not thrown on regstering already existent option as alias --{$alias['short']}/--{$alias['long']}." );
}
}
public function testUnregisterAliasSuccess()
{
// test preperation
$validParams = array();
foreach ( $this->input->getOptions() as $param )
{
$validParams[$param->short] = $param;
}
foreach ( $this->testAliasesSuccess as $alias )
{
$this->input->registerAlias( $alias['short'], $alias['long'], $validParams[$alias['ref']] );
}
foreach ( $this->testAliasesSuccess as $alias )
{
$this->assertTrue( $this->input->hasOption( $alias['short'] ), "Alias incorrectly registered, cannot unregister." );
$this->input->unregisterAlias( $alias['short'], $alias['long'] );
$this->assertFalse( $this->input->hasOption( $alias['short'] ), "Alias incorrectly unregistered." );
}
}
public function testUnregisterAliasFailure()
{
foreach ( $this->testOptions as $option )
{
$exceptionThrown = false;
try
{
$this->input->unregisterAlias( !empty( $option['short'] ) ? $option['short'] : "f", $option['long'] );
}
catch ( ezcConsoleOptionNoAliasException $e )
{
$exceptionThrown = true;
}
$this->assertTrue( $exceptionThrown, "Exception not trown on try to unregister an option as an alias." );
}
}
public function testGetAccessSuccess()
{
$this->assertNull( $this->input->argumentDefinition );
}
public function testGetAccessFailure()
{
try
{
echo $this->input->foo;
}
catch ( ezcBasePropertyNotFoundException $e )
{
return;
}
$this->fail( "ezcBasePropertyNotFoundException not thrown on get access to invalid property foo." );
}
public function testSetAccessSuccess()
{
$this->assertSetProperty(
$this->input,
"argumentDefinition",
array( new ezcConsoleArguments(), null )
);
}
public function testSetAccessFailure()
{
$this->assertSetPropertyFails(
$this->input,
"argumentDefinition",
array( "", "foo", 23, true, array(), new stdClass() ),
"ezcBaseValueException"
);
$this->assertSetPropertyFails(
$this->input,
"foo",
array( "" ),
"ezcBasePropertyNotFoundException"
);
}
public function testIssetAccess()
{
$this->assertTrue( isset( $this->input->argumentDefinition ) );
$this->assertFalse( isset( $this->input->foo ) );
}
// Single parameter tests
public function testProcessSuccessSingleShortNoValue()
{
$args = array(
'foo.php',
'-t',
);
$res = array(
't' => true,
);
$this->commonProcessTestSuccess( $args, $res );
}
public function testProcessSuccessSingleShortValue()
{
$args = array(
'foo.php',
'-o',
'bar'
);
$res = array(
'o' => 'bar',
);
$this->commonProcessTestSuccess( $args, $res );
}
public function testProcessSuccessSingleLongNoValue()
{
$args = array(
'foo.php',
'--testing',
);
$res = array(
't' => true,
);
$this->commonProcessTestSuccess( $args, $res );
}
public function testProcessSuccessSingleLongValue()
{
$args = array(
'foo.php',
'--original',
'bar'
);
$res = array(
'o' => 'bar',
);
$this->commonProcessTestSuccess( $args, $res );
}
public function testProcessFailureSingleShortDefault()
{
$args = array(
'foo.php',
'-b'
);
$res = array(
'b' => 42,
);
$this->commonProcessTestFailure( $args, 'ezcConsoleOptionMissingValueException' );
}
public function testProcessFailureSingleLongDefault()
{
$args = array(
'foo.php',
'--build'
);
$this->commonProcessTestFailure( $args, 'ezcConsoleOptionMissingValueException' );
}
public function testProcessSuccessFromArgv()
{
$_SERVER["argv"] = array(
'foo.php',
'--build',
'42'
);
$this->input->process();
$this->assertEquals(
array( "b" => 42, "d" => "world" ),
$this->input->getOptionValues(),
"Processing from \$_SERVER['argv'] did not work."
);
}
public function testProcessSuccessGetOptionValuesLongnames()
{
$_SERVER["argv"] = array(
'foo.php',
'--build',
'42'
);
$this->input->process();
$this->assertEquals(
array( "build" => 42, "destroy" => "world" ),
$this->input->getOptionValues( true ),
"Processing from \$_SERVER['argv'] did not work."
);
}
public function testProcessSuccessSingleShortNoValueArguments()
{
$args = array(
'foo.php',
'-s',
'--',
'-foo',
'--bar',
'baz',
);
$res = array(
's' => true,
);
$this->commonProcessTestSuccess( $args, $res );
}
public function testProcessSuccessSingleLongNoValueArguments()
{
$args = array(
'foo.php',
'--subway',
'--',
'-foo',
'--bar',
'baz',
);
$res = array(
's' => true,
);
$this->commonProcessTestSuccess( $args, $res );
}
// Multiple parameter tests
public function testProcessSuccessMultipleShortNoValue()
{
$args = array(
'foo.php',
'-t',
'-s',
);
$res = array(
't' => true,
's' => true,
);
$this->commonProcessTestSuccess( $args, $res );
}
public function testProcessSuccessMultipleShortValue()
{
$args = array(
'foo.php',
'-o',
'bar',
'-b',
'23'
);
$res = array(
'o' => 'bar',
'b' => 23,
);
$this->commonProcessTestSuccess( $args, $res );
}
public function testProcessSuccessMultipleLongNoValue()
{
$args = array(
'foo.php',
'--testing',
'--subway',
);
$res = array(
't' => true,
's' => true,
);
$this->commonProcessTestSuccess( $args, $res );
}
public function testProcessSuccessMultipleLongValue()
{
$args = array(
'foo.php',
'--original',
'bar',
'--build',
'23',
);
$res = array(
'o' => 'bar',
'b' => 23,
);
$this->commonProcessTestSuccess( $args, $res );
}
public function testProcessSuccessMultipleLongValueWithEquals()
{
$args = array(
'foo.php',
'--original',
'bar',
'--build=23',
);
$res = array(
'o' => 'bar',
'b' => 23,
);
$this->commonProcessTestSuccess( $args, $res );
}
public function testProcessFailureMultipleShortDefault()
{
$args = array(
'foo.php',
'-b',
'-d',
);
$res = array(
'b' => 42,
'd' => 'world',
);
$this->commonProcessTestFailure( $args, 'ezcConsoleOptionMissingValueException' );
}
public function testProcessFailureMultipleLongDefault()
{
$args = array(
'foo.php',
'--build',
'--destroy',
);
$res = array(
'b' => 42,
'd' => 'world',
);
$this->commonProcessTestFailure( $args, 'ezcConsoleOptionMissingValueException' );
}
// Bug #8645: Default values not set correctly in ezcConsoleInput
public function testProcessSuccessDefault()
{
$args = array(
'foo.php',
);
$res = array(
'b' => 42,
'd' => 'world',
);
$this->commonProcessTestSuccess( $args, $res );
}
public function testProcessSuccessMultipleLongSameNoValue()
{
$args = array(
'foo.php',
'--visual',
'--visual',
);
$res = array(
'v' => array( true, true ),
);
$this->commonProcessTestSuccess( $args, $res );
}
public function testProcessSuccessArguments_1()
{
$args = array(
'foo.php',
'--original',
'bar',
'--build',
'23',
'argument',
'1',
'2',
);
$res = array(
0 => 'argument',
1 => '1',
2 => '2',
);
$this->argumentsProcessTestSuccess( $args, $res );
}
public function testProcessSuccessDependencies()
{
$args = array(
'foo.php',
'-t',
'-o',
'bar',
'--build',
23,
'-y',
'text',
'--yank',
'moretext',
'-c' // This one depends on -t, -o, -b and -y
);
$res = array(
't' => true,
'o' => 'bar',
'b' => 23,
'y' => array(
'text',
'moretext'
),
'c' => true,
);
$this->commonProcessTestSuccess( $args, $res );
}
public function testProcessSuccessExclusions()
{
$args = array(
'foo.php',
'-o',
'bar',
'--build',
23,
'--edit' // This one exclude -t and -y
);
$res = array(
'o' => 'bar',
'b' => 23,
'e' => true,
);
$this->commonProcessTestSuccess( $args, $res );
}
public function testProcessSuccessDependenciesExclusions()
{
$args = array(
'foo.php',
'-t',
'-o',
'bar',
'-n' // This one depends on -t and -o, but excludes -b and -y
);
$res = array(
't' => true,
'o' => 'bar',
'n' => true,
);
$this->commonProcessTestSuccess( $args, $res );
}
public function testProcessSuccessDependencieValues()
{
$rule = new ezcConsoleOptionRule( $this->input->getOption( "y" ), array( "foo", "bar" ) );
$option = new ezcConsoleOption( "x", "execute" );
$option->addDependency( $rule );
$this->input->registerOption( $option );
$args = array(
'foo.php',
'-x',
'-y',
'bar',
);
$res = array(
'x' => true,
'y' => array( 'bar' ),
);
$this->commonProcessTestSuccess( $args, $res );
}
public function testProcessSuccessExclusionValues()
{
$rule = new ezcConsoleOptionRule( $this->input->getOption( "y" ), array( "foo", "bar" ) );
$option = new ezcConsoleOption( "x", "execute" );
$option->addExclusion( $rule );
$this->input->registerOption( $option );
$args = array(
'foo.php',
'-x',
'-y',
'baz',
);
$res = array(
'x' => true,
'y' => array( 'baz' ),
);
$this->commonProcessTestSuccess( $args, $res );
}
public function testProcessSuccessMandatory()
{
$args = array(
'foo.php',
'-q',
);
$this->input->registerOption(
$this->createFakeOption(
array(
'short' => 'q',
'long' => 'quite',
'options' => array(
'mandatory' => true,
),
)
)
);
$res = array(
'q' => true,
);
$this->commonProcessTestSuccess( $args, $res );
}
public function testProcessSuccessMandatoryDefault()
{
$args = array(
'foo.php',
'-q',
);
$this->input->registerOption(
$this->createFakeOption(
array(
'short' => 'q',
'long' => 'quite',
'options' => array(
'default' => 'test',
'mandatory' => true,
),
)
)
);
$res = array(
'q' => true,
);
$this->commonProcessTestSuccess( $args, $res );
}
public function testProcessSuccessHelp()
{
$args = array(
'foo.php',
'-h',
);
$this->input->registerOption(
$this->createFakeOption(
array(
'short' => 'q',
'long' => 'quite',
'options' => array(
'mandatory' => true,
),
)
)
);
$this->input->registerOption(
$this->createFakeOption(
array(
'short' => 'h',
'long' => 'help',
'options' => array(
'isHelpOption' => true,
),
)
)
);
$res = array(
'h' => true,
);
$this->commonProcessTestSuccess( $args, $res );
}
public function testProcessSuccessNewArgumentsSimple()
{
$this->input->argumentDefinition = new ezcConsoleArguments();
$this->input->argumentDefinition[0] = new ezcConsoleArgument( "file1" );
$this->input->argumentDefinition[1] = new ezcConsoleArgument( "file2" );
$this->input->process(
array( "foo.php", "'some file'", "file" )
);
$this->assertEquals( "some file", $this->input->argumentDefinition["file1"]->value );
$this->assertEquals( "file", $this->input->argumentDefinition["file2"]->value );
}
public function testProcessFailureNewArgumentsSimple()
{
$this->input->argumentDefinition = new ezcConsoleArguments();
$this->input->argumentDefinition[0] = new ezcConsoleArgument( "file1" );
$this->input->argumentDefinition[1] = new ezcConsoleArgument( "file2" );
$args = array( "foo.php" );
$this->commonProcessTestFailure( $args, 'ezcConsoleArgumentMandatoryViolationException' );
}
public function testProcessFailureNewArgumentsTooMany()
{
$this->input->argumentDefinition = new ezcConsoleArguments();
$this->input->argumentDefinition[0] = new ezcConsoleArgument( "file1" );
$this->input->argumentDefinition[1] = new ezcConsoleArgument( "file2" );
$args = array( "foo.php", "'test'", "'foo'", "'bar'" );
$this->commonProcessTestFailure( $args, 'ezcConsoleTooManyArgumentsException' );
}
public function testProcessSuccessNewArgumentsOptionalAvailable()
{
$this->input->argumentDefinition = new ezcConsoleArguments();
$this->input->argumentDefinition[0] = new ezcConsoleArgument( "file1" );
$this->input->argumentDefinition[1] = new ezcConsoleArgument( "file2" );
$this->input->argumentDefinition[1]->mandatory = false;
$this->input->process(
array( "foo.php", "'some file'", "file" )
);
$this->assertEquals( "some file", $this->input->argumentDefinition["file1"]->value );
$this->assertEquals( "file", $this->input->argumentDefinition["file2"]->value );
}
public function testProcessFailureNewArgumentsOptionalAvailable()
{
$this->input->argumentDefinition = new ezcConsoleArguments();
$this->input->argumentDefinition[0] = new ezcConsoleArgument( "file1" );
$this->input->argumentDefinition[1] = new ezcConsoleArgument( "file2" );
$this->input->argumentDefinition[1]->mandatory = false;
$args = array( "foo.php" );
$this->commonProcessTestFailure( $args, 'ezcConsoleArgumentMandatoryViolationException' );
}
public function testProcessSuccessNewArgumentsAutoOptionalAvailable()
{
$this->input->argumentDefinition = new ezcConsoleArguments();
$this->input->argumentDefinition[0] = new ezcConsoleArgument( "file1" );
$this->input->argumentDefinition[1] = new ezcConsoleArgument( "file2" );
$this->input->argumentDefinition[1]->mandatory = false;
$this->input->argumentDefinition[2] = new ezcConsoleArgument( "file3" );
$this->input->process(
array( "foo.php", "'some file'", "file", "\"another file\"" )
);
$this->assertEquals( "some file", $this->input->argumentDefinition["file1"]->value );
$this->assertEquals( "file", $this->input->argumentDefinition["file2"]->value );
$this->assertEquals( "another file", $this->input->argumentDefinition["file3"]->value );
}
public function testProcessFailureNewArgumentsAutoOptionalAvailable()
{
$this->input->argumentDefinition = new ezcConsoleArguments();
$this->input->argumentDefinition[0] = new ezcConsoleArgument( "file1" );
$this->input->argumentDefinition[1] = new ezcConsoleArgument( "file2" );
$this->input->argumentDefinition[1]->mandatory = false;
$this->input->argumentDefinition[2] = new ezcConsoleArgument( "file3" );
$args = array( "foo.php" );
$this->commonProcessTestFailure( $args, 'ezcConsoleArgumentMandatoryViolationException' );
}
public function testProcessSuccessNewArgumentsOptionalNotAvailable()
{
$this->input->argumentDefinition = new ezcConsoleArguments();
$this->input->argumentDefinition[0] = new ezcConsoleArgument( "file1" );
$this->input->argumentDefinition[1] = new ezcConsoleArgument( "file2" );
$this->input->argumentDefinition[1]->mandatory = false;
$this->input->process(
array( "foo.php", "'some file'" )
);
$this->assertEquals( "some file", $this->input->argumentDefinition["file1"]->value );
$this->assertEquals( null, $this->input->argumentDefinition["file2"]->value );
}
// Issue #10873: ezcConsoleArgument default value not working
public function testProcessSuccessNewArgumentsOptionalNotAvailableDefault()
{
$this->input->argumentDefinition = new ezcConsoleArguments();
$this->input->argumentDefinition[0] = new ezcConsoleArgument( "file1" );
$this->input->argumentDefinition[1] = new ezcConsoleArgument( "file2" );
$this->input->argumentDefinition[1]->mandatory = false;
$this->input->argumentDefinition[1]->default = "some other file";
$this->input->process(
array( "foo.php", "'some file'" )
);
$this->assertEquals( "some file", $this->input->argumentDefinition["file1"]->value );
$this->assertEquals( "some other file", $this->input->argumentDefinition["file2"]->value );
}
public function testProcessFailureNewArgumentsOptionalNotAvailable()
{
$this->input->argumentDefinition = new ezcConsoleArguments();
$this->input->argumentDefinition[0] = new ezcConsoleArgument( "file1" );
$this->input->argumentDefinition[1] = new ezcConsoleArgument( "file2" );
$this->input->argumentDefinition[1]->mandatory = false;
$args = array( "foo.php" );
$this->commonProcessTestFailure( $args, 'ezcConsoleArgumentMandatoryViolationException' );
}
public function testProcessSuccessNewArgumentsAutoOptionalNotAvailable()
{
$this->input->argumentDefinition = new ezcConsoleArguments();
$this->input->argumentDefinition[0] = new ezcConsoleArgument( "file1" );
$this->input->argumentDefinition[1] = new ezcConsoleArgument( "file2" );
$this->input->argumentDefinition[1]->mandatory = false;
$this->input->argumentDefinition[2] = new ezcConsoleArgument( "file3" );
$this->input->process(
array( "foo.php", "'some file'" )
);
$this->assertEquals( "some file", $this->input->argumentDefinition["file1"]->value );
$this->assertEquals( null, $this->input->argumentDefinition["file2"]->value );
$this->assertEquals( null, $this->input->argumentDefinition["file3"]->value );
}
public function testProcessFailureNewArgumentsAutoOptionalNotAvailable()
{
$this->input->argumentDefinition = new ezcConsoleArguments();
$this->input->argumentDefinition[0] = new ezcConsoleArgument( "file1" );
$this->input->argumentDefinition[1] = new ezcConsoleArgument( "file2" );
$this->input->argumentDefinition[1]->mandatory = false;
$this->input->argumentDefinition[2] = new ezcConsoleArgument( "file3" );
$args = array( "foo.php" );
$this->commonProcessTestFailure( $args, 'ezcConsoleArgumentMandatoryViolationException' );
}
public function testProcessSuccessNewArgumentsMultipleOne()
{
$this->input->argumentDefinition = new ezcConsoleArguments();
$this->input->argumentDefinition[0] = new ezcConsoleArgument( "file1" );
$this->input->argumentDefinition[0]->multiple = true;
$this->input->process(
array( "foo.php", "'some file'", "file", "\"another file\"" )
);
$this->assertEquals( array( "some file", "file", "another file" ), $this->input->argumentDefinition["file1"]->value );
}
public function testProcessFailureNewArgumentsMultipleOne()
{
$this->input->argumentDefinition = new ezcConsoleArguments();
$this->input->argumentDefinition[0] = new ezcConsoleArgument( "file1" );
$this->input->argumentDefinition[0]->multiple = true;
$args = array( "foo.php" );
$this->commonProcessTestFailure( $args, 'ezcConsoleArgumentMandatoryViolationException' );
}
public function testProcessSuccessNewArgumentsMultipleMultiple()
{
$this->input->argumentDefinition = new ezcConsoleArguments();
$this->input->argumentDefinition[0] = new ezcConsoleArgument( "file1" );
$this->input->argumentDefinition[1] = new ezcConsoleArgument( "file2" );
$this->input->argumentDefinition[1]->multiple = true;
$this->input->process(
array( "foo.php", "'some file'", "file", "\"another file\"" )
);
$this->assertEquals( "some file", $this->input->argumentDefinition["file1"]->value );
$this->assertEquals( array( "file", "another file" ), $this->input->argumentDefinition["file2"]->value );
}
public function testProcessFailureNewArgumentsMultipleMultiple()
{
$this->input->argumentDefinition = new ezcConsoleArguments();
$this->input->argumentDefinition[0] = new ezcConsoleArgument( "file1" );
$this->input->argumentDefinition[1] = new ezcConsoleArgument( "file2" );
$this->input->argumentDefinition[1]->multiple = true;
$args = array( "foo.php", "'test'" );
$this->commonProcessTestFailure( $args, 'ezcConsoleArgumentMandatoryViolationException' );
}
public function testProcessSuccessNewArgumentsMultipleOptionalAvailable()
{
$this->input->argumentDefinition = new ezcConsoleArguments();
$this->input->argumentDefinition[0] = new ezcConsoleArgument( "file1" );
$this->input->argumentDefinition[1] = new ezcConsoleArgument( "file2" );
$this->input->argumentDefinition[1]->multiple = true;
$this->input->argumentDefinition[1]->mandatory = false;
$this->input->process(
array( "foo.php", "'some file'", "file", "\"another file\"" )
);
$this->assertEquals( "some file", $this->input->argumentDefinition["file1"]->value );
$this->assertEquals( array( "file", "another file" ), $this->input->argumentDefinition["file2"]->value );
// Old handling
$this->assertEquals( array( "some file", "file", "another file" ), $this->input->getArguments() );
}
public function testProcessSuccessNewArgumentsMultipleOptionalNotAvailable()
{
$this->input->argumentDefinition = new ezcConsoleArguments();
$this->input->argumentDefinition[0] = new ezcConsoleArgument( "file1" );
$this->input->argumentDefinition[1] = new ezcConsoleArgument( "file2" );
$this->input->argumentDefinition[1]->multiple = true;
$this->input->argumentDefinition[1]->mandatory = false;
$this->input->process(
array( "foo.php", "'some file'" )
);
$this->assertEquals( "some file", $this->input->argumentDefinition["file1"]->value );
$this->assertEquals( null, $this->input->argumentDefinition["file2"]->value );
// Old handling
$this->assertEquals( array( "some file" ), $this->input->getArguments() );
}
public function testProcessSuccessNewArgumentsMultipleAutoOptionalAvailable()
{
$this->input->argumentDefinition = new ezcConsoleArguments();
$this->input->argumentDefinition[0] = new ezcConsoleArgument( "file1" );
$this->input->argumentDefinition[0]->mandatory = false;
$this->input->argumentDefinition[1] = new ezcConsoleArgument( "file2" );
$this->input->argumentDefinition[1]->multiple = true;
$this->input->process(
array( "foo.php", "'some file'", "file", "\"another file\"" )
);
$this->assertEquals( "some file", $this->input->argumentDefinition["file1"]->value );
$this->assertEquals( array( "file", "another file" ), $this->input->argumentDefinition["file2"]->value );
// Old handling
$this->assertEquals( array( "some file", "file", "another file" ), $this->input->getArguments() );
}
public function testProcessSuccessNewArgumentsMultipleAutoOptionalNotAvailable()
{
$this->input->argumentDefinition = new ezcConsoleArguments();
$this->input->argumentDefinition[0] = new ezcConsoleArgument( "file1" );
$this->input->argumentDefinition[0]->mandatory = false;
$this->input->argumentDefinition[1] = new ezcConsoleArgument( "file2" );
$this->input->argumentDefinition[1]->multiple = true;
$this->input->process(
array( "foo.php", "'some file'" )
);
$this->assertEquals( "some file", $this->input->argumentDefinition["file1"]->value );
$this->assertEquals( null, $this->input->argumentDefinition["file2"]->value );
// Old handling
$this->assertEquals( array( "some file" ), $this->input->getArguments() );
}
public function testProcessSuccessNewArgumentsMultipleIgnore()
{
$this->input->argumentDefinition = new ezcConsoleArguments();
$this->input->argumentDefinition[0] = new ezcConsoleArgument( "file1" );
$this->input->argumentDefinition[1] = new ezcConsoleArgument( "file2" );
$this->input->argumentDefinition[0]->multiple = true;
$this->input->process(
array( "foo.php", "'some file'", "file", "\"another file\"" )
);
$this->assertEquals( array( "some file", "file", "another file" ), $this->input->argumentDefinition["file1"]->value );
$this->assertEquals( null, $this->input->argumentDefinition["file2"]->value );
// Old handling
$this->assertEquals( array( "some file", "file", "another file" ), $this->input->getArguments() );
}
public function testProcessSuccessNewArgumentsTypeInt()
{
$this->input->argumentDefinition = new ezcConsoleArguments();
$this->input->argumentDefinition[0] = new ezcConsoleArgument( "number" );
$this->input->argumentDefinition[0]->type = ezcConsoleInput::TYPE_INT;
$this->input->process(
array( "foo.php", 23 )
);
$this->assertEquals( 23, $this->input->argumentDefinition["number"]->value );
// Old handling
$this->assertEquals( array( 23 ), $this->input->getArguments() );
}
public function testProcessFailureNewArgumentsTypeInt()
{
$this->input->argumentDefinition = new ezcConsoleArguments();
$this->input->argumentDefinition[0] = new ezcConsoleArgument( "number" );
$this->input->argumentDefinition[0]->type = ezcConsoleInput::TYPE_INT;
$args = array( "foo.php", "'test'" );
$this->commonProcessTestFailure( $args, 'ezcConsoleArgumentTypeViolationException' );
}
public function testProcessSuccessNewArgumentsMultipleTypeInt()
{
$this->input->argumentDefinition = new ezcConsoleArguments();
$this->input->argumentDefinition[0] = new ezcConsoleArgument( "number" );
$this->input->argumentDefinition[0]->type = ezcConsoleInput::TYPE_INT;
$this->input->argumentDefinition[0]->multiple = true;
$this->input->process(
array( "foo.php", 23, 42 )
);
$this->assertEquals( array( 23, 42 ), $this->input->argumentDefinition["number"]->value );
// Old handling
$this->assertEquals( array( 23, 42 ), $this->input->getArguments() );
}
public function testProcessFailureNewArgumentsMultipleTypeInt()
{
$this->input->argumentDefinition = new ezcConsoleArguments();
$this->input->argumentDefinition[0] = new ezcConsoleArgument( "number" );
$this->input->argumentDefinition[0]->type = ezcConsoleInput::TYPE_INT;
$this->input->argumentDefinition[0]->multiple = true;
$args = array( "foo.php", 23, "test" );
$this->commonProcessTestFailure( $args, 'ezcConsoleArgumentTypeViolationException' );
}
public function testProcessSuccessNewArgumentsComplex()
{
$this->input->argumentDefinition = new ezcConsoleArguments();
$this->input->argumentDefinition[0] = new ezcConsoleArgument( "number" );
$this->input->argumentDefinition[0]->type = ezcConsoleInput::TYPE_INT;
$this->input->argumentDefinition[1] = new ezcConsoleArgument( "string" );
$this->input->argumentDefinition[2] = new ezcConsoleArgument( "array" );
$this->input->argumentDefinition[2]->multiple = true;
$args = array( "foo.php", "-o", "'test file'", "-b", "23", "42", "'test string'", "val1", "val2" );
$res = array(
'o' => "test file",
'b' => 23,
);
$this->commonProcessTestSuccess( $args, $res );
$this->assertEquals( 42, $this->input->argumentDefinition["number"]->value );
$this->assertEquals( "test string", $this->input->argumentDefinition["string"]->value );
$this->assertEquals( array( "val1", "val2" ), $this->input->argumentDefinition["array"]->value );
// Old handling
$this->assertEquals( array( 42, "test string", "val1", "val2"), $this->input->getArguments() );
}
public function testProcessSuccessNewArgumentsHelpOptionSet()
{
$this->input->argumentDefinition = new ezcConsoleArguments();
$this->input->argumentDefinition[0] = new ezcConsoleArgument( "number" );
$this->input->argumentDefinition[0]->type = ezcConsoleInput::TYPE_INT;
$this->input->argumentDefinition[1] = new ezcConsoleArgument( "string" );
$this->input->argumentDefinition[2] = new ezcConsoleArgument( "array" );
$this->input->argumentDefinition[2]->multiple = true;
$this->input->getOption( 't' )->isHelpOption = true;
$args = array( "foo.php", "-t" );
$res = array(
't' => true,
);
$this->commonProcessTestSuccess( $args, $res );
$this->assertNull( $this->input->argumentDefinition["number"]->value );
$this->assertNull( $this->input->argumentDefinition["string"]->value );
$this->assertNull( $this->input->argumentDefinition["array"]->value );
$this->assertTrue( $this->input->helpOptionSet() );
// Old handling
$this->assertEquals( array(), $this->input->getArguments() );
}
public function testProcessSuccessNewArgumentsDisallowedSuccess()
{
$this->input->argumentDefinition = new ezcConsoleArguments();
$this->input->argumentDefinition[0] = new ezcConsoleArgument( "number" );
$this->input->argumentDefinition[0]->type = ezcConsoleInput::TYPE_INT;
$this->input->argumentDefinition[1] = new ezcConsoleArgument( "string" );
$this->input->argumentDefinition[2] = new ezcConsoleArgument( "array" );
$this->input->argumentDefinition[2]->multiple = true;
$this->input->getOption( 't' )->arguments = false;
$args = array( "foo.php", "-t" );
$res = array(
't' => true,
);
$this->commonProcessTestSuccess( $args, $res );
$this->assertNull( $this->input->argumentDefinition["number"]->value );
$this->assertNull( $this->input->argumentDefinition["string"]->value );
$this->assertNull( $this->input->argumentDefinition["array"]->value );
// Old handling
$this->assertEquals( array(), $this->input->getArguments() );
}
public function testProcessSuccessNewArgumentsDisallowedFailure()
{
$this->input->argumentDefinition = new ezcConsoleArguments();
$this->input->argumentDefinition[0] = new ezcConsoleArgument( "number" );
$this->input->argumentDefinition[0]->type = ezcConsoleInput::TYPE_INT;
$this->input->argumentDefinition[1] = new ezcConsoleArgument( "string" );
$this->input->argumentDefinition[2] = new ezcConsoleArgument( "array" );
$this->input->argumentDefinition[2]->multiple = true;
$this->input->getOption( 't' )->arguments = false;
$args = array( "foo.php", "-t", "--", "23" );
$res = array(
't' => true,
);
$this->commonProcessTestFailure( $args, "ezcConsoleOptionArgumentsViolationException" );
}
public function testReset()
{
$this->input->argumentDefinition = new ezcConsoleArguments();
$this->input->argumentDefinition[0] = new ezcConsoleArgument( "number" );
$this->input->argumentDefinition[0]->type = ezcConsoleInput::TYPE_INT;
$this->input->argumentDefinition[1] = new ezcConsoleArgument( "string" );
$this->input->argumentDefinition[2] = new ezcConsoleArgument( "array" );
$this->input->argumentDefinition[2]->multiple = true;
$args = array( "foo.php", "-o", "'test file'", "-b", "23", "42", "'test string'", "val1", "val2" );
$res = array(
'o' => "test file",
'b' => 23,
);
$this->commonProcessTestSuccess( $args, $res );
$this->assertEquals( 42, $this->input->argumentDefinition["number"]->value );
$this->assertEquals( "test string", $this->input->argumentDefinition["string"]->value );
$this->assertEquals( array( "val1", "val2" ), $this->input->argumentDefinition["array"]->value );
// Old handling
$this->assertEquals( array( 42, "test string", "val1", "val2"), $this->input->getArguments() );
$this->input->reset();
$this->assertEquals( array(), $this->input->getOptionValues() );
foreach ( $this->input->argumentDefinition as $argument )
{
$this->assertNull( $argument->value );
}
$this->assertEquals( array(), $this->input->getArguments() );
}
public function testProcessTwice()
{
$this->input->argumentDefinition = new ezcConsoleArguments();
$this->input->argumentDefinition[0] = new ezcConsoleArgument( "number" );
$this->input->argumentDefinition[0]->type = ezcConsoleInput::TYPE_INT;
$this->input->argumentDefinition[1] = new ezcConsoleArgument( "string" );
$this->input->argumentDefinition[1]->mandatory = false;
$args = array( "foo.php", "-o", "'test file'", "-b", "23", "42", "'test string'" );
$res = array(
'o' => "test file",
'b' => 23,
);
$this->commonProcessTestSuccess( $args, $res );
$this->assertEquals( 42, $this->input->argumentDefinition["number"]->value );
$this->assertEquals( "test string", $this->input->argumentDefinition["string"]->value );
// Old handling
$this->assertEquals( array( 42, "test string" ), $this->input->getArguments() );
// Second run
$args = array( "foo.php", "-t", '23' );
$res = array(
't' => true
);
$this->commonProcessTestSuccess( $args, $res );
$this->assertEquals( 23, $this->input->argumentDefinition["number"]->value );
$this->assertEquals( null, $this->input->argumentDefinition["string"]->value );
// Old handling
$this->assertEquals( array( '23' ), $this->input->getArguments() );
}
public function testProcessFailureNewArgumentsComplexType()
{
$this->input->argumentDefinition = new ezcConsoleArguments();
$this->input->argumentDefinition[0] = new ezcConsoleArgument( "number" );
$this->input->argumentDefinition[0]->type = ezcConsoleInput::TYPE_INT;
$this->input->argumentDefinition[1] = new ezcConsoleArgument( "string" );
$this->input->argumentDefinition[2] = new ezcConsoleArgument( "array" );
$this->input->argumentDefinition[2]->multiple = true;
$args = array( "foo.php", "-o", "'test file'", "-b", "23", "foo", "'test string'", "val1", "val2" );
$res = array(
'o' => "test file",
'b' => 23,
);
$this->commonProcessTestFailure( $args, 'ezcConsoleArgumentTypeViolationException' );
}
public function testProcessFailureNewArgumentsComplexMissing()
{
$this->input->argumentDefinition = new ezcConsoleArguments();
$this->input->argumentDefinition[0] = new ezcConsoleArgument( "number" );
$this->input->argumentDefinition[0]->type = ezcConsoleInput::TYPE_INT;
$this->input->argumentDefinition[1] = new ezcConsoleArgument( "string" );
$this->input->argumentDefinition[2] = new ezcConsoleArgument( "array" );
$this->input->argumentDefinition[2]->multiple = true;
$args = array( "foo.php", "-o", "'test file'", "-b", "23", "42" );
$res = array(
'o' => "test file",
'b' => 23,
);
$this->commonProcessTestFailure( $args, 'ezcConsoleArgumentMandatoryViolationException' );
}
public function testProcessFailureNewArgumentsComplexMissing_2()
{
$this->input->argumentDefinition = new ezcConsoleArguments();
$this->input->argumentDefinition[0] = new ezcConsoleArgument( "number" );
$this->input->argumentDefinition[0]->type = ezcConsoleInput::TYPE_INT;
$this->input->argumentDefinition[1] = new ezcConsoleArgument( "string" );
$this->input->argumentDefinition[2] = new ezcConsoleArgument( "array" );
$this->input->argumentDefinition[2]->multiple = true;
$args = array( "foo.php", "-o", "'test file'", "-b", "23", "42", "'test string'" );
$res = array(
'o' => "test file",
'b' => 23,
);
$this->commonProcessTestFailure( $args, 'ezcConsoleArgumentMandatoryViolationException' );
}
public function testProcessFailureNewArgumentsSwitchedOff()
{
$this->input->argumentDefinition = new ezcConsoleArguments();
$this->input->argumentDefinition[0] = new ezcConsoleArgument( "number" );
$this->input->argumentDefinition[0]->type = ezcConsoleInput::TYPE_INT;
$args = array( "foo.php", "-v", "--", 23 );
$this->commonProcessTestFailure( $args, 'ezcConsoleOptionArgumentsViolationException' );
}
public function testProcessFailureExistance_1()
{
$args = array(
'foo.php',
'-q',
);
$this->commonProcessTestFailure( $args, 'ezcConsoleOptionNotExistsException' );
}
public function testProcessFailureExistance_2()
{
$args = array(
'foo.php',
'-tools',
);
$this->commonProcessTestFailure( $args, 'ezcConsoleOptionNotExistsException' );
}
public function testProcessFailureExistance_3()
{
$args = array(
'foo.php',
'-testingaeiou',
);
$this->commonProcessTestFailure( $args, 'ezcConsoleOptionNotExistsException' );
}
public function testProcessFailureTypeInt()
{
$args = array(
'foo.php',
'-b',
'not_an_int'
);
$this->commonProcessTestFailure( $args, 'ezcConsoleOptionTypeViolationException' );
}
// Bug #9046: New bug: [ConsoleTools] Last argument not treated invalid option value
public function testProcessNoFailureTypeNone()
{
$args = array(
'foo.php',
'-s',
'a_parameter'
);
$res = array( "s" => true );
$this->commonProcessTestSuccess( $args, $res );
}
public function testProcessFailureTypeNone()
{
$args = array(
'foo.php',
'-s',
'a_parameter',
'another_parameter'
);
$this->commonProcessTestFailure( $args, 'ezcConsoleOptionTypeViolationException' );
}
public function testProcessFailureNovalue()
{
$args = array(
'foo.php',
'-o',
);
$this->commonProcessTestFailure( $args, 'ezcConsoleOptionMissingValueException' );
}
public function testProcessFailureMultiple()
{
$args = array(
'foo.php',
'-d',
'mars',
'--destroy',
'venus',
);
$this->commonProcessTestFailure( $args, 'ezcConsoleOptionTooManyValuesException' );
}
public function testProcessFailureDependencies()
{
$args = array(
'foo.php',
'-t',
// '-o',
// 'bar',
'--build',
23,
'-y',
'text',
'--yank',
'moretext',
'-c' // This one depends on -t, -o, -b and -y
);
$this->commonProcessTestFailure(
$args,
'ezcConsoleOptionDependencyViolationException',
"The option 'console' depends on the option 'original' but this one was not submitted."
);
}
public function testProcessFailureDependencieValues()
{
$rule = new ezcConsoleOptionRule( $this->input->getOption( "y" ), array( "foo", "bar" ) );
$option = new ezcConsoleOption( "x", "execute" );
$option->addDependency( $rule );
$this->input->registerOption( $option );
$args = array(
'foo.php',
'-y',
'baz',
'-x',
);
$this->commonProcessTestFailure(
$args,
'ezcConsoleOptionDependencyViolationException',
"The option 'execute' depends on the option 'yank' to have a value in 'foo, bar' but this one was not submitted."
);
}
public function testProcessFailureExclusions()
{
$args = array(
'foo.php',
'-t',
'-o',
'bar',
'--build',
23,
'--edit' // This one excludes -t and -y
);
$this->commonProcessTestFailure( $args, 'ezcConsoleOptionExclusionViolationException' );
}
public function testProcessFailureExclusionValues()
{
$rule = new ezcConsoleOptionRule( $this->input->getOption( "y" ), array( "foo", "bar" ) );
$option = new ezcConsoleOption( "x", "execute" );
$option->addExclusion( $rule );
$this->input->registerOption( $option );
$args = array(
'foo.php',
'-y',
'bar',
'-x',
);
$this->commonProcessTestFailure( $args, 'ezcConsoleOptionExclusionViolationException' );
}
public function testProcessFailureArguments()
{
$args = array(
'foo.php',
'-t',
'--visual', // This one forbids arguments
'-o',
'bar',
'someargument',
);
$this->commonProcessTestFailure( $args, 'ezcConsoleOptionArgumentsViolationException' );
}
public function testProcessFailureMandatory()
{
$args = array(
'foo.php',
'-s',
);
$this->input->registerOption(
$this->createFakeOption(
array(
'short' => 'q',
'long' => 'quite',
'options' => array(
'mandatory' => true,
),
)
)
);
$this->commonProcessTestFailure( $args, 'ezcConsoleOptionMandatoryViolationException' );
}
public function testGetHelp1()
{
$res = array(
array(
'-t / --testing',
'No help available.',
),
array(
'-s / --subway',
'No help available.',
),
array(
'--carry',
'No help available.',
),
array(
'-v / --visual',
'No help available.',
),
array(
'-o / --original',
'No help available.',
),
array(
'-b / --build',
'No help available.',
),
array(
'-d / --destroy',
'No help available.',
),
array(
'-y / --yank',
'Some stupid short text.',
),
array(
'-c / --console',
'Some stupid short text.',
),
array(
'-e / --edit',
'No help available.',
),
array(
'-n / --new',
'No help available.',
),
);
$this->assertEquals(
$res,
$this->input->getHelp(),
'Help array was not generated correctly.'
);
}
public function testGetHelpWithGrouping()
{
$res = array(
array( 'Section 1', '' ),
array(
'-t / --testing',
'No help available.',
),
array(
'--carry',
'No help available.',
),
array(
'-b / --build',
'No help available.',
),
array( '', '' ),
array( 'Another section', '' ),
array(
'-c / --console',
'Some stupid short text.',
),
array(
'-n / --new',
'No help available.',
),
array(
'-e / --edit',
'No help available.',
),
array( '', '' ),
array( 'Third section', '' ),
array(
'-s / --subway',
'No help available.',
),
array(
'-v / --visual',
'No help available.',
),
array(
'-o / --original',
'No help available.',
),
array(
'-d / --destroy',
'No help available.',
),
array( '', '' ),
array( 'Last section', '' ),
array(
'-y / --yank',
'Some stupid short text.',
),
);
$this->assertEquals(
$res,
$this->input->getHelp(
false,
array(),
array(
'Section 1' => array(
't', 'carry', 'build'
),
'Another section' => array(
'c', 'new', 'edit'
),
'Third section' => array(
'subway', 'v', 'o', 'd',
),
'Last section' => array(
'y',
),
)
),
'Help array was not generated correctly.'
);
}
public function testGetHelpNewArgs()
{
$res = array(
array(
'-t / --testing',
'No help available.',
),
array(
'-s / --subway',
'No help available.',
),
array(
'--carry',
'No help available.',
),
array(
'-v / --visual',
'No help available.',
),
array(
'-o / --original',
'No help available.',
),
array(
'-b / --build',
'No help available.',
),
array(
'-d / --destroy',
'No help available.',
),
array(
'-y / --yank',
'Some stupid short text.',
),
array(
'-c / --console',
'Some stupid short text.',
),
array(
'-e / --edit',
'No help available.',
),
array(
'-n / --new',
'No help available.',
),
array(
"Arguments:",
"",
),
array(
'<string:text>',
'A text.',
),
array(
'<int:number>',
'A number.',
),
);
$this->input->argumentDefinition = new ezcConsoleArguments();
$this->input->argumentDefinition[0] = new ezcConsoleArgument( "text" );
$this->input->argumentDefinition[0]->shorthelp = 'A text.';
$this->input->argumentDefinition[0]->longhelp = 'This argument is a simple text.';
$this->input->argumentDefinition[1] = new ezcConsoleArgument( "number" );
$this->input->argumentDefinition[1]->type = ezcConsoleInput::TYPE_INT;
$this->input->argumentDefinition[1]->shorthelp = 'A number.';
$this->input->argumentDefinition[1]->longhelp = 'This argument is a number.';
$this->assertEquals(
$res,
$this->input->getHelp(),
'Help array was not generated correctly.'
);
}
public function testGetHelp2()
{
$res = array(
array(
'-t / --testing',
'Sorry, there is no help text available for this parameter.',
),
array(
'-s / --subway',
'Sorry, there is no help text available for this parameter.',
),
array(
'--carry',
'Sorry, there is no help text available for this parameter.',
),
array(
'-v / --visual',
'Sorry, there is no help text available for this parameter.',
),
array(
'-o / --original',
'Sorry, there is no help text available for this parameter.',
),
array(
'-b / --build',
'Sorry, there is no help text available for this parameter.',
),
array(
'-d / --destroy',
'Sorry, there is no help text available for this parameter.',
),
array(
'-y / --yank',
'Some even more stupid, but somewhat longer long describtion.',
),
array(
'-c / --console',
'Some even more stupid, but somewhat longer long describtion.',
),
array(
'-e / --edit',
'Sorry, there is no help text available for this parameter.',
),
array(
'-n / --new',
'Sorry, there is no help text available for this parameter.',
),
);
$this->assertEquals(
$res,
$this->input->getHelp( true ),
'Help array was not generated correctly.'
);
}
public function testGetHelp2NewArgs()
{
$res = array(
array(
'-t / --testing',
'Sorry, there is no help text available for this parameter.',
),
array(
'-s / --subway',
'Sorry, there is no help text available for this parameter.',
),
array(
'--carry',
'Sorry, there is no help text available for this parameter.',
),
array(
'-v / --visual',
'Sorry, there is no help text available for this parameter.',
),
array(
'-o / --original',
'Sorry, there is no help text available for this parameter.',
),
array(
'-b / --build',
'Sorry, there is no help text available for this parameter.',
),
array(
'-d / --destroy',
'Sorry, there is no help text available for this parameter.',
),
array(
'-y / --yank',
'Some even more stupid, but somewhat longer long describtion.',
),
array(
'-c / --console',
'Some even more stupid, but somewhat longer long describtion.',
),
array(
'-e / --edit',
'Sorry, there is no help text available for this parameter.',
),
array(
'-n / --new',
'Sorry, there is no help text available for this parameter.',
),
array(
"Arguments:",
"",
),
array(
'<string:text>',
'This argument is a simple text.',
),
array(
'<int:number>',
'This argument is a number.',
),
);
$this->input->argumentDefinition = new ezcConsoleArguments();
$this->input->argumentDefinition[0] = new ezcConsoleArgument( "text" );
$this->input->argumentDefinition[0]->shorthelp = 'A text.';
$this->input->argumentDefinition[0]->longhelp = 'This argument is a simple text.';
$this->input->argumentDefinition[1] = new ezcConsoleArgument( "number" );
$this->input->argumentDefinition[1]->type = ezcConsoleInput::TYPE_INT;
$this->input->argumentDefinition[1]->shorthelp = 'A number.';
$this->input->argumentDefinition[1]->longhelp = 'This argument is a number.';
$this->assertEquals(
$res,
$this->input->getHelp( true ),
'Help array was not generated correctly.'
);
}
public function testGetHelp2NewArgsOptional()
{
$res = array(
array(
'-t / --testing',
'Sorry, there is no help text available for this parameter.',
),
array(
'-s / --subway',
'Sorry, there is no help text available for this parameter.',
),
array(
'--carry',
'Sorry, there is no help text available for this parameter.',
),
array(
'-v / --visual',
'Sorry, there is no help text available for this parameter.',
),
array(
'-o / --original',
'Sorry, there is no help text available for this parameter.',
),
array(
'-b / --build',
'Sorry, there is no help text available for this parameter.',
),
array(
'-d / --destroy',
'Sorry, there is no help text available for this parameter.',
),
array(
'-y / --yank',
'Some even more stupid, but somewhat longer long describtion.',
),
array(
'-c / --console',
'Some even more stupid, but somewhat longer long describtion.',
),
array(
'-e / --edit',
'Sorry, there is no help text available for this parameter.',
),
array(
'-n / --new',
'Sorry, there is no help text available for this parameter.',
),
array(
"Arguments:",
"",
),
array(
'<string:text>',
'This argument is a simple text. (optional)',
),
array(
'<int:number>',
"This argument is a number. (optional, default = '23')",
),
array(
'<string:misc>',
"Testing multiple values. (optional, default = 'foo' 'bar' 'baz')",
),
);
$this->input->argumentDefinition = new ezcConsoleArguments();
$this->input->argumentDefinition[0] = new ezcConsoleArgument( "text" );
$this->input->argumentDefinition[0]->shorthelp = 'A text.';
$this->input->argumentDefinition[0]->longhelp = 'This argument is a simple text.';
$this->input->argumentDefinition[0]->mandatory = false;
$this->input->argumentDefinition[1] = new ezcConsoleArgument( "number" );
$this->input->argumentDefinition[1]->type = ezcConsoleInput::TYPE_INT;
$this->input->argumentDefinition[1]->shorthelp = 'A number.';
$this->input->argumentDefinition[1]->longhelp = 'This argument is a number.';
$this->input->argumentDefinition[1]->mandatory = false;
$this->input->argumentDefinition[1]->default = 23;
$this->input->argumentDefinition[2] = new ezcConsoleArgument( "misc" );
$this->input->argumentDefinition[2]->shorthelp = 'A misc argument.';
$this->input->argumentDefinition[2]->longhelp = 'Testing multiple values.';
$this->input->argumentDefinition[2]->multiple = true;
$this->input->argumentDefinition[2]->mandatory = false;
$this->input->argumentDefinition[2]->default = array( "foo", "bar", "baz" );
$this->assertEquals(
$res,
$this->input->getHelp( true ),
'Help array was not generated correctly.'
);
}
public function testGetHelp3()
{
$res = array(
array(
'-t / --testing',
'No help available.',
),
array(
'-s / --subway',
'No help available.',
),
array(
'-v / --visual',
'No help available.',
),
);
$this->assertEquals(
$res,
$this->input->getHelp(false, array( 't', 's', 'v' ) ),
'Help array was not generated correctly.'
);
}
public function testGetHelp4()
{
$res = array(
array(
'-t / --testing',
'Sorry, there is no help text available for this parameter.',
),
array(
'-s / --subway',
'Sorry, there is no help text available for this parameter.',
),
array(
'-y / --yank',
'Some even more stupid, but somewhat longer long describtion.',
),
array(
'-e / --edit',
'Sorry, there is no help text available for this parameter.',
),
array(
'-n / --new',
'Sorry, there is no help text available for this parameter.',
),
);
$this->assertEquals(
$res,
$this->input->getHelp( true, array( 't', 'subway', 'yank', 'e', 'n' ) ),
'Help array was not generated correctly.'
);
}
public function testGetSynopsis()
{
$this->assertEquals(
'$ '.$_SERVER['argv'][0].' [-t] [-s] [--carry] [-v] [-o <string>] [-b 42] [-d "world"] [-y <string>] [-c] [-e] [-n] [[--] <args>]',
$this->input->getSynopsis(),
'Program synopsis not generated correctly.'
);
}
// Issue #012561 : getSynopsis() bugs when at least 2 options don't have short-names.
public function testGetSynopsisLongOptionsWithoutShortNames()
{
$input = new ezcConsoleInput();
$input->registerOption(
new ezcConsoleOption(
"",
"set-dericktory",
ezcConsoleInput::TYPE_NONE
)
);
$input->registerOption(
new ezcConsoleOption(
"",
"set-directoby",
ezcConsoleInput::TYPE_NONE
)
);
$this->assertEquals(
'$ '.$_SERVER['argv'][0].' [--set-dericktory] [--set-directoby] [[--] <args>]',
$input->getSynopsis(),
'Program synopsis not generated correctly.'
);
}
public function testGetSynopsisNewArgumentsSimple()
{
$this->input->argumentDefinition = new ezcConsoleArguments();
$this->input->argumentDefinition[0] = new ezcConsoleArgument( "text" );
$this->input->argumentDefinition[1] = new ezcConsoleArgument( "number" );
$this->input->argumentDefinition[1]->type = ezcConsoleInput::TYPE_INT;
$this->assertEquals(
'$ '.$_SERVER['argv'][0].' [-t] [-s] [--carry] [-v] [-o <string>] [-b 42] [-d "world"] [-y <string>] [-c] [-e] [-n] [--] <string:text> <int:number>',
$this->input->getSynopsis(),
'Program synopsis not generated correctly.'
);
}
public function testGetSynopsisNewArgumentsMultiple()
{
$this->input->argumentDefinition = new ezcConsoleArguments();
$this->input->argumentDefinition[0] = new ezcConsoleArgument( "text" );
$this->input->argumentDefinition[1] = new ezcConsoleArgument( "number" );
$this->input->argumentDefinition[1]->type = ezcConsoleInput::TYPE_INT;
$this->input->argumentDefinition[1]->multiple = true;
$this->assertEquals(
'$ '.$_SERVER['argv'][0].' [-t] [-s] [--carry] [-v] [-o <string>] [-b 42] [-d "world"] [-y <string>] [-c] [-e] [-n] [--] <string:text> <int:number> [<int:number> ...]',
$this->input->getSynopsis(),
'Program synopsis not generated correctly.'
);
}
public function testGetSynopsisNewArgumentsOptional()
{
$this->input->argumentDefinition = new ezcConsoleArguments();
$this->input->argumentDefinition[0] = new ezcConsoleArgument( "text" );
$this->input->argumentDefinition[1] = new ezcConsoleArgument( "number" );
$this->input->argumentDefinition[1]->type = ezcConsoleInput::TYPE_INT;
$this->input->argumentDefinition[1]->mandatory = false;
$this->assertEquals(
'$ '.$_SERVER['argv'][0].' [-t] [-s] [--carry] [-v] [-o <string>] [-b 42] [-d "world"] [-y <string>] [-c] [-e] [-n] [--] <string:text> [<int:number>]',
$this->input->getSynopsis(),
'Program synopsis not generated correctly.'
);
}
public function testGetSynopsisNewArgumentsMultipleOptional()
{
$this->input->argumentDefinition = new ezcConsoleArguments();
$this->input->argumentDefinition[0] = new ezcConsoleArgument( "text" );
$this->input->argumentDefinition[0]->mandatory = false;
$this->input->argumentDefinition[1] = new ezcConsoleArgument( "number" );
$this->input->argumentDefinition[1]->type = ezcConsoleInput::TYPE_INT;
$this->input->argumentDefinition[1]->multiple = true;
$this->assertEquals(
'$ '.$_SERVER['argv'][0].' [-t] [-s] [--carry] [-v] [-o <string>] [-b 42] [-d "world"] [-y <string>] [-c] [-e] [-n] [--] [<string:text>] [<int:number>] [<int:number> ...]',
$this->input->getSynopsis(),
'Program synopsis not generated correctly.'
);
}
public function testGetHelpTable()
{
$output = new ezcConsoleOutput();
$res = new ezcConsoleTable( $output, 80 );
$res[0][0]->content = '-t / --testing';
$res[0][1]->content = 'Sorry, there is no help text available for this parameter.';
$res[1][0]->content = '-s / --subway';
$res[1][1]->content = 'Sorry, there is no help text available for this parameter.';
$res[2][0]->content = '-y / --yank';
$res[2][1]->content = 'Some even more stupid, but somewhat longer long describtion.';
$res[3][0]->content = '-e / --edit';
$res[3][1]->content = 'Sorry, there is no help text available for this parameter.';
$table = new ezcConsoleTable( $output, 80 );
$table = $this->input->getHelpTable( $table, true, array( 't', 'subway', 'yank', 'e' ) );
$this->assertEquals(
$res,
$table,
'Help table not generated correctly.'
);
}
public function testGetHelpTableGrouping()
{
$output = new ezcConsoleOutput();
$res = new ezcConsoleTable( $output, 80 );
$res[0][0]->content = 'Section uno';
$res[0][1]->content = '';
$res[1][0]->content = '-t / --testing';
$res[1][1]->content = 'Sorry, there is no help text available for this parameter.';
$res[2][0]->content = '';
$res[2][1]->content = '';
$res[3][0]->content = 'Section 2';
$res[3][1]->content = '';
$res[4][0]->content = '-e / --edit';
$res[4][1]->content = 'Sorry, there is no help text available for this parameter.';
$res[5][0]->content = '-s / --subway';
$res[5][1]->content = 'Sorry, there is no help text available for this parameter.';
$res[6][0]->content = '';
$res[6][1]->content = '';
$res[7][0]->content = 'Final section';
$res[7][1]->content = '';
$res[8][0]->content = '-y / --yank';
$res[8][1]->content = 'Some even more stupid, but somewhat longer long describtion.';
$table = new ezcConsoleTable( $output, 80 );
$table = $this->input->getHelpTable(
$table,
true,
array( 't', 'subway', 'yank', 'e' ),
array(
'Section uno' => array(
't'
),
'Section 2' => array(
'e', 'subway'
),
'Final section' => array(
'y',
),
)
);
$this->assertEquals(
$res,
$table,
'Help table not generated correctly.'
);
}
public function testGetHelpTableDefaultParameters()
{
$output = new ezcConsoleOutput();
$res = new ezcConsoleTable( $output, 80 );
$res[0][0]->content = '-t / --testing';
$res[0][1]->content = 'Sorry, there is no help text available for this parameter.';
$res[1][0]->content = '-s / --subway';
$res[1][1]->content = 'Sorry, there is no help text available for this parameter.';
$res[2][0]->content = '-y / --yank';
$res[2][1]->content = 'Some even more stupid, but somewhat longer long describtion.';
$res[3][0]->content = '-e / --edit';
$res[3][1]->content = 'Sorry, there is no help text available for this parameter.';
$table = new ezcConsoleTable( $output, 80 );
$table = $this->input->getHelpTable( $table );
$this->assertEquals( 11, sizeof( $table ), "Expected 11 elements in the generated HelpTable" );
}
public function testGetHelpTextBinarySafe()
{
$input = new ezcConsoleInput();
$input->registerOption(
new ezcConsoleOption(
'ö',
'öder',
ezcConsoleInput::TYPE_NONE,
null,
false,
'ööö äää ööö äää',
'ööö äää ööö äää ööö äää ööö äää ööö äää ööö äää'
)
);
$res = "Usage: $ {$_SERVER['argv'][0]} [-ö] [[--] <args>]" . PHP_EOL
. 'Test with UTF-8' . PHP_EOL
. 'characters...' . PHP_EOL
. '' . PHP_EOL
. '-ö / --öder ööö äää' . PHP_EOL
. ' ööö äää' . PHP_EOL
. ' ööö äää' . PHP_EOL
. ' ööö äää' . PHP_EOL
. ' ööö äää' . PHP_EOL
. ' ööö äää' . PHP_EOL;
$this->assertEquals(
$res,
$input->getHelpText( 'Test with UTF-8 characters...', 20, true ),
'Help text not generated correctly.'
);
}
public function testGetHelpText()
{
$res = "Usage: $ {$_SERVER['argv'][0]} [-y <string>] [-e] [[--] <args>]" . PHP_EOL
. 'Lala' . PHP_EOL
. '' . PHP_EOL
. '-y / --yank Some' . PHP_EOL
. ' even' . PHP_EOL
. ' more' . PHP_EOL
. ' stupid,' . PHP_EOL
. ' but' . PHP_EOL
. ' somewhat' . PHP_EOL
. ' longer' . PHP_EOL
. ' long' . PHP_EOL
. ' describtion.' . PHP_EOL
. '-e / --edit Sorry,' . PHP_EOL
. ' there' . PHP_EOL
. ' is no' . PHP_EOL
. ' help' . PHP_EOL
. ' text' . PHP_EOL
. ' available' . PHP_EOL
. ' for' . PHP_EOL
. ' this' . PHP_EOL
. ' parameter.' . PHP_EOL;
$this->assertEquals(
$res,
$this->input->getHelpText( 'Lala', 20, true, array( 'e', 'y' ) ),
'Help text not generated correctly.'
);
}
public function testGetSynopsis1()
{
$this->assertEquals(
'$ '.$_SERVER['argv'][0].' [-t] [-s] [-o <string>] [[--] <args>]',
$this->input->getSynopsis( array( 't', 's', 'o' ) ),
'Program synopsis not generated correctly.'
);
}
/**
* Tests bug #7923.
*
* @return void
*/
public function testGetSynopsis2()
{
$this->assertEquals(
'$ '.$_SERVER['argv'][0].' [-t] [-s] [-v] [[--] <args>]',
$this->input->getSynopsis( array( 't', 's', 'v' ) ),
'Program synopsis not generated correctly.'
);
}
public function testGetSynopsis3()
{
$this->assertEquals(
'$ ' . $_SERVER['argv'][0] . ' [-s] [-b 42] [[--] <args>]',
$this->input->getSynopsis( array( 'b', 's' ) ),
'Program synopsis not generated correctly.'
);
}
public function testGetSynopsis4()
{
$this->input->registerOption(
new ezcConsoleOption(
"x",
"execute",
ezcConsoleInput::TYPE_INT
)
);
$this->assertEquals(
'$ ' . $_SERVER['argv'][0] . ' [-s] [-x <int>] [[--] <args>]',
$this->input->getSynopsis( array( 'x', 's' ) ),
'Program synopsis not generated correctly.'
);
}
public function testHelpOptionSet()
{
$args = array(
'foo.php',
'-h',
);
$this->input->registerOption(
$this->createFakeOption(
array(
'short' => 'q',
'long' => 'quite',
'options' => array(
'mandatory' => true,
),
)
)
);
$this->input->registerOption(
$this->createFakeOption(
array(
'short' => 'h',
'long' => 'help',
'options' => array(
'isHelpOption' => true,
),
)
)
);
$res = array(
'h' => true,
);
$this->assertFalse( $this->input->helpOptionSet(), "Help option seems to be set, algthough nothing was processed." );
$this->commonProcessTestSuccess( $args, $res );
$this->assertTrue( $this->input->helpOptionSet(), "Help option seems not to be set, algthough it was." );
}
public function testDependOptionNoShortName()
{
$inputOpt = $this->input->registerOption(
new ezcConsoleOption( '', 'input' )
);
$outputOpt = $this->input->registerOption(
new ezcConsoleOption( '', 'output' )
);
$inputOpt->addDependency(
new ezcConsoleOptionRule( $outputOpt )
);
$outputOpt->addDependency(
new ezcConsoleOptionRule( $inputOpt )
);
$args = array( 'somescript', '--input' );
try
{
$this->input->process( $args );
$this->fail( 'Processing did not throw an exception on violated dependency.' );
} catch ( ezcConsoleOptionDependencyViolationException $e ) {}
$args = array( 'somescript', '--output' );
try
{
$this->input->process( $args );
$this->fail( 'Processing did not throw an exception on violated dependency.' );
} catch ( ezcConsoleOptionDependencyViolationException $e ) {}
}
// Issue #014803: Problem with ezcConsoleOption when short option name is empty
public function testExcludeOptionNoShortName()
{
$inputOpt = $this->input->registerOption(
new ezcConsoleOption( '', 'input' )
);
$outputOpt = $this->input->registerOption(
new ezcConsoleOption( '', 'output' )
);
$inputOpt->addExclusion(
new ezcConsoleOptionRule( $outputOpt )
);
$outputOpt->addExclusion(
new ezcConsoleOptionRule( $inputOpt )
);
$args = array( 'somescript', '--input' );
// Should not throw an exception
$this->input->process( $args );
$args = array( 'somescript', '--output' );
// Should not throw an exception
$this->input->process( $args );
}
public function testDependOptionValueNotSetNoShortName()
{
$inputOpt = $this->input->registerOption(
new ezcConsoleOption( '', 'input' )
);
$outputOpt = $this->input->registerOption(
new ezcConsoleOption( '', 'output' )
);
$inputOpt->addDependency(
new ezcConsoleOptionRule( $outputOpt, array( 'foo', 'bar' ) )
);
$outputOpt->addDependency(
new ezcConsoleOptionRule( $inputOpt, array( 'foo', 'bar' ) )
);
$args = array( 'somescript', '--input' );
try
{
$this->input->process( $args );
$this->fail( 'Processing did not throw an exception on violated dependency.' );
} catch ( ezcConsoleOptionDependencyViolationException $e ) {}
$args = array( 'somescript', '--output' );
try
{
$this->input->process( $args );
$this->fail( 'Processing did not throw an exception on violated dependency.' );
} catch ( ezcConsoleOptionDependencyViolationException $e ) {}
}
public function testDependOptionValueWrongValueNoShortName()
{
$inputOpt = $this->input->registerOption(
new ezcConsoleOption( '', 'input', ezcConsoleInput::TYPE_STRING )
);
$outputOpt = $this->input->registerOption(
new ezcConsoleOption( '', 'output', ezcConsoleInput::TYPE_STRING )
);
$inputOpt->addDependency(
new ezcConsoleOptionRule( $outputOpt, array( 'foo', 'bar' ) )
);
$outputOpt->addDependency(
new ezcConsoleOptionRule( $inputOpt, array( 'foo', 'bar' ) )
);
$args = array( 'somescript', '--output=lala', '--input=lala' );
try
{
$this->input->process( $args );
$this->fail( 'Processing did not throw an exception on violated dependency.' );
} catch ( ezcConsoleOptionDependencyViolationException $e ) {}
$args = array( 'somescript', '--input=lala', '--output=lala' );
try
{
$this->input->process( $args );
$this->fail( 'Processing did not throw an exception on violated dependency.' );
} catch ( ezcConsoleOptionDependencyViolationException $e ) {}
}
public function testExcludeOptionValueWrongValueNoShortName()
{
$inputOpt = $this->input->registerOption(
new ezcConsoleOption( '', 'input', ezcConsoleInput::TYPE_STRING )
);
$outputOpt = $this->input->registerOption(
new ezcConsoleOption( '', 'output', ezcConsoleInput::TYPE_STRING )
);
$inputOpt->addExclusion(
new ezcConsoleOptionRule( $outputOpt, array( 'foo', 'bar' ) )
);
$outputOpt->addExclusion(
new ezcConsoleOptionRule( $inputOpt, array( 'foo', 'bar' ) )
);
$args = array( 'somescript', '--output=foo', '--input=lala' );
try
{
$this->input->process( $args );
$this->fail( 'Processing did not throw an exception on violated exclusion.' );
}
catch ( ezcConsoleOptionExclusionViolationException $e )
{
$this->assertEquals(
"The option 'input' excludes the option 'output' to have a value in 'foo, bar' but this one was submitted.",
$e->getMessage()
);
}
$args = array( 'somescript', '--output=lala', '--input=bar' );
try
{
$this->input->process( $args );
$this->fail( 'Processing did not throw an exception on violated dependency.' );
}
catch ( ezcConsoleOptionExclusionViolationException $e )
{
$this->assertEquals(
"The option 'output' excludes the option 'input' to have a value in 'foo, bar' but this one was submitted.",
$e->getMessage()
);
}
}
public function testDependencyOptionNotSet()
{
$aOpt = $this->input->registerOption(
new ezcConsoleOption( 'a', 'abbrev', ezcConsoleInput::TYPE_NONE )
);
$aOpt->addDependency(
new ezcConsoleOptionRule( $this->input->getOption( 't' ), array(), false )
);
$this->commonProcessTestFailure(
array(
'foo.php'
),
'ezcConsoleOptionDependencyViolationException'
);
}
public function testExclusionOptionNotSet()
{
$aOpt = $this->input->registerOption(
new ezcConsoleOption( 'a', 'abbrev', ezcConsoleInput::TYPE_NONE )
);
$aOpt->addExclusion(
new ezcConsoleOptionRule( $this->input->getOption( 't' ), array(), false )
);
$this->commonProcessTestFailure(
array(
'foo.php',
'-t'
),
'ezcConsoleOptionExclusionViolationException'
);
}
private function commonProcessTestSuccess( $args, $res )
{
$this->input->process( $args );
$values = $this->input->getOptionValues();
$this->assertTrue( count( array_diff( $res, $values ) ) == 0, 'Parameters processed incorrectly.' );
}
private function commonProcessTestFailure( $args, $exceptionClass, $message = null )
{
try
{
$this->input->process( $args );
}
catch ( ezcConsoleException $e )
{
$this->assertSame(
$exceptionClass,
get_class( $e ),
'Wrong exception thrown for invalid parameter submission. Expected class <'.$exceptionClass.'>, received <'.get_class( $e ).'>'
);
if ( $message !== null )
{
$this->assertEquals(
$message,
$e->getMessage(),
'Exception message incorrect.'
);
}
return;
}
$this->fail( 'Exception not thrown for invalid parameter submition.' );
}
private function argumentsProcessTestSuccess( $args, $res )
{
$this->input->process( $args );
$this->assertEquals(
$res,
$this->input->getArguments(),
'Arguments not parsed correctly.'
);
}
}
?>