From 587df17273f959bfbd1c8e9065329d483ead14f5 Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Sat, 19 Apr 2025 07:48:20 +0400 Subject: [PATCH] modifs.mineures sans commentaires --- src/app.php | 7 +- src/app/cli/Application.php | 2 +- src/php/access/GetAccess.php | 2 - src/php/access/IAccess.php | 2 - src/php/access/KeyAccess.php | 1 - src/php/access/PostAccess.php | 2 - src/php/iter.php | 1 - src/schema/ConsolidatedResult.php | 123 ++++++++-------------- src/schema/Result.php | 10 +- src/schema/Schema.php | 2 +- src/schema/_assoc/AssocSchema.php | 2 +- src/schema/_assoc/AssocWrapper.php | 13 ++- src/schema/_list/ListSchema.php | 2 +- src/schema/_scalar/ScalarSchema.php | 3 +- src/schema/input/Input.php | 4 +- src/schema/types.php | 4 +- src/schema/types/IType.php | 2 +- src/schema/types/_tsimple.php | 3 +- src/schema/types/tarray.php | 1 - src/schema/types/tbool.php | 6 +- src/schema/types/tfloat.php | 2 +- src/schema/types/tfunc.php | 2 +- src/schema/types/tgeneric.php | 3 +- src/schema/types/tint.php | 2 +- src/schema/types/trawstring.php | 2 +- tests/schema/_assoc/AssocSchemaTest.php | 38 ++++++- tests/schema/_scalar/ScalarSchemaTest.php | 2 + 27 files changed, 114 insertions(+), 129 deletions(-) diff --git a/src/app.php b/src/app.php index 185df43..97802b9 100644 --- a/src/app.php +++ b/src/app.php @@ -1,18 +1,13 @@ resultAvailable = true; - $this->present = false; - $this->available = false; - $this->null = false; - $this->valid = false; - $this->messageKey = "missing"; + protected int $highestResult; + + function reset(): void { + parent::reset(); + $this->highestResult = -1; + } + + protected function _addMessage(Wrapper $wrapper, $prefix=null): void { $result = $wrapper->getResult(); - $resultException = $result->exception; - $resultMessage = $result->message; - if ($resultException !== null) { - $tmessage = ValueException::get_message($resultException); - if ($tmessage) { - if ($resultMessage !== null) $resultMessage .= ": "; - $resultMessage .= $tmessage; - } - } $message = $this->message; if ($message) $message .= "\n"; - $message .= $resultMessage; + if ($prefix !== null) $message .= "$prefix: "; + $message .= $result->message; $this->message = $message; } - function addUnavailableMessage(Wrapper $wrapper): void { - $this->resultAvailable = true; - $this->present = true; - $this->available = false; - $this->null = false; - $this->valid = false; - $this->messageKey = "unavailable"; - $result = $wrapper->getResult(); - $resultException = $result->exception; - $resultMessage = $result->message; - if ($resultException !== null) { - $tmessage = ValueException::get_message($resultException); - if ($tmessage) { - if ($resultMessage !== null) $resultMessage .= ": "; - $resultMessage .= $tmessage; - } + function addMissingMessage(Wrapper $wrapper, $prefix=null): void { + if ($this->highestResult < ref_analyze::MISSING) { + $this->present = false; + $this->available = false; + $this->null = false; + $this->valid = false; + $this->messageKey = "missing"; } - $message = $this->message; - if ($message) $message .= "\n"; - $message .= $resultMessage; - $this->message = $message; + $this->_addMessage($wrapper, $prefix); } - function addNullMessage(Wrapper $wrapper): void { - $this->resultAvailable = true; - $this->present = true; - $this->available = true; - $this->null = true; - $this->valid = false; - $this->messageKey = "null"; - $result = $wrapper->getResult(); - $resultException = $result->exception; - $resultMessage = $result->message; - if ($resultException !== null) { - $tmessage = ValueException::get_message($resultException); - if ($tmessage) { - if ($resultMessage !== null) $resultMessage .= ": "; - $resultMessage .= $tmessage; - } + function addUnavailableMessage(Wrapper $wrapper, $prefix=null): void { + if ($this->highestResult < ref_analyze::UNAVAILABLE) { + $this->present = true; + $this->available = false; + $this->null = false; + $this->valid = false; + $this->messageKey = "unavailable"; } - $message = $this->message; - if ($message) $message .= "\n"; - $message .= $resultMessage; - $this->message = $message; + $this->_addMessage($wrapper, $prefix); } - function addInvalidMessage(Wrapper $wrapper): void { - $this->resultAvailable = true; - $this->present = true; - $this->available = true; - $this->null = false; - $this->valid = false; - $this->messageKey = "invalid"; - $result = $wrapper->getResult(); - $resultException = $result->exception; - $resultMessage = $result->message; - if ($resultException !== null) { - $tmessage = ValueException::get_message($resultException); - if ($tmessage) { - if ($resultMessage !== null) $resultMessage .= ": "; - $resultMessage .= $tmessage; - } + function addNullMessage(Wrapper $wrapper, $prefix=null): void { + if ($this->highestResult < ref_analyze::NULL) { + $this->present = true; + $this->available = true; + $this->null = true; + $this->valid = false; + $this->messageKey = "null"; } - $message = $this->message; - if ($message) $message .= "\n"; - $message .= $resultMessage; - $this->message = $message; + $this->_addMessage($wrapper, $prefix); + } + + function addInvalidMessage(Wrapper $wrapper, $prefix=null): void { + if ($this->highestResult < ref_analyze::INVALID) { + $this->present = true; + $this->available = true; + $this->null = false; + $this->valid = false; + $this->messageKey = "invalid"; + } + $this->_addMessage($wrapper, $prefix); } } diff --git a/src/schema/Result.php b/src/schema/Result.php index 835732c..45d3402 100644 --- a/src/schema/Result.php +++ b/src/schema/Result.php @@ -39,7 +39,7 @@ class Result { public ?string $messageKey; public ?string $message; public ?Throwable $exception; - public ?string $origValue; + public $origValue; public $normalizedValue; /** réinitialiser tous les objets résultats accessibles via cet objet */ @@ -119,11 +119,9 @@ class Result { $this->valid = false; $this->origValue = $value; $this->messageKey = $messageKey = "invalid"; - $message = $this->getMessage($messageKey, $schema); - if ($exception !== null) { - $tmessage = ValueException::get_message($exception); - if ($tmessage) $message = $tmessage; - } + $message = null; + if ($exception !== null) $message = ValueException::get_message($exception); + if (!$message) $message = $this->getMessage($messageKey, $schema); $this->message = $message; $this->exception = $exception; return ref_analyze::INVALID; diff --git a/src/schema/Schema.php b/src/schema/Schema.php index 4e81520..fbb441b 100644 --- a/src/schema/Schema.php +++ b/src/schema/Schema.php @@ -12,8 +12,8 @@ use nulib\schema\_scalar\ScalarSchema; use nulib\schema\types\IType; use nulib\schema\types\tarray; use nulib\schema\types\tbool; -use nulib\schema\types\tfunc; use nulib\schema\types\tcontent; +use nulib\schema\types\tfunc; use nulib\schema\types\tpkey; use nulib\schema\types\trawstring; diff --git a/src/schema/_assoc/AssocSchema.php b/src/schema/_assoc/AssocSchema.php index 2ebbc49..8f05843 100644 --- a/src/schema/_assoc/AssocSchema.php +++ b/src/schema/_assoc/AssocSchema.php @@ -3,9 +3,9 @@ namespace nulib\schema\_assoc; use nulib\cl; use nulib\ref\schema\ref_schema; -use nulib\ValueException; use nulib\schema\Schema; use nulib\schema\Wrapper; +use nulib\ValueException; /** * Class AssocSchema diff --git a/src/schema/_assoc/AssocWrapper.php b/src/schema/_assoc/AssocWrapper.php index d4d3034..014507b 100644 --- a/src/schema/_assoc/AssocWrapper.php +++ b/src/schema/_assoc/AssocWrapper.php @@ -105,18 +105,21 @@ class AssocWrapper extends Wrapper { $result = $context->consolidatedResult; $result->setValid(); - foreach ($context->keyWrappers as $keyWrapper) { + foreach ($context->keyWrappers as $key => $keyWrapper) { $keyWrapper->analyze($params); if ($keyWrapper->isValid()) continue; $what = ref_analyze::INVALID; + #XXX utiliser si possible la description ou une autre valeur "user-friendly" + # possibilité de sélectionner la valeur à utiliser dans $params? + $prefix = $key; if (!$keyWrapper->isPresent()) { - $result->addMissingMessage($keyWrapper); + $result->addMissingMessage($keyWrapper, $prefix); } elseif (!$keyWrapper->isAvailable()) { - $result->addUnavailableMessage($keyWrapper); + $result->addUnavailableMessage($keyWrapper, $prefix); } elseif ($keyWrapper->isNull()) { - $result->addNullMessage($keyWrapper); + $result->addNullMessage($keyWrapper, $prefix); } else { - $result->addInvalidMessage($keyWrapper); + $result->addInvalidMessage($keyWrapper, $prefix); } } diff --git a/src/schema/_list/ListSchema.php b/src/schema/_list/ListSchema.php index c3d2b9a..02a137b 100644 --- a/src/schema/_list/ListSchema.php +++ b/src/schema/_list/ListSchema.php @@ -2,9 +2,9 @@ namespace nulib\schema\_list; use nulib\ref\schema\ref_schema; -use nulib\ValueException; use nulib\schema\Schema; use nulib\schema\Wrapper; +use nulib\ValueException; class ListSchema extends Schema { /** @var array meta-schema d'un schéma de nature liste */ diff --git a/src/schema/_scalar/ScalarSchema.php b/src/schema/_scalar/ScalarSchema.php index ca7a68f..c1e5125 100644 --- a/src/schema/_scalar/ScalarSchema.php +++ b/src/schema/_scalar/ScalarSchema.php @@ -1,11 +1,10 @@ nullable; + $valid = false; return null; } diff --git a/src/schema/types/tfloat.php b/src/schema/types/tfloat.php index f1b49be..51fae89 100644 --- a/src/schema/types/tfloat.php +++ b/src/schema/types/tfloat.php @@ -1,10 +1,10 @@ null, "formatter_func" => null, "format" => null, + "size" => null, + "precision" => null, "name" => null, "pkey" => null, "header" => null, @@ -169,8 +172,8 @@ class AssocSchemaTest extends TestCase { "b" => false, ], $array); - // false équivaut à absent - $array = ["s" => false, "i" => false, "b" => null]; + // false équivaut à absent, sauf pour "b" qui est de type bool + $array = ["s" => false, "i" => false, "b" => false]; $schema->getWrapper($array, null, ["ensure_keys" => true]); self::assertSame([ "s" => "", @@ -178,9 +181,11 @@ class AssocSchemaTest extends TestCase { "b" => false, ], $array); - $array = ["s" => false, "i" => false, "b" => null]; + $array = ["s" => false, "i" => false, "b" => false]; $schema->getWrapper($array, null, ["ensure_keys" => false]); - self::assertSame([], $array); + self::assertSame([ + "b" => false, + ], $array); } const STRING_SCHEMA = [ @@ -363,4 +368,29 @@ class AssocSchemaTest extends TestCase { $schema->getWrapper($array); }); } + + function testMessage() { + $schema = new AssocSchema([ + "rs" => ["string", "required" => true], + "i" => ["int"], + ]); + + $value = []; + $result = $schema->getWrapper($value, null, ["throw" => false])->getResult(null); + $expectedMessage = <<message); + + $value = [ + "rs" => null, + "i" => "abc", + ]; + $result = $schema->getWrapper($value, null, ["throw" => false])->getResult(null); + $expectedMessage = <<message); + } } diff --git a/tests/schema/_scalar/ScalarSchemaTest.php b/tests/schema/_scalar/ScalarSchemaTest.php index 916fba5..70714dc 100644 --- a/tests/schema/_scalar/ScalarSchemaTest.php +++ b/tests/schema/_scalar/ScalarSchemaTest.php @@ -19,6 +19,8 @@ class ScalarSchemaTest extends TestCase { "messages" => null, "formatter_func" => null, "format" => null, + "size" => null, + "precision" => null, "" => [ "scalar", "compute_func" => null,