bug
This commit is contained in:
parent
4494c8ecc3
commit
8d9b4d7949
|
@ -348,13 +348,16 @@ class ArgsParser {
|
|||
$have_remains = false;
|
||||
$have_help = false;
|
||||
|
||||
$sections[] = $this->buildSection([], $defs, $meta, $sdefs, $ldefs, $cdefs, $rdef, $have_remains, $have_help);
|
||||
if ($msections !== null) {
|
||||
foreach ($msections as $section) {
|
||||
[$defs, $section] = A::split_assoc($section);
|
||||
$sections[] = $this->buildSection($section, $defs, $meta, $sdefs, $ldefs, $cdefs, $rdef, $have_remains, $have_help);
|
||||
foreach ($msections as $msection) {
|
||||
[$mdefs, $msection] = A::split_assoc($msection);
|
||||
$sections[] = $this->buildSection($msection, $mdefs, $meta, $sdefs, $ldefs, $cdefs, $rdef, $have_remains, $have_help);
|
||||
}
|
||||
}
|
||||
# calculer la section par défaut à la fin, pour qu'elle puisse surcharger
|
||||
# des options définies précédemment. par contre, il faut la mettre au début
|
||||
# du tableau $sections
|
||||
array_unshift($sections, $this->buildSection([], $defs, $meta, $sdefs, $ldefs, $cdefs, $rdef, $have_remains, $have_help));
|
||||
|
||||
if (!$have_remains && $autoremains) {
|
||||
$def = [
|
||||
|
|
|
@ -0,0 +1,39 @@
|
|||
<?php # -*- coding: utf-8 mode: php -*- vim:sw=2:sts=2:et:ai:si:sta:fenc=utf-8
|
||||
require(__DIR__.'/../../vendor/autoload.php');
|
||||
|
||||
use nur\cli\Application;
|
||||
use nur\sery\output\msg;
|
||||
|
||||
class TestArgs4 extends Application {
|
||||
protected $query;
|
||||
|
||||
function main() {
|
||||
msg::info(["query=", $this->query]);
|
||||
}
|
||||
}
|
||||
if (getenv("TA4") === "bad") {
|
||||
TestArgs4::run(new class extends TestArgs4 {
|
||||
const ARGS = [
|
||||
"merge" => Application::ARGS,
|
||||
# avant la modification du 13/05/2024
|
||||
# la section par défaut est située AVANT les autres sections. les sections
|
||||
# définies ont donc la priorité
|
||||
# l'option -q ci-dessous est masquée par l'option -q,--quiet
|
||||
["-q", "--query", "args" => "value"],
|
||||
];
|
||||
});
|
||||
} else {
|
||||
TestArgs4::run(new class extends TestArgs4 {
|
||||
const ARGS = [
|
||||
"merge" => Application::ARGS,
|
||||
"sections" => [
|
||||
[
|
||||
"title" => "QUERY",
|
||||
# en mettant l'option dans une autre section, l'ordre est respecté et
|
||||
# donc -q n'est plus masqué
|
||||
["-q", "--query", "args" => "value"],
|
||||
],
|
||||
],
|
||||
];
|
||||
});
|
||||
}
|
|
@ -243,20 +243,20 @@ class ArgsParserTest extends TestCase {
|
|||
|
||||
unset($dest);
|
||||
self::parse($dest, $defs, []);
|
||||
self::assertObjectNotHasAttribute("enable", $dest);
|
||||
self::assertObjectHasAttribute("args", $dest);
|
||||
self::assertObjectNotHasProperty("enable", $dest);
|
||||
self::assertObjectHasProperty("args", $dest);
|
||||
self::assertSame([], $dest->args);
|
||||
|
||||
unset($dest);
|
||||
self::parse($dest, $defs, ["x"]);
|
||||
self::assertObjectNotHasAttribute("enable", $dest);
|
||||
self::assertObjectHasAttribute("args", $dest);
|
||||
self::assertObjectNotHasProperty("enable", $dest);
|
||||
self::assertObjectHasProperty("args", $dest);
|
||||
self::assertSame(["x"], $dest->args);
|
||||
|
||||
unset($dest);
|
||||
self::parse($dest, $defs, ["x", "-a"]);
|
||||
self::assertObjectHasAttribute("enable", $dest);
|
||||
self::assertObjectHasAttribute("args", $dest);
|
||||
self::assertObjectHasProperty("enable", $dest);
|
||||
self::assertObjectHasProperty("args", $dest);
|
||||
self::assertSame(1, $dest->enable);
|
||||
self::assertSame(["x"], $dest->args);
|
||||
|
||||
|
@ -579,4 +579,96 @@ class ArgsParserTest extends TestCase {
|
|||
$parser->parse($dest, ["a", "b", "c"]);
|
||||
self::assertSame(["a", "b", "c"], $dest->args);
|
||||
}
|
||||
|
||||
function testOverride() {
|
||||
$parser = new ArgsParser([
|
||||
["-a", "--o1"],
|
||||
["-a", "--o2"],
|
||||
["-b", "--v1", "args" => 1],
|
||||
["-b", "--v2", "args" => 1],
|
||||
["-c", "--x1"],
|
||||
["-c", "--x2", "args" => 1],
|
||||
]);
|
||||
$object = new stdClass();
|
||||
$object->o1 = 0;
|
||||
$object->o2 = 0;
|
||||
$object->v1 = null;
|
||||
$object->v2 = null;
|
||||
$object->x1 = 0;
|
||||
$object->x2 = null;
|
||||
$parser->parse($object, ["-a", "-b", "valb", "-c", "valc"]);
|
||||
self::assertSame(0, $object->o1);
|
||||
self::assertSame(1, $object->o2);
|
||||
self::assertNull($object->v1);
|
||||
self::assertSame("valb", $object->v2);
|
||||
self::assertSame(0, $object->x1);
|
||||
self::assertSame("valc", $object->x2);
|
||||
|
||||
$parser = new ArgsParser([
|
||||
"sections" => [
|
||||
[
|
||||
["-a", "--o1"],
|
||||
["-b", "--v1", "args" => 1],
|
||||
["-c", "--x1"],
|
||||
],
|
||||
[
|
||||
["-a", "--o2"],
|
||||
["-b", "--v2", "args" => 1],
|
||||
["-c", "--x2", "args" => 1],
|
||||
],
|
||||
],
|
||||
]);
|
||||
$object = new stdClass();
|
||||
$object->o1 = 0;
|
||||
$object->o2 = 0;
|
||||
$object->v1 = null;
|
||||
$object->v2 = null;
|
||||
$object->x1 = 0;
|
||||
$object->x2 = null;
|
||||
$parser->parse($object, ["-a", "-b", "valb", "-c", "valc"]);
|
||||
self::assertSame(0, $object->o1);
|
||||
self::assertSame(1, $object->o2);
|
||||
self::assertNull($object->v1);
|
||||
self::assertSame("valb", $object->v2);
|
||||
self::assertSame(0, $object->x1);
|
||||
self::assertSame("valc", $object->x2);
|
||||
|
||||
$parser = new ArgsParser([
|
||||
"merge" => [
|
||||
"sections" => [
|
||||
[
|
||||
"title" => "une section",
|
||||
["group",
|
||||
["-A", "--g1"],
|
||||
["-a", "--g2"],
|
||||
],
|
||||
],
|
||||
],
|
||||
],
|
||||
["-a", "--o1"],
|
||||
["-b", "--v1", "args" => 1],
|
||||
["-c", "--x1"],
|
||||
["-a", "--o2"],
|
||||
["-b", "--v2", "args" => 1],
|
||||
["-c", "--x2", "args" => 1],
|
||||
]);
|
||||
$object = new stdClass();
|
||||
$object->g1 = 0;
|
||||
$object->g2 = 0;
|
||||
$object->o1 = 0;
|
||||
$object->o2 = 0;
|
||||
$object->v1 = null;
|
||||
$object->v2 = null;
|
||||
$object->x1 = 0;
|
||||
$object->x2 = null;
|
||||
$parser->parse($object, ["-a", "-b", "valb", "-c", "valc"]);
|
||||
self::assertSame(0, $object->g1);
|
||||
self::assertSame(0, $object->g2);
|
||||
self::assertSame(0, $object->o1);
|
||||
self::assertSame(1, $object->o2);
|
||||
self::assertNull($object->v1);
|
||||
self::assertSame("valb", $object->v2);
|
||||
self::assertSame(0, $object->x1);
|
||||
self::assertSame("valc", $object->x2);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue