160 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			160 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| namespace nulib\app\cli;
 | |
| 
 | |
| use nulib\app\args\Aodef;
 | |
| use nur\t\TestCase;
 | |
| 
 | |
| class AodefTest extends TestCase {
 | |
|   protected static function assertArg(
 | |
|     Aodef $aodef,
 | |
|     array $options,
 | |
|     bool  $haveShortOptions, bool $haveLongOptions, bool $isCommand,
 | |
|     bool  $haveArgs, ?int $minArgs, ?int $maxArgs, ?string $argsdesc
 | |
|   ) {
 | |
|     $aodef->setup1();
 | |
|     $aodef->setup2();
 | |
|     #var_export($aodef->debugInfos()); #XXX
 | |
|     self::assertSame($options, $aodef->getOptions());
 | |
|     self::assertSame($haveShortOptions, $aodef->haveShortOptions, "haveShortOptions");
 | |
|     self::assertSame($haveLongOptions, $aodef->haveLongOptions, "haveLongOptions");
 | |
|     self::assertSame($isCommand, $aodef->isCommand, "isCommand");
 | |
|     self::assertSame($haveArgs, $aodef->haveArgs, "haveArgs");
 | |
|     self::assertSame($minArgs, $aodef->minArgs, "minArgs");
 | |
|     self::assertSame($maxArgs, $aodef->maxArgs, "maxArgs");
 | |
|     self::assertSame($argsdesc, $aodef->argsdesc, "argsdesc");
 | |
|   }
 | |
| 
 | |
|   function testArgsNone() {
 | |
|     $aodef = new Aodef(["-o"]);
 | |
|     self::assertArg($aodef,
 | |
|       ["-o"],
 | |
|       true, false, false,
 | |
|       false, 0, 0, "");
 | |
| 
 | |
|     $aodef = new Aodef(["--longo"]);
 | |
|     self::assertArg($aodef,
 | |
|       ["--longo"],
 | |
|       false, true, false,
 | |
|       false, 0, 0, "");
 | |
| 
 | |
|     $aodef = new Aodef(["-o", "--longo"]);
 | |
|     self::assertArg($aodef,
 | |
|       ["-o", "--longo"],
 | |
|       true, true, false,
 | |
|       false, 0, 0, "");
 | |
|   }
 | |
| 
 | |
|   function testArgsMandatory() {
 | |
|     $aodef = new Aodef(["-o:", "--longo"]);
 | |
|     self::assertArg($aodef,
 | |
|       ["-o", "--longo"],
 | |
|       true, true, false,
 | |
|       true, 1, 1, "VALUE");
 | |
| 
 | |
|     $aodef = new Aodef(["-a:", "-b:"]);
 | |
|     self::assertArg($aodef,
 | |
|       ["-a", "-b"],
 | |
|       true, false, false,
 | |
|       true, 1, 1, "VALUE");
 | |
| 
 | |
|     $aodef = new Aodef(["-a:", "-b::"]);
 | |
|     self::assertArg($aodef,
 | |
|       ["-a", "-b"],
 | |
|       true, false, false,
 | |
|       true, 1, 1, "VALUE");
 | |
| 
 | |
|     $aodef = new Aodef(["-a::", "-b:"]);
 | |
|     self::assertArg($aodef,
 | |
|       ["-a", "-b"],
 | |
|       true, false, false,
 | |
|       true, 1, 1, "VALUE");
 | |
| 
 | |
|     $aodef = new Aodef(["-o", "--longo", "args" => true]);
 | |
|     self::assertArg($aodef,
 | |
|       ["-o", "--longo"],
 | |
|       true, true, false,
 | |
|       true, 1, 1, "VALUE");
 | |
| 
 | |
|     $aodef = new Aodef(["-o", "--longo", "args" => 1]);
 | |
|     self::assertArg($aodef,
 | |
|       ["-o", "--longo"],
 | |
|       true, true, false,
 | |
|       true, 1, 1, "VALUE");
 | |
| 
 | |
|     $aodef = new Aodef(["-o", "--longo", "args" => "value"]);
 | |
|     self::assertArg($aodef,
 | |
|       ["-o", "--longo"],
 | |
|       true, true, false,
 | |
|       true, 1, 1, "VALUE");
 | |
| 
 | |
|     $aodef = new Aodef(["-o", "--longo", "args" => ["value"]]);
 | |
|     self::assertArg($aodef,
 | |
|       ["-o", "--longo"],
 | |
|       true, true, false,
 | |
|       true, 1, 1, "VALUE");
 | |
|   }
 | |
| 
 | |
|   function testArgsOptional() {
 | |
|     $aodef = new Aodef(["-o::", "--longo"]);
 | |
|     self::assertArg($aodef,
 | |
|       ["-o", "--longo"],
 | |
|       true, true, false,
 | |
|       true, 0, 1, "[VALUE]");
 | |
| 
 | |
|     $aodef = new Aodef(["-o", "--longo", "args" => [["value"]]]);
 | |
|     self::assertArg($aodef,
 | |
|       ["-o", "--longo"],
 | |
|       true, true, false,
 | |
|       true, 0, 1, "[VALUE]");
 | |
| 
 | |
|     $aodef = new Aodef(["-o", "--longo", "args" => [[null]]]);
 | |
|     self::assertArg($aodef,
 | |
|       ["-o", "--longo"],
 | |
|       true, true, false,
 | |
|       true, 0, PHP_INT_MAX, "[VALUEs...]");
 | |
| 
 | |
|     $aodef = new Aodef(["-o", "--longo", "args" => ["value", null]]);
 | |
|     self::assertArg($aodef,
 | |
|       ["-o", "--longo"],
 | |
|       true, true, false,
 | |
|       true, 1, PHP_INT_MAX, "VALUE [VALUEs...]");
 | |
| 
 | |
|     $aodef = new Aodef(["-o", "--longo", "args" => "*"]);
 | |
|     self::assertArg($aodef,
 | |
|       ["-o", "--longo"],
 | |
|       true, true, false,
 | |
|       true, 0, PHP_INT_MAX, "[VALUEs...]");
 | |
| 
 | |
|     $aodef = new Aodef(["-o", "--longo", "args" => "+"]);
 | |
|     self::assertArg($aodef,
 | |
|       ["-o", "--longo"],
 | |
|       true, true, false,
 | |
|       true, 1, PHP_INT_MAX, "VALUE [VALUEs...]");
 | |
|   }
 | |
| 
 | |
|   function testMerge() {
 | |
|     $BASE = ["-o:", "--longo"];
 | |
| 
 | |
|     $aodef = new Aodef([
 | |
|       "merge" => $BASE,
 | |
|       "add" => ["-a", "--longa"],
 | |
|       "remove" => ["-o", "--longo"],
 | |
|     ]);
 | |
|     self::assertArg($aodef,
 | |
|       ["-a", "--longa"],
 | |
|       true, true, false,
 | |
|       false, 0, 0, "");
 | |
| 
 | |
|     $aodef = new Aodef([
 | |
|       "merge" => $BASE,
 | |
|       "add" => ["-a", "--longa"],
 | |
|       "remove" => ["-o", "--longo"],
 | |
|       "-x",
 | |
|     ]);
 | |
|     self::assertArg($aodef,
 | |
|       ["-a", "--longa", "-x"],
 | |
|       true, true, false,
 | |
|       false, 0, 0, "");
 | |
|   }
 | |
| }
 |