nur-ture/tests/app/cli/ArgDefTest.php

212 lines
5.5 KiB
PHP

<?php
namespace nulib\app\cli;
use nur\t\TestCase;
class ArgDefTest extends TestCase {
protected static function assertArg(
ArgDef $argDef,
array $options,
bool $haveShortOptions, bool $haveLongOptions, bool $isCommand,
bool $haveArgs, ?int $minArgs, ?int $maxArgs, ?string $argsdesc
) {
$argDef->processOptions();
$argDef->processArgs();
$argDef->processAction();
var_export($argDef->debugInfos()); #XXX
self::assertSame($options, $argDef->getOptions());
self::assertSame($haveShortOptions, $argDef->haveShortOptions, "haveShortOptions");
self::assertSame($haveLongOptions, $argDef->haveLongOptions, "haveLongOptions");
self::assertSame($isCommand, $argDef->isCommand, "isCommand");
self::assertSame($haveArgs, $argDef->haveArgs, "haveArgs");
self::assertSame($minArgs, $argDef->minArgs, "minArgs");
self::assertSame($maxArgs, $argDef->maxArgs, "maxArgs");
self::assertSame($argsdesc, $argDef->argsdesc, "argsdesc");
}
function testArgsNone() {
$argDef = new ArgDef(["-o"]);
self::assertArg($argDef,
["-o"],
true, false, false,
false, 0, 0, "");
$argDef = new ArgDef(["--longo"]);
self::assertArg($argDef,
["--longo"],
false, true, false,
false, 0, 0, "");
$argDef = new ArgDef(["-o", "--longo"]);
self::assertArg($argDef,
["-o", "--longo"],
true, true, false,
false, 0, 0, "");
}
function testArgsMandatory() {
$argDef = new ArgDef(["-o:", "--longo"]);
self::assertArg($argDef,
["-o", "--longo"],
true, true, false,
true, 1, 1, "VALUE");
$argDef = new ArgDef(["-a:", "-b:"]);
self::assertArg($argDef,
["-a", "-b"],
true, false, false,
true, 1, 1, "VALUE");
$argDef = new ArgDef(["-a:", "-b::"]);
self::assertArg($argDef,
["-a", "-b"],
true, false, false,
true, 1, 1, "VALUE");
$argDef = new ArgDef(["-a::", "-b:"]);
self::assertArg($argDef,
["-a", "-b"],
true, false, false,
true, 1, 1, "VALUE");
$argDef = new ArgDef(["-o", "--longo", "args" => true]);
self::assertArg($argDef,
["-o", "--longo"],
true, true, false,
true, 1, 1, "VALUE");
$argDef = new ArgDef(["-o", "--longo", "args" => 1]);
self::assertArg($argDef,
["-o", "--longo"],
true, true, false,
true, 1, 1, "VALUE");
$argDef = new ArgDef(["-o", "--longo", "args" => "value"]);
self::assertArg($argDef,
["-o", "--longo"],
true, true, false,
true, 1, 1, "VALUE");
$argDef = new ArgDef(["-o", "--longo", "args" => ["value"]]);
self::assertArg($argDef,
["-o", "--longo"],
true, true, false,
true, 1, 1, "VALUE");
}
function testArgsOptional() {
$argDef = new ArgDef(["-o::", "--longo"]);
self::assertArg($argDef,
["-o", "--longo"],
true, true, false,
true, 0, 1, "[VALUE]");
$argDef = new ArgDef(["-o", "--longo", "args" => [["value"]]]);
self::assertArg($argDef,
["-o", "--longo"],
true, true, false,
true, 0, 1, "[VALUE]");
$argDef = new ArgDef(["-o", "--longo", "args" => [[null]]]);
self::assertArg($argDef,
["-o", "--longo"],
true, true, false,
true, 0, PHP_INT_MAX, "[VALUEs...]");
$argDef = new ArgDef(["-o", "--longo", "args" => ["value", null]]);
self::assertArg($argDef,
["-o", "--longo"],
true, true, false,
true, 1, PHP_INT_MAX, "VALUE [VALUEs...]");
$argDef = new ArgDef(["-o", "--longo", "args" => "*"]);
self::assertArg($argDef,
["-o", "--longo"],
true, true, false,
true, 0, PHP_INT_MAX, "[VALUEs...]");
$argDef = new ArgDef(["-o", "--longo", "args" => "+"]);
self::assertArg($argDef,
["-o", "--longo"],
true, true, false,
true, 1, PHP_INT_MAX, "VALUE [VALUEs...]");
}
function testMerge() {
$BASE = ["-o:", "--longo"];
$argDef = new ArgDef([
"merge" => $BASE,
"add" => ["-a", "--longa"],
"remove" => ["-o", "--longo"],
]);
self::assertArg($argDef,
["-a", "--longa"],
true, true, false,
false, 0, 0, "");
$argDef = new ArgDef([
"merge" => $BASE,
"add" => ["-a", "--longa"],
"remove" => ["-o", "--longo"],
"-x",
]);
self::assertArg($argDef,
["-a", "--longa", "-x"],
true, true, false,
false, 0, 0, "");
}
function testOverride() {
$argDefs = new SimpleArgDefs([
["-o", "--longx"],
"merge" => [
["-o", "--longo"],
],
]);
var_export($argDefs->debugInfos()); #XXX
$argDefs = new SimpleArgDefs([
["-o", "--longo"],
["-o", "--longx"],
]);
var_export($argDefs->debugInfos()); #XXX
$argDefs = new SimpleArgDefs([
["-o", "--longo"],
["-o"],
["--longo"],
]);
var_export($argDefs->debugInfos()); #XXX
self::assertTrue(true);
}
function testExtends() {
$ARGS1 = [
["-o:", "--longo",
"name" => "desto",
"help" => "help longo"
],
["-a:", "--longa",
"name" => "desta",
"help" => "help longa"
],
];
$ARGS2 = [
"merge" => $ARGS1,
["extends" => "-a",
"remove" => ["--longa"],
"add" => ["--desta"],
"help" => "help desta"
],
];
//$argDefs1 = new SimpleArgDefs($ARGS1);
//var_export($argDefs1->debugInfos()); #XXX
$argDefs2 = new SimpleArgDefs($ARGS2);
var_export($argDefs2->debugInfos()); #XXX
self::assertTrue(true);
}
}