support --no-arg

This commit is contained in:
Jephté Clain 2025-10-06 08:59:29 +04:00
parent 526a693ead
commit f55c66e1f3
5 changed files with 33 additions and 8 deletions

View File

@ -436,6 +436,11 @@ class Aodef {
$longest ??= self::get_longest($this->_options, self::TYPE_SHORT); $longest ??= self::get_longest($this->_options, self::TYPE_SHORT);
if ($longest !== null) { if ($longest !== null) {
$longest = preg_replace('/[^A-Za-z0-9]+/', "_", $longest); $longest = preg_replace('/[^A-Za-z0-9]+/', "_", $longest);
# les options --no-name mettent à jour la valeur $name et inversent
# le traitement
if ($longest !== "no_" && str::del_prefix($longest, "no_")) {
$this->inverse ??= true;
}
if (preg_match('/^[0-9]/', $longest)) { if (preg_match('/^[0-9]/', $longest)) {
# le nom de la propriété ne doit pas commencer par un chiffre # le nom de la propriété ne doit pas commencer par un chiffre
$longest = "p$longest"; $longest = "p$longest";

View File

@ -1,7 +1,6 @@
<?php <?php
namespace nulib\app\cli; namespace nulib\app\args;
use nulib\app\args\Aodef;
use nulib\tests\TestCase; use nulib\tests\TestCase;
class AodefTest extends TestCase { class AodefTest extends TestCase {

View File

@ -1,9 +1,6 @@
<?php <?php
namespace nulib\app\cli; namespace nulib\app\args;
use nulib\app\args\Aogroup;
use nulib\app\args\Aolist;
use nulib\app\args\Aosection;
use nulib\tests\TestCase; use nulib\tests\TestCase;
class AolistTest extends TestCase { class AolistTest extends TestCase {

View File

@ -1,5 +1,5 @@
<?php <?php
namespace nulib\app\cli; namespace nulib\app\args;
use nulib\app\args\SimpleAolist; use nulib\app\args\SimpleAolist;
use nulib\tests\TestCase; use nulib\tests\TestCase;

View File

@ -1,5 +1,5 @@
<?php <?php
namespace nulib\app\cli; namespace nulib\app\args;
use nulib\app\args\SimpleArgsParser; use nulib\app\args\SimpleArgsParser;
use nulib\tests\TestCase; use nulib\tests\TestCase;
@ -172,4 +172,28 @@ class SimpleArgsParserTest extends TestCase {
self::assertTrue(true); self::assertTrue(true);
} }
function testAutono() {
$parser = new SimpleArgsParser([
["-a", "--plouf"],
["-b", "--no-plouf"],
]);
$dest = [];
$parser->parse($dest, ["-aabb"]);
self::assertSame(["plouf" => 0, "args" => []], $dest);
$parser = new SimpleArgsParser([
["-a", "--plouf", "value" => true],
["-b", "--no-plouf", "value" => false],
]);
$dest = ["plouf" => null];
$parser->parse($dest, []);
self::assertSame(["plouf" => null, "args" => []], $dest);
$dest = ["plouf" => null];
$parser->parse($dest, ["-a"]);
self::assertSame(["plouf" => true, "args" => []], $dest);
$dest = ["plouf" => null];
$parser->parse($dest, ["-b"]);
self::assertSame(["plouf" => false, "args" => []], $dest);
}
} }