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

175 lines
4.7 KiB
PHP

<?php
namespace nulib\app\cli;
use nur\t\TestCase;
class SimpleArgsParserTest extends TestCase {
const NORMALIZE_ARGS = [
["-a"],
["--longb"],
["-c", "--longc"],
["-x", "--x1"],
["-x", "--x2"],
["-n", "--none"],
["-m:", "--mandatory"],
["-o::", "--optional"],
["--mo02:", "args" => [["value", "value"]]],
["--mo12:", "args" => ["value", ["value"]]],
["--mo22:", "args" => ["value", "value"]],
];
const NORMALIZE_TESTS = [
[], ["--"],
["--"], ["--"],
["--", "--"], ["--", "--"],
["-aa"], ["-a", "-a", "--"],
["a", "b"], ["--", "a", "b"],
["-a", "--ma", "x", "a", "--ma=y", "b"], ["-a", "--mandatory", "x", "--mandatory", "y", "--", "a", "b"],
["-mx", "-m", "y"], ["-m", "x", "-m", "y", "--"],
["-ox", "-o", "y"], ["-ox", "-o", "--", "y"],
["-a", "--", "-a", "-c"], ["-a", "--", "-a", "-c"],
# -a et -b doivent être considérés comme arguments, -n comme option
["--mo02"], ["--mo02", "--", "--"],
["--mo02", "-a"], ["--mo02", "-a", "--", "--"],
["--mo02", "--"], ["--mo02", "--", "--"],
["--mo02", "--", "-n"], ["--mo02", "--", "-n", "--"],
["--mo02", "--", "--", "-b"], ["--mo02", "--", "--", "-b"],
#
["--mo02", "-a"], ["--mo02", "-a", "--", "--"],
["--mo02", "-a", "-a"], ["--mo02", "-a", "-a", "--"],
["--mo02", "-a", "--"], ["--mo02", "-a", "--", "--"],
["--mo02", "-a", "--", "-n"], ["--mo02", "-a", "--", "-n", "--"],
["--mo02", "-a", "--", "--", "-b"], ["--mo02", "-a", "--", "--", "-b"],
[
"--mo02", "--",
"--mo02", "x", "--",
"--mo02", "x", "y",
"--mo12", "x", "--",
"--mo12", "x", "y",
"--mo22", "x", "y",
"z",
], [
"--mo02", "--",
"--mo02", "x", "--",
"--mo02", "x", "y",
"--mo12", "x", "--",
"--mo12", "x", "y",
"--mo22", "x", "y",
"--",
"z",
],
];
function testNormalize() {
$parser = new SimpleArgsParser(self::NORMALIZE_ARGS);
$count = count(self::NORMALIZE_TESTS);
for ($i = 0; $i < $count; $i += 2) {
$args = self::NORMALIZE_TESTS[$i];
$expected = self::NORMALIZE_TESTS[$i + 1];
$normalized = $parser->normalize($args);
self::assertSame($expected, $normalized
, "for ".var_export($args, true)
.", normalized is ".var_export($normalized, true)
);
}
}
function testArgsNone() {
$parser = new SimpleArgsParser([
["-z"],
["-a"],
["-b"],
["-c",],
["-d", "value" => 42],
]);
$dest = []; $parser->parse($dest, ["-a", "-bb", "-ccc", "-dddd"]);
self::assertSame(null, $dest["z"] ?? null);
self::assertSame(1, $dest["a"] ?? null);
self::assertSame(2, $dest["b"] ?? null);
self::assertSame(3, $dest["c"] ?? null);
self::assertSame(42, $dest["d"] ?? null);
self::assertTrue(true);
}
function testArgsMandatory() {
$parser = new SimpleArgsParser([
["-z:"],
["-a:"],
["-b:"],
["-c:", "value" => 42],
]);
$dest = []; $parser->parse($dest, [
"-a",
"-bb",
"-c",
"-c15",
"-c30",
"-c45",
]);
self::assertSame(null, $dest["z"] ?? null);
self::assertSame("-bb", $dest["a"] ?? null);
self::assertSame(null, $dest["b"] ?? null);
self::assertSame("45", $dest["c"] ?? null);
self::assertTrue(true);
}
function testArgsOptional() {
$parser = new SimpleArgsParser([
["-z::"],
["-a::"],
["-b::"],
["-c::", "value" => 42],
["-d::", "value" => 42],
]);
$dest = []; $parser->parse($dest, [
"-a",
"-bb",
"-c",
"-d15",
"-d30",
]);
self::assertSame(null, $dest["z"] ?? null);
self::assertSame(null, $dest["a"] ?? null);
self::assertSame("b", $dest["b"] ?? null);
self::assertSame(42, $dest["c"] ?? null);
self::assertSame("30", $dest["d"] ?? null);
self::assertTrue(true);
}
function testRemains() {
$parser = new SimpleArgsParser([]);
$dest = []; $parser->parse($dest, ["x", "y"]);
self::assertSame(["x", "y"], $dest["args"] ?? null);
}
function test() {
$parser = new SimpleArgsParser([
["-n", "--none"],
["-m:", "--mandatory"],
["-o::", "--optional"],
["--mo02:", "args" => [["value", "value"]]],
["--mo12:", "args" => ["value", ["value"]]],
["--mo22:", "args" => ["value", "value"]],
]);
$parser->parse($dest, [
"--mo02", "--",
"--mo02", "x", "--",
"--mo02", "x", "y",
"--mo12", "x", "--",
"--mo12", "x", "y",
"--mo22", "x", "y",
"z",
]);
self::assertTrue(true);
}
}