modifs.mineures sans commentaires

This commit is contained in:
Jephté Clain 2025-10-03 11:04:40 +04:00
parent ef5a0ee730
commit c37816e56d
34 changed files with 470 additions and 76 deletions

View File

@ -10,13 +10,13 @@ class MysqlCapacitorApp extends AbstractCapacitorApp {
"merge" => parent::ARGS,
"purpose" => "gestion d'un capacitor mysql",
"usage" => [
"DBCONN [CHANNEL_NAME | -t TABLE | -c CHANNEL_CLASS] [--query] key=value...",
"DBCONN [CHANNEL_NAME | -t TABLE | -c CHANNEL_CLASS] --sql-create",
"DBCONN [channelName | -t table | -c ChannelClass] [--query] key=value...",
"DBCONN [channelName | -t table | -c ChannelClass] --sql-create",
],
["-t", "--table-name", "args" => 1,
["-t:table", "--table-name",
"help" => "nom de la table porteuse du canal de données",
],
["-c", "--channel-class", "args" => 1,
["-c:class", "--channel-class",
"help" => "nom de la classe dérivée de CapacitorChannel",
],
["-z", "--reset", "name" => "action", "value" => self::ACTION_RESET,

View File

@ -10,13 +10,13 @@ class PgsqlCapacitorApp extends AbstractCapacitorApp {
"merge" => parent::ARGS,
"purpose" => "gestion d'un capacitor pgsql",
"usage" => [
"DBCONN [CHANNEL_NAME | -t TABLE | -c CHANNEL_CLASS] [--query] key=value...",
"DBCONN [CHANNEL_NAME | -t TABLE | -c CHANNEL_CLASS] --sql-create",
"DBCONN [channelName | -t table | -c ChannelClass] [--query] key=value...",
"DBCONN [channelName | -t table | -c ChannelClass] --sql-create",
],
["-t", "--table-name", "args" => 1,
["-t:table", "--table-name",
"help" => "nom de la table porteuse du canal de données",
],
["-c", "--channel-class", "args" => 1,
["-c:class", "--channel-class",
"help" => "nom de la classe dérivée de CapacitorChannel",
],
["-z", "--reset", "name" => "action", "value" => self::ACTION_RESET,

View File

@ -9,13 +9,13 @@ class SqliteCapacitorApp extends AbstractCapacitorApp {
"merge" => parent::ARGS,
"purpose" => "gestion d'un capacitor sqlite",
"usage" => [
"DBFILE [CHANNEL_NAME | -t TABLE | -c CHANNEL_CLASS] [--query] key=value...",
"DBFILE [CHANNEL_NAME | -t TABLE | -c CHANNEL_CLASS] --sql-create",
"DBFILE [channelName | -t table | -c ChannelClass] [--query] key=value...",
"DBFILE [channelName | -t table | -c ChannelClass] --sql-create",
],
["-t", "--table-name", "args" => 1,
["-t:table", "--table-name",
"help" => "nom de la table porteuse du canal de données",
],
["-c", "--channel-class", "args" => 1,
["-c:class", "--channel-class",
"help" => "nom de la classe dérivée de CapacitorChannel",
],
["-z", "--reset", "name" => "action", "value" => self::ACTION_RESET,

View File

@ -20,7 +20,7 @@ class _SteamTrainApp extends Application {
Cette application peut être utilisée pour tester le lancement des tâches de fond
EOT,
["-c", "--count", "args" => 1,
["-c:count", "--count",
"help" => "spécifier le nombre d'étapes",
],
["-f", "--force-enabled", "value" => true,

View File

@ -1,5 +1,5 @@
#!/bin/bash
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
MYDIR="$(dirname -- "$0")"
VENDOR="$MYDIR/../vendor"
VENDOR="$MYDIR/vendor"
"$VENDOR/bin/phpunit" --bootstrap "$VENDOR/autoload.php" "$@" "$MYDIR/tests"

View File

@ -1,7 +1,6 @@
<?php
namespace nulib;
use nulib\php\func;
use Traversable;
/**

View File

@ -3,7 +3,6 @@ namespace nulib\app;
use nulib\A;
use nulib\cl;
use nulib\app\app;
use nulib\file\SharedFile;
use nulib\os\path;
use nulib\os\sh;

View File

@ -1,7 +1,6 @@
<?php
namespace nulib\app\args;
use nulib\app\args\ArgsException;
use stdClass;
abstract class AbstractArgsParser {

View File

@ -2,9 +2,6 @@
namespace nulib\app\args;
use nulib\A;
use nulib\app\args\AbstractArgsParser;
use nulib\app\args\Aolist;
use nulib\app\args\ArgsException;
use nulib\cl;
use nulib\php\akey;
use nulib\php\func;
@ -84,27 +81,42 @@ class Aodef {
if ($merge !== null) $this->mergeParse($merge);
}
private static function verifix_args(?array &$options): ?array {
$args = null;
if ($options !== null) {
foreach ($options as &$option) {
if (preg_match('/^(.*:)([^:].*)$/', $option, $ms)) {
$option = $ms[1];
$args ??= explode(",", $ms[2]);
}
}; unset($option);
}
return $args;
}
protected function parse(array $def): void {
[$options, $params] = cl::split_assoc($def);
$this->show ??= $params["show"] ?? true;
$this->extends ??= $params["extends"] ?? null;
$this->disabled = vbool::withn($params["disabled"] ?? null);
$removes = varray::withn($params["remove"] ?? null);
A::merge($this->_removes, $removes);
$adds = varray::withn($params["add"] ?? null);
A::merge($this->_adds, $adds);
A::merge($this->_adds, $options);
$args = $params["args"] ?? null;
$args ??= $params["args"] ?? null;
$args ??= $params["arg"] ?? null;
if ($args === true) $args = 1;
elseif ($args === "*") $args = [null];
elseif ($args === "+") $args = ["value", null];
if (is_int($args)) $args = array_fill(0, $args, "value");
$this->_args ??= cl::withn($args);
$this->disabled = vbool::withn($params["disabled"] ?? null);
$adds = varray::withn($params["add"] ?? null);
A::merge($this->_adds, $adds);
A::merge($this->_adds, $options);
$args ??= self::verifix_args($this->_adds);
$removes = varray::withn($params["remove"] ?? null);
A::merge($this->_removes, $removes);
self::verifix_args($this->_adds);
$this->_args ??= cl::withn($args);
$this->argsdesc ??= $params["argsdesc"] ?? null;
$this->ensureArray ??= $params["ensure_array"] ?? null;
@ -286,11 +298,11 @@ class Aodef {
*/
protected function processArgs(): void {
$args = $this->_args;
$haveArgs = boolval($args);
if ($this->isRemains) {
$haveArgs = true;
$args = [null];
$args ??= [null];
$haveArgs = boolval($args);
} elseif ($args === null) {
$haveArgs = false;
$optionalArgs = null;
foreach ($this->_options as $option) {
switch ($option["args_type"]) {
@ -311,6 +323,8 @@ class Aodef {
$args = ["value"];
if ($optionalArgs) $args = [$args];
}
} else {
$haveArgs = boolval($args);
}
if ($this->isRemains) $desc = "remaining args";
@ -450,12 +464,12 @@ class Aodef {
}
function isEmpty(): bool {
return $this->disabled || !$this->_options;
return $this->disabled || (!$this->_options && !$this->isRemains);
}
function printHelp(?array $what=null): void {
$showDef = $what["show"] ?? $this->show;
if (!$showDef) return;
if (!$showDef || $this->isRemains) return;
$prefix = $what["prefix"] ?? null;
if ($prefix !== null) echo $prefix;

View File

@ -2,8 +2,6 @@
namespace nulib\app\args;
use nulib\A;
use nulib\app\args\Aolist;
use nulib\app\args\ArgsException;
/**
* Class Aogroup: groupe d'arguments fonctionnant ensemble

View File

@ -1,9 +1,6 @@
<?php
namespace nulib\app\args;
use nulib\app\args\Aodef;
use nulib\app\args\Aogroup;
use nulib\app\args\Aosection;
use nulib\cl;
use nulib\str;
use const true;

View File

@ -1,8 +1,6 @@
<?php
namespace nulib\app\args;
use nulib\app\args\Aodef;
use nulib\app\args\Aolist;
use nulib\php\types\vbool;
/**

View File

@ -1,8 +1,6 @@
<?php
namespace nulib\app\args;
use nulib\app\args\Aodef;
use nulib\app\args\Aolist;
use nulib\cl;
use nulib\php\types\vbool;
use nulib\str;
@ -122,8 +120,8 @@ class SimpleAolist extends Aolist {
"help" => "Afficher l'aide",
]);
$helpArgdef->setup1();
$this->aospecials[] = $helpArgdef;
}
if ($helpArgdef !== null) $this->aospecials[] = $helpArgdef;
$this->autoremains ??= true;
if ($remainsArgdef === null && $this->autoremains) {
@ -135,11 +133,9 @@ class SimpleAolist extends Aolist {
"key" => $this->argskey,
]);
$remainsArgdef->setup1();
}
if ($remainsArgdef !== null) {
$this->remainsArgdef = $remainsArgdef;
$this->aospecials[] = $remainsArgdef;
}
$this->remainsArgdef = $remainsArgdef;
# puis calculer nombre d'arguments et actions
$this->indexAodefs();

View File

@ -1,9 +1,6 @@
<?php
namespace nulib\app\args;
use nulib\app\args\AbstractArgsParser;
use nulib\app\args\Aodef;
use nulib\app\args\SimpleAolist;
use nulib\cl;
use nulib\ExitError;
use nulib\StateException;

View File

@ -1,7 +1,5 @@
# nulib\app\args
* [ ] supporter "-o:args"
* [ ] vérifier que remainArgs honore les bornes, notamment si spécifié par l'utilisateur
* [ ] dans la section "profils", rajouter une option pour spécifier un fichier de configuration
* [ ] transformer un schéma en définition d'arguments, un tableau en liste d'arguments, et vice-versa
* [ ] faire une implémentation ArgsParser qui supporte les commandes, et les options dynamiques

View File

@ -4,9 +4,7 @@ namespace nulib\app;
use nulib\app\config\ConfigManager;
use nulib\app\config\JsonConfig;
use nulib\app\config\YamlConfig;
use nulib\cl;
use nulib\os\path;
use nulib\str;
use nulib\ValueException;
/**

View File

@ -1,7 +1,6 @@
<?php
namespace nulib\db;
use nulib\A;
use nulib\cl;
use nulib\php\func;
use nulib\ValueException;

View File

@ -2,7 +2,6 @@
namespace nulib\file\csv;
use nulib\file;
use nulib\file\_IFile;
use nulib\file\FileReader;
use nulib\file\IReader;
use nulib\file\tab\AbstractReader;

View File

@ -3,7 +3,6 @@ namespace nulib\output;
use nulib\app\app;
use nulib\output\std\ProxyMessenger;
use nulib\output\std\StdMessenger;
use nulib\ValueException;
/**

View File

@ -3,7 +3,6 @@ namespace nulib\php\time;
use DateTimeInterface;
use InvalidArgumentException;
use nulib\ValueException;
/**
* Class Delay: une durée jusqu'à un moment destination. le moment destination

View File

69
php/tbin/test-application.php Executable file
View File

@ -0,0 +1,69 @@
#!/usr/bin/php
<?php
require __DIR__."/../vendor/autoload.php";
use nulib\app\app;
use nulib\app\cli\Application;
use nulib\output\msg;
Application::run(new class extends Application {
const ARGS = [
"purpose" => "tester la gestion des arguments",
"usage" => "-A|-a|-b",
"merge" => parent::ARGS,
["group",
["-A:", "--seta", "args" => "int", "name" => "a",
"help" => "spécifier a",
],
["--seta10", "name" => "a", "value" => 10],
["--seta20", "name" => "a", "value" => 20],
],
["-a", "--inca", "name" => "a",
"help" => "incrémenter a",
],
["-b", "--deca", "name" => "a", "inverse" => true,
"help" => "décrémenter a",
],
["-D::", "--override",
"help" => "++remplace celui de la section principale",
],
"sections" => [
[
"title" => "Section X",
"show" => false,
["group",
["-X:", "--setx", "args" => "int", "name" => "x",
"help" => "spécifier x",
],
["--setx10", "name" => "x", "value" => 10],
["--setx20", "name" => "x", "value" => 20],
],
["-x", "--incx", "name" => "x"],
["-y", "--decx", "name" => "x", "inverse" => true],
],
],
["args" => [["value", "value"]], "name" => "args"],
];
private ?int $a = null;
private ?int $x = null;
private ?string $override = null;
function main() {
$profile = app::get_profile($productionMode);
$profile = self::get_profile($profile);
$productionMode = $productionMode? "production": "development";
msg::info("profile=$profile ($productionMode)");
$debug = app::is_debug()? "DEBUG": "non";
msg::info("debug=$debug");
msg::info([
"variables:",
"\na=", var_export($this->a, true),
"\nx=", var_export($this->x, true),
"\noverride=", var_export($this->override, true),
"\nargs=", var_export($this->args, true),
]);
}
});

278
php/tbin/test-console.php Executable file
View File

@ -0,0 +1,278 @@
#!/usr/bin/php
<?php
require(__DIR__.'/../vendor/autoload.php');
use nulib\output\std\StdMessenger;
use nulib\UserException;
$params = [];
$count = count($argv) - 1;
for ($i = 1; $i <= $count; $i++) {
switch ($argv[$i]) {
case "-L": $i++; $params["output"] = $argv[$i]; break;
case "-i": $i++; $params["id"] = $argv[$i]; break;
case "-t": $params["add_date"] = true; break;
case "-n": $params["color"] = false; break;
case "+n": $params["color"] = true; break;
case "-d": $params["debug"] = true; break;
case "+d": $params["debug"] = false; break;
case "-D": $params["default_level"] = "debug"; break;
case "-m": $params["default_level"] = "minor"; break;
case "-M": $params["default_level"] = "major"; break;
case "--show-debug":
case "--sd": $params["min_level"] = "debug"; break;
case "--show-minor":
case "--verbose":
case "--sm": $params["min_level"] = "minor"; break;
case "--show-normal":
case "--sn": $params["min_level"] = "normal"; break;
case "--show-major":
case "--quiet":
case "--sM": $params["min_level"] = "major"; break;
case "--show-none":
case "--silent":
case "--sx": $params["min_level"] = "none"; break;
}
}
$msg = new StdMessenger($params);
$msg->title("title0");
$msg->title("title1");
$msg->print("print under title1");
$msg->end();
$msg->print("print under title0");
$msg->end();
$msg->desc("action avec step");
$msg->action("action avec step");
$msg->step("step");
$msg->asuccess("action success");
$msg->action("action avec step");
$msg->step("step");
$msg->afailure("action failure");
$msg->action("action avec step");
$msg->step("step");
$msg->adone("action neutral");
$msg->desc("actions sans step");
$msg->action("action sans step");
$msg->asuccess("action success");
$msg->action("action sans step");
$msg->afailure("action failure");
$msg->action("action sans step");
$msg->adone("action neutral");
$msg->desc("actions imbriquées");
$msg->action("action0");
$msg->action("action1");
$msg->action("action2");
$msg->asuccess("action2 success");
$msg->asuccess("action1 success");
$msg->asuccess("action0 success");
$msg->desc("action avec step, sans messages");
$msg->action("action avec step, sans messages, success");
$msg->step("step");
$msg->asuccess();
$msg->action("action avec step, sans messages, failure");
$msg->step("step");
$msg->afailure();
$msg->action("action avec step, sans messages, done");
$msg->step("step");
$msg->adone();
$msg->desc("action sans step, sans messages");
$msg->action("action sans step, sans messages, success");
$msg->asuccess();
$msg->action("action sans step, sans messages, failure");
$msg->afailure();
$msg->action("action sans step, sans messages, done");
$msg->adone();
$msg->desc("actions imbriquées, sans messages");
$msg->action("action0");
$msg->action("action1");
$msg->action("action2");
$msg->asuccess();
$msg->asuccess();
$msg->asuccess();
$msg->info("info");
$msg->note("note");
$msg->warning("warning");
$msg->error("error");
$msg->section("section", function ($msg) {
$msg->title("title", function ($msg) {
$msg->desc("desc");
$msg->print("print");
$msg->desc("action avec step");
$msg->action("action avec step", function ($msg) {
$msg->step("step");
$msg->asuccess("action success");
});
$msg->action("action avec step", function ($msg) {
$msg->step("step");
$msg->afailure("action failure");
});
$msg->action("action avec step", function ($msg) {
$msg->step("step");
$msg->adone("action done");
});
$msg->desc("actions sans step");
$msg->action("action sans step", function ($msg) {
$msg->asuccess("action success");
});
$msg->action("action sans step", function ($msg) {
$msg->afailure("action failure");
});
$msg->action("action sans step", function ($msg) {
$msg->adone("action done");
});
$msg->desc("actions imbriquées");
$msg->action("action0", function ($msg) {
$msg->action("action1", function ($msg) {
$msg->action("action2", function ($msg) {
$msg->asuccess("action2 success");
});
$msg->asuccess("action1 success");
});
$msg->asuccess("action0 success");
});
$msg->desc("action avec step, sans messages");
$msg->action("action avec step, sans messages, success", function ($msg) {
$msg->step("step");
$msg->asuccess();
});
$msg->action("action avec step, sans messages, failure", function ($msg) {
$msg->step("step");
$msg->afailure();
});
$msg->action("action avec step, sans messages, done", function ($msg) {
$msg->step("step");
$msg->adone();
});
$msg->desc("action sans step, sans messages");
$msg->action("action sans step, sans messages, success", function ($msg) {
$msg->asuccess();
});
$msg->action("action sans step, sans messages, failure", function ($msg) {
$msg->afailure();
});
$msg->action("action sans step, sans messages, done", function ($msg) {
$msg->adone();
});
$msg->desc("actions imbriquées, sans messages");
$msg->action("action0", function ($msg) {
$msg->action("action1", function ($msg) {
$msg->action("action2", function ($msg) {
$msg->asuccess();
});
$msg->asuccess();
});
$msg->asuccess();
});
$msg->desc("action avec step, avec code de retour");
$msg->action("action avec step, avec code de retour true", function ($msg) {
$msg->step("step");
return true;
});
$msg->action("action avec step, avec code de retour false", function ($msg) {
$msg->step("step");
return false;
});
$msg->action("action avec step, avec code de retour autre", function ($msg) {
$msg->step("step");
return "autre";
});
$msg->action("action avec step, avec code de retour null", function ($msg) {
$msg->step("step");
});
$msg->desc("action sans step, avec code de retour");
$msg->action("action sans step, avec code de retour true", function ($msg) {
return true;
});
$msg->action("action sans step, avec code de retour false", function ($msg) {
return false;
});
$msg->action("action sans step, avec code de retour autre", function ($msg) {
return "autre";
});
# ici, il n'y aura pas de message du tout
$msg->action("action sans step, avec code de retour null", function ($msg) {
});
$msg->info("info");
$msg->note("note");
$msg->warning("warning");
$msg->error("error");
});
});
$msg->section("multi-line\nsection", function ($msg) {
$msg->title("multi-line\ntitle");
$msg->title("another\ntitle");
$msg->print("multi-line\nprint");
$msg->info("multi-line\ninfo");
$msg->action("multi-line\naction");
$msg->asuccess();
$msg->action("multi-line\naction");
$msg->step("multi-line\nstep");
$msg->afailure();
$msg->action("multi-line\naction");
$msg->step("multi-line\nstep");
$msg->asuccess("multi-line\nsuccess");
$msg->action("multi-line\naction");
$msg->step("multi-line\nstep");
$msg->adone("multi-line\ndone");
$msg->end();
$msg->end();
});
$msg->section("Exceptions", function ($msg) {
$e = new Exception("message");
$u1 = new UserException("userMessage");
$u2 = new UserException("userMessage", "techMessage");
$msg->title("avec message", function ($msg) use ($e, $u1, $u2) {
$msg->info(["exception", $e]);
$msg->info(["userException1", $u1]);
$msg->info(["userException2", $u2]);
});
$msg->title("sans message", function ($msg) use ($e, $u1, $u2) {
$msg->info($e);
$msg->info($u1);
$msg->info($u2);
});
});

View File

@ -0,0 +1,18 @@
#!/usr/bin/php
<?php
require(__DIR__.'/../vendor/autoload.php');
use nulib\UserException;
use nulib\output\std\StdMessenger;
use nulib\output\msg;
msg::set_messenger(new StdMessenger(), new StdMessenger([
"output" => "output-forever.log",
]));
$index = 1;
while (true) {
msg::info("info $index");
$index++;
sleep(1);
}

View File

@ -1,10 +1,11 @@
<?php
namespace nulib\app {
use nulib\tests\TestCase;
use nulib\app\impl\config;
use nulib\app\impl\myapp;
use nulib\app\impl\MyApplication1;
use nulib\app\impl\MyApplication2;
use nulib\tests\TestCase;
class appTest extends TestCase {
function testWith() {
@ -19,13 +20,15 @@ namespace nulib\app {
"bindir" => "$projdir/vendor/bin",
"autoload" => "$projdir/vendor/autoload.php",
],
"appcode" => "nur-ture",
"projcode" => "nulib-base",
"cwd" => $cwd,
"datadir" => "$projdir/devel",
"etcdir" => "$projdir/devel/etc",
"vardir" => "$projdir/devel/var",
"logdir" => "$projdir/devel/log",
"profile" => "devel",
"facts" => null,
"debug" => null,
"appgroup" => null,
"name" => "my-application1",
"title" => null,
@ -38,13 +41,15 @@ namespace nulib\app {
"bindir" => "$projdir/vendor/bin",
"autoload" => "$projdir/vendor/autoload.php",
],
"appcode" => "nur-ture",
"projcode" => "nulib-base",
"cwd" => $cwd,
"datadir" => "$projdir/devel",
"etcdir" => "$projdir/devel/etc",
"vardir" => "$projdir/devel/var",
"logdir" => "$projdir/devel/log",
"profile" => "devel",
"facts" => null,
"debug" => null,
"appgroup" => null,
"name" => "my-application2",
"title" => null,
@ -63,13 +68,15 @@ namespace nulib\app {
"bindir" => "$projdir/vendor/bin",
"autoload" => "$projdir/vendor/autoload.php",
],
"appcode" => "nur-ture",
"projcode" => "nulib-base",
"cwd" => $cwd,
"datadir" => "$projdir/devel",
"etcdir" => "$projdir/devel/etc",
"vardir" => "$projdir/devel/var",
"logdir" => "$projdir/devel/log",
"profile" => "devel",
"facts" => null,
"debug" => null,
"appgroup" => null,
"name" => "my-application1",
"title" => null,
@ -82,13 +89,15 @@ namespace nulib\app {
"bindir" => "$projdir/vendor/bin",
"autoload" => "$projdir/vendor/autoload.php",
],
"appcode" => "nur-ture",
"projcode" => "nulib-base",
"cwd" => $cwd,
"datadir" => "$projdir/devel",
"etcdir" => "$projdir/devel/etc",
"vardir" => "$projdir/devel/var",
"logdir" => "$projdir/devel/log",
"profile" => "devel",
"facts" => null,
"debug" => null,
"appgroup" => null,
"name" => "my-application2",
"title" => null,
@ -99,12 +108,12 @@ namespace nulib\app {
namespace nulib\app\impl {
use nulib\app\app;
use nulib\app\cli\Application;
use nulib\os\path;
use nulib\app\app;
class config {
const PROJDIR = __DIR__.'/../..';
const PROJDIR = __DIR__.'/../../..';
static function get_projdir(): string {
return path::abspath(self::PROJDIR);

View File

@ -3,7 +3,6 @@
namespace nulib\app;
use nulib\tests\TestCase;
use nulib\app\args;
class argsTest extends TestCase {
function testFrom_array() {

View File

@ -2,7 +2,7 @@
namespace nulib\app\cli;
use nulib\app\args\Aodef;
use nur\t\TestCase;
use nulib\tests\TestCase;
class AodefTest extends TestCase {
protected static function assertArg(
@ -156,4 +156,18 @@ class AodefTest extends TestCase {
true, true, false,
false, 0, 0, "");
}
function testArgsdesc() {
$aodef = new Aodef(["-o:value", "--longo"]);
self::assertArg($aodef,
["-o", "--longo"],
true, true, false,
true, 1, 1, "VALUE");
$aodef = new Aodef(["-o:file,suffix", "--longo"]);
self::assertArg($aodef,
["-o", "--longo"],
true, true, false,
true, 2, 2, "FILE SUFFIX");
}
}

View File

@ -4,7 +4,7 @@ namespace nulib\app\cli;
use nulib\app\args\Aogroup;
use nulib\app\args\Aolist;
use nulib\app\args\Aosection;
use nur\t\TestCase;
use nulib\tests\TestCase;
class AolistTest extends TestCase {
function testGroup() {

View File

@ -2,7 +2,7 @@
namespace nulib\app\cli;
use nulib\app\args\SimpleAolist;
use nur\t\TestCase;
use nulib\tests\TestCase;
class SimpleAolistTest extends TestCase {
function testOverride() {
@ -56,4 +56,21 @@ class SimpleAolistTest extends TestCase {
self::assertTrue(true);
}
function testRemainingArgs() {
$aolist = new SimpleAolist([]);
echo "$aolist\n"; #XXX
$aolist = new SimpleAolist([
["name" => "args"],
]);
echo "$aolist\n"; #XXX
$aolist = new SimpleAolist([
["args" => 2, "name" => "args"],
]);
echo "$aolist\n"; #XXX
self::assertTrue(true);
}
}

View File

@ -2,7 +2,7 @@
namespace nulib\app\cli;
use nulib\app\args\SimpleArgsParser;
use nur\t\TestCase;
use nulib\tests\TestCase;
class SimpleArgsParserTest extends TestCase {
const NORMALIZE_ARGS = [

View File

@ -1,10 +1,10 @@
<?php
namespace nulib\app\config {
use PHPUnit\Framework\TestCase;
use nulib\app\config\impl\result;
use nulib\app\config\impl\config1;
use nulib\app\config\impl\config2;
use nulib\app\config\impl\result;
use nulib\tests\TestCase;
class ConfigManagerTest extends TestCase {
function testConfigurators() {

View File

@ -1,10 +1,10 @@
<?php
namespace nulib\db\sqlite;
use nulib\tests\TestCase;
use nulib\cl;
use nulib\db\Capacitor;
use nulib\db\CapacitorChannel;
use nulib\tests\TestCase;
class SqliteStorageTest extends TestCase {
static function Txx(...$values): void {

View File

@ -1,7 +1,7 @@
<?php
namespace nulib\mail;
use nur\t\TestCase;
use nulib\tests\TestCase;
class MailTemplateTest extends TestCase {
function testTemplate() {

View File

@ -1,11 +1,12 @@
<?php
namespace nulib\php {
use nulib\tests\TestCase;
use nulib\ValueException;
use nulib\php\impl\C0;
use nulib\php\impl\C1;
use nulib\php\impl\SC;
use nulib\tests\TestCase;
use nulib\ValueException;
use ReflectionException;
class funcTest extends TestCase {