modifs.mineures sans commentaires
This commit is contained in:
		
							parent
							
								
									ef5a0ee730
								
							
						
					
					
						commit
						c37816e56d
					
				| @ -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, | ||||
|  | ||||
| @ -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, | ||||
|  | ||||
| @ -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, | ||||
|  | ||||
| @ -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, | ||||
|  | ||||
| @ -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" | ||||
|  | ||||
| @ -1,7 +1,6 @@ | ||||
| <?php | ||||
| namespace nulib; | ||||
| 
 | ||||
| use nulib\php\func; | ||||
| use Traversable; | ||||
| 
 | ||||
| /** | ||||
|  | ||||
| @ -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; | ||||
|  | ||||
| @ -1,7 +1,6 @@ | ||||
| <?php | ||||
| namespace nulib\app\args; | ||||
| 
 | ||||
| use nulib\app\args\ArgsException; | ||||
| use stdClass; | ||||
| 
 | ||||
| abstract class AbstractArgsParser { | ||||
|  | ||||
| @ -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; | ||||
|  | ||||
| @ -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 | ||||
|  | ||||
| @ -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; | ||||
|  | ||||
| @ -1,8 +1,6 @@ | ||||
| <?php | ||||
| namespace nulib\app\args; | ||||
| 
 | ||||
| use nulib\app\args\Aodef; | ||||
| use nulib\app\args\Aolist; | ||||
| use nulib\php\types\vbool; | ||||
| 
 | ||||
| /** | ||||
|  | ||||
| @ -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(); | ||||
|  | ||||
| @ -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; | ||||
|  | ||||
| @ -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 | ||||
|  | ||||
| @ -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; | ||||
| 
 | ||||
| /** | ||||
|  | ||||
| @ -1,7 +1,6 @@ | ||||
| <?php | ||||
| namespace nulib\db; | ||||
| 
 | ||||
| use nulib\A; | ||||
| use nulib\cl; | ||||
| use nulib\php\func; | ||||
| use nulib\ValueException; | ||||
|  | ||||
| @ -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; | ||||
|  | ||||
| @ -3,7 +3,6 @@ namespace nulib\output; | ||||
| 
 | ||||
| use nulib\app\app; | ||||
| use nulib\output\std\ProxyMessenger; | ||||
| use nulib\output\std\StdMessenger; | ||||
| use nulib\ValueException; | ||||
| 
 | ||||
| /** | ||||
|  | ||||
| @ -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 | ||||
|  | ||||
							
								
								
									
										0
									
								
								php/tbin/output-forever.log
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								php/tbin/output-forever.log
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										69
									
								
								php/tbin/test-application.php
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										69
									
								
								php/tbin/test-application.php
									
									
									
									
									
										Executable 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
									
								
							
							
						
						
									
										278
									
								
								php/tbin/test-console.php
									
									
									
									
									
										Executable 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); | ||||
|   }); | ||||
| }); | ||||
							
								
								
									
										18
									
								
								php/tbin/test-output-forever.php
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										18
									
								
								php/tbin/test-output-forever.php
									
									
									
									
									
										Executable 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); | ||||
| } | ||||
| @ -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); | ||||
|  | ||||
| @ -3,7 +3,6 @@ | ||||
| namespace nulib\app; | ||||
| 
 | ||||
| use nulib\tests\TestCase; | ||||
| use nulib\app\args; | ||||
| 
 | ||||
| class argsTest extends TestCase { | ||||
|   function testFrom_array() { | ||||
|  | ||||
| @ -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"); | ||||
|   } | ||||
| } | ||||
|  | ||||
| @ -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() { | ||||
|  | ||||
| @ -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); | ||||
|   } | ||||
| } | ||||
|  | ||||
| @ -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 = [ | ||||
|  | ||||
| @ -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() { | ||||
|  | ||||
| @ -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 { | ||||
|  | ||||
| @ -1,7 +1,7 @@ | ||||
| <?php | ||||
| namespace nulib\mail; | ||||
| 
 | ||||
| use nur\t\TestCase; | ||||
| use nulib\tests\TestCase; | ||||
| 
 | ||||
| class MailTemplateTest extends TestCase { | ||||
|   function testTemplate() { | ||||
|  | ||||
| @ -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 { | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user