From 089e4872aaa63da99d3d66d2d4d413c19201d94b Mon Sep 17 00:00:00 2001 From: Jephte Clain <Jephte.Clain@univ-reunion.fr> Date: Thu, 6 Mar 2025 16:22:12 +0400 Subject: [PATCH] =?UTF-8?q?renommer=20dest=20en=20value;=20tenir=20compte?= =?UTF-8?q?=20de=20la=20valeur=20par=20d=C3=A9faut?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/php/access/KeyAccess.php | 20 +-- src/php/access/ValueAccess.php | 20 +-- src/schema/AnalyzerContext.php | 14 +- src/schema/Schema.php | 10 +- src/schema/TODO.md | 15 +- src/schema/Wrapper.php | 2 +- src/schema/_assoc/AssocSchema.php | 6 +- src/schema/_list/ListSchema.php | 6 +- src/schema/_scalar/ScalarSchema.php | 9 +- src/schema/_scalar/ScalarWrapper.php | 96 ++++++----- src/schema/input/FormInput.php | 2 +- src/schema/input/Input.php | 10 +- src/schema/types.php | 1 + src/schema/types/IType.php | 4 +- src/schema/types/_tsimple.php | 4 +- src/schema/types/tbool.php | 4 +- tests/wip/schema/_scalar/ScalarValueTest.php | 33 +++- tests/wip/schema/types/boolTest.php | 144 ++++++++--------- tests/wip/schema/types/floatTest.php | 158 +++++++++---------- tests/wip/schema/types/intTest.php | 158 +++++++++---------- tests/wip/schema/types/strTest.php | 128 +++++++-------- tests/wip/schema/types/unionTest.php | 15 +- 22 files changed, 448 insertions(+), 411 deletions(-) diff --git a/src/php/access/KeyAccess.php b/src/php/access/KeyAccess.php index 9052b7d..2421c5a 100644 --- a/src/php/access/KeyAccess.php +++ b/src/php/access/KeyAccess.php @@ -8,8 +8,8 @@ use nulib\cl; * Class KeyAccess: accès à une valeur d'une clé dans un tableau */ class KeyAccess extends AbstractAccess { - function __construct(&$dest, $key, ?array $params=null) { - $this->dest =& $dest; + function __construct(&$array, $key, ?array $params=null) { + $this->array =& $array; $this->key = $key; $this->allowNull = $params["allow_null"] ?? true; $this->allowFalse = $params["allow_false"] ?? false; @@ -17,10 +17,10 @@ class KeyAccess extends AbstractAccess { } /** @var array|ArrayAccess */ - protected $dest; + protected $array; - function reset(&$dest): self { - $this->dest =& $dest; + function reset(&$array): self { + $this->array =& $array; return $this; } @@ -36,12 +36,12 @@ class KeyAccess extends AbstractAccess { function exists(): bool { $key = $this->key; if ($key === null) return false; - return cl::has($this->dest, $key); + return cl::has($this->array, $key); } function available(): bool { if (!$this->exists()) return false; - $value = cl::get($this->dest, $this->key); + $value = cl::get($this->array, $this->key); if ($value === null) return $this->allowNull; if ($value === false) return $this->allowFalse; if ($value === "") return $this->allowEmpty; @@ -50,7 +50,7 @@ class KeyAccess extends AbstractAccess { function get($default=null) { if ($this->key === null) return $default; - $value = cl::get($this->dest, $this->key, $default); + $value = cl::get($this->array, $this->key, $default); if ($value === null && !$this->allowNull) return $default; if ($value === false && !$this->allowFalse) return $default; if ($value === "" && !$this->allowEmpty) return $default; @@ -59,11 +59,11 @@ class KeyAccess extends AbstractAccess { function set($value): void { if ($this->key === null) return; - cl::set($this->dest, $this->key, $value); + cl::set($this->array, $this->key, $value); } function del(): void { if ($this->key === null) return; - cl::del($this->dest, $this->key); + cl::del($this->array, $this->key); } } diff --git a/src/php/access/ValueAccess.php b/src/php/access/ValueAccess.php index 3088785..624092f 100644 --- a/src/php/access/ValueAccess.php +++ b/src/php/access/ValueAccess.php @@ -5,18 +5,18 @@ namespace nur\sery\wip\php\access; * Class ValueAccess: accès à une valeur unitaire */ class ValueAccess extends AbstractAccess { - function __construct(&$dest, ?array $params=null) { - $this->dest =& $dest; + function __construct(&$value, ?array $params=null) { + $this->value =& $value; $this->allowNull = $params["allow_null"] ?? false; $this->allowFalse = $params["allow_false"] ?? true; $this->allowEmpty = $params["allow_empty"] ?? true; } /** @var mixed */ - protected $dest; + protected $value; - function reset(&$dest): self { - $this->dest =& $dest; + function reset(&$value): self { + $this->value =& $value; return $this; } @@ -27,19 +27,19 @@ class ValueAccess extends AbstractAccess { protected bool $allowEmpty; function exists(): bool { - return $this->allowNull || $this->dest !== null; + return $this->allowNull || $this->value !== null; } function available(): bool { if (!$this->exists()) return false; - $value = $this->dest; + $value = $this->value; if ($value === false) return $this->allowFalse; if ($value === "") return $this->allowEmpty; return true; } function get($default=null) { - $value = $this->dest; + $value = $this->value; if ($value === null && !$this->allowNull) return $default; if ($value === false && !$this->allowFalse) return $default; if ($value === "" && !$this->allowEmpty) return $default; @@ -47,10 +47,10 @@ class ValueAccess extends AbstractAccess { } function set($value): void { - $this->dest = $value; + $this->value = $value; } function del(): void { - $this->dest = null; + $this->value = null; } } diff --git a/src/schema/AnalyzerContext.php b/src/schema/AnalyzerContext.php index c9b60f6..3136c04 100644 --- a/src/schema/AnalyzerContext.php +++ b/src/schema/AnalyzerContext.php @@ -5,15 +5,15 @@ use nur\sery\wip\schema\input\Input; use nur\sery\wip\schema\types\IType; class AnalyzerContext { - function __construct(Schema $schema, Wrapper $wrapper, Input $input, $destKey, Result $result) { + function __construct(Schema $schema, Wrapper $wrapper, Input $input, $valueKey, Result $result) { $this->schema = $schema; $this->wrapper = $wrapper; $this->input = $input; $this->result = $result; $this->type = null; - $this->orig = null; - $this->dest = null; - $this->destKey = $destKey; + $this->origValue = null; + $this->value = null; + $this->valueKey = $valueKey; } public Schema $schema; @@ -22,9 +22,9 @@ class AnalyzerContext { public Result $result; public ?IType $type; /** @var mixed */ - public $orig; + public $origValue; /** @var mixed */ - public $dest; + public $value; /** @var int|string|null */ - public $destKey; + public $valueKey; } diff --git a/src/schema/Schema.php b/src/schema/Schema.php index f32a158..5c15209 100644 --- a/src/schema/Schema.php +++ b/src/schema/Schema.php @@ -39,16 +39,16 @@ abstract class Schema implements ArrayAccess { /** * Créer une nouvelle instance de {@link Wrapper} qui référence la - * variable $dest (si $destKey===null) ou $dest[$destKey] si $destKey n'est - * pas null + * variable $value (si $valueKey===null) ou $value[$valueKey] si $valueKey + * n'est pas null */ - static function nw(&$dest=null, $destKey=null, &$schema=null, $definition=null, ?Wrapper &$destw=null): Wrapper { + static function nw(&$value=null, $valueKey=null, &$schema=null, $definition=null, ?Wrapper &$wrapper=null): Wrapper { if ($definition === null) { # bien que techniquement, $definition peut être null (il s'agit alors du # schéma d'un scalaire quelconque), on ne l'autorise pas ici throw SchemaException::invalid_schema("definition is required"); } - return self::ns($schema, $definition)->newWrapper($dest, $destKey, $destw); + return self::ns($schema, $definition)->getWrapper($value, $valueKey, $wrapper); } /** @@ -70,7 +70,7 @@ abstract class Schema implements ArrayAccess { /** retourner true si le schéma est de nature scalaire */ function isScalar(?ScalarSchema &$scalar=null): bool { return false; } - abstract function newWrapper(&$dest=null, $destKey=null, ?Wrapper &$destw=null): Wrapper; + abstract function getWrapper(&$value=null, $valueKey=null, ?Wrapper &$wrapper=null): Wrapper; ############################################################################# # key & properties diff --git a/src/schema/TODO.md b/src/schema/TODO.md index 6910802..62def1a 100644 --- a/src/schema/TODO.md +++ b/src/schema/TODO.md @@ -1,7 +1,6 @@ # nulib\schema -* tenir compte de la valeur par défaut, qui *doit* être du bon type -* newInput dans Schema +* tester type===null --> implémenter traw et tmixed * ScalarSchema::from_property() * dans AssocSchema, support `[key_prefix]` qui permet de spécifier un préfixe @@ -11,11 +10,11 @@ "a" => "?string", "b" => "?int", ])->newWrapper(); - $dest = ["x_a" => 5, "x_b" => "10"], - $wrapper->reset($dest, null, [ + $value = ["x_a" => 5, "x_b" => "10"], + $wrapper->reset($value, null, [ "key_prefix" => "x_", ]); - # $dest vaut ["x_a" => "5", "x_b" => 10]; + # $value vaut ["x_a" => "5", "x_b" => 10]; ~~~ définir si le préfixe doit être spécifié sur le schéma ou sur la valeur... actuellement, le code ne permet pas de définir de tels paramètres... @@ -29,9 +28,9 @@ ], [ "key_prefix" => "x_", ])->newWrapper(); - $dest = ["x_a" => 5, "x_b" => "10"], - $wrapper->reset($dest); - # $dest vaut ["x_a" => "5", "x_b" => 10]; + $value = ["x_a" => 5, "x_b" => "10"], + $wrapper->reset($value); + # $value vaut ["x_a" => "5", "x_b" => 10]; ~~~ * implémenter l'instanciation de types avec des paramètres particuliers. *si* des paramètres sont fournis, le type est instancié avec la signature diff --git a/src/schema/Wrapper.php b/src/schema/Wrapper.php index 5a62cf0..20194dd 100644 --- a/src/schema/Wrapper.php +++ b/src/schema/Wrapper.php @@ -14,7 +14,7 @@ abstract class Wrapper implements ArrayAccess, IteratorAggregate { function isScalar(?ScalarWrapper &$scalar=null): bool { return false; } /** spécifier la valeur destination gérée par cet objet */ - abstract function reset(&$dest, $destKey=null, ?bool $verifix=null): self; + abstract function reset(&$value, $valueKey=null, ?bool $verifix=null): self; /** * Obtenir la liste des clés valides pour les valeurs accessibles via cet diff --git a/src/schema/_assoc/AssocSchema.php b/src/schema/_assoc/AssocSchema.php index 33e73cf..8e8b260 100644 --- a/src/schema/_assoc/AssocSchema.php +++ b/src/schema/_assoc/AssocSchema.php @@ -48,8 +48,8 @@ class AssocSchema extends Schema { return true; } - function newWrapper(&$dest=null, $destKey=null, ?Wrapper &$destw=null): AssocWrapper { - if ($destw instanceof AssocWrapper) return $destw->reset($dest, $destKey); - else return ($destw = new AssocWrapper($this, $dest, $destKey)); + function getWrapper(&$value=null, $valueKey=null, ?Wrapper &$wrapper=null): AssocWrapper { + if ($wrapper instanceof AssocWrapper) return $wrapper->reset($value, $valueKey); + else return ($wrapper = new AssocWrapper($this, $value, $valueKey)); } } diff --git a/src/schema/_list/ListSchema.php b/src/schema/_list/ListSchema.php index 1eb3340..f4bbfbc 100644 --- a/src/schema/_list/ListSchema.php +++ b/src/schema/_list/ListSchema.php @@ -46,8 +46,8 @@ class ListSchema extends Schema { return true; } - function newWrapper(&$dest=null, $destKey=null, ?Wrapper &$destw=null): ListWrapper { - if ($destw instanceof ListWrapper) return $destw->reset($dest, $destKey); - else return ($destw = new ListWrapper($this, $dest, $destKey)); + function getWrapper(&$value=null, $valueKey=null, ?Wrapper &$wrapper=null): ListWrapper { + if ($wrapper instanceof ListWrapper) return $wrapper->reset($value, $valueKey); + else return ($wrapper = new ListWrapper($this, $value, $valueKey)); } } diff --git a/src/schema/_scalar/ScalarSchema.php b/src/schema/_scalar/ScalarSchema.php index 88650a1..947a5e7 100644 --- a/src/schema/_scalar/ScalarSchema.php +++ b/src/schema/_scalar/ScalarSchema.php @@ -7,6 +7,7 @@ use nulib\ref\schema\ref_types; use nur\sery\wip\schema\Schema; use nur\sery\wip\schema\SchemaException; use nur\sery\wip\schema\types; +use nur\sery\wip\schema\types\IType; use nur\sery\wip\schema\types\tarray; use nur\sery\wip\schema\types\tbool; use nur\sery\wip\schema\types\tcallable; @@ -18,7 +19,7 @@ use nur\sery\wip\schema\Wrapper; /** * Class ScalarSchema * - * @property-read array $type + * @property-read array|IType $type * @property-read mixed $default * @property-read string|null $title * @property-read bool $required @@ -193,9 +194,9 @@ class ScalarSchema extends Schema { return true; } - function newWrapper(&$dest=null, $destKey=null, ?Wrapper &$destw=null): ScalarWrapper { - if ($destw instanceof ScalarWrapper) return $destw->reset($dest, $destKey); - else return ($destw = new ScalarWrapper($this, $dest, $destKey)); + function getWrapper(&$value=null, $valueKey=null, ?Wrapper &$wrapper=null): ScalarWrapper { + if ($wrapper instanceof ScalarWrapper) return $wrapper->reset($value, $valueKey); + else return ($wrapper = new ScalarWrapper($this, $value, $valueKey)); } ############################################################################# diff --git a/src/schema/_scalar/ScalarWrapper.php b/src/schema/_scalar/ScalarWrapper.php index 0734b8b..db1e7aa 100644 --- a/src/schema/_scalar/ScalarWrapper.php +++ b/src/schema/_scalar/ScalarWrapper.php @@ -9,14 +9,13 @@ use nur\sery\wip\schema\input\Input; use nur\sery\wip\schema\types; use nur\sery\wip\schema\types\IType; use nur\sery\wip\schema\Wrapper; -use PHPUnit\Event\Code\Throwable; class ScalarWrapper extends Wrapper { - function __construct(ScalarSchema $schema, &$dest=null, $destKey=null, ?array $params=null) { + function __construct(ScalarSchema $schema, &$value=null, $valueKey=null, ?array $params=null) { $verifix = $params["verifix"] ?? true; $throw = $params["throw"] ?? null; - if ($dest !== null && $throw === null) { - # Si $dest est null, ne pas lancer d'exception, parce qu'on considère que + if ($value !== null && $throw === null) { + # Si $value est null, ne pas lancer d'exception, parce qu'on considère que # c'est une initialisation sans conséquences $throw = true; } @@ -24,7 +23,7 @@ class ScalarWrapper extends Wrapper { $this->verifix = $verifix; $this->throw = $throw ?? false; $this->result = new ScalarResult(); - $this->reset($dest, $destKey); + $this->reset($value, $valueKey); $this->throw = $throw ?? true; } @@ -37,7 +36,7 @@ class ScalarWrapper extends Wrapper { protected Input $input; /** @var string|int|null clé de la valeur dans le tableau destination */ - protected $destKey; + protected $valueKey; protected bool $verifix; @@ -49,11 +48,15 @@ class ScalarWrapper extends Wrapper { /** résultat de l'analyse de la valeur */ protected ScalarResult $result; - function reset(&$dest, $destKey=null, ?bool $verifix=null): Wrapper { - if ($dest instanceof Input) $input = $dest; - else $input = new Input($dest); + protected function newInput(&$value): Input { + return new Input($value); + } + + function reset(&$value, $valueKey=null, ?bool $verifix=null): Wrapper { + if ($value instanceof Input) $input = $value; + else $input = $this->newInput($value); $this->input = $input; - $this->destKey = $destKey; + $this->valueKey = $valueKey; $this->type = null; $this->analyzeExtractParse(); if ($verifix ?? $this->verifix) $this->verifix(); @@ -74,11 +77,19 @@ class ScalarWrapper extends Wrapper { /** @var ScalarSchema $schema */ $schema = $context->schema; $input = $context->input; - $destKey = $context->destKey; + $valueKey = $context->valueKey; /** @var ScalarResult $result */ $result = $context->result; - if (!$input->isPresent($destKey)) return $result->setMissing($schema); + $default = $schema->default; + if (!$input->isPresent($valueKey)) { + if ($default !== null) { + $input->set($default, $valueKey); + return $result->setNormalized(); + } else { + return $result->setMissing($schema); + } + } $schemaTypes = $schema->type; if ($schemaTypes instanceof IType) { @@ -103,9 +114,9 @@ class ScalarWrapper extends Wrapper { $type = types::get($schema->nullable, $name, $params, $this->schema->getDefinition()); if ($firstType === null) $firstType = $type; $types[] = $type; - if ($type->isAvailable($input, $destKey)) { + if ($type->isAvailable($input, $valueKey)) { if (!$haveValue) { - $value = $input->get($destKey); + $value = $input->get($valueKey); $haveValue = true; } if ($type->isValid($value, $normalized) && $normalized) { @@ -117,7 +128,7 @@ class ScalarWrapper extends Wrapper { # ensuite chercher un type pour lequel la valeur est valide if (!$haveType) { foreach ($types as $type) { - if ($type->isAvailable($input, $destKey) && $type->isValid($value)) { + if ($type->isAvailable($input, $valueKey) && $type->isValid($value)) { $haveType = true; break; } @@ -130,10 +141,17 @@ class ScalarWrapper extends Wrapper { } $context->type = $this->type = $type; - if (!$type->isAvailable($input, $destKey)) return $result->setUnavailable($schema); + if (!$type->isAvailable($input, $valueKey)) { + if ($default !== null) { + $input->set($default, $valueKey); + return $result->setNormalized(); + } else { + return $result->setUnavailable($schema); + } + } - $value = $input->get($destKey); - $context->orig = $context->dest = $value; + $value = $input->get($valueKey); + $context->origValue = $context->value = $value; if ($type->isNull($value)) { return $result->setNull($schema); } elseif (is_string($value)) { @@ -149,10 +167,10 @@ class ScalarWrapper extends Wrapper { function analyzeExtractParse(): int { $schema = $this->schema; $input = $this->input; - $destKey = $this->destKey; + $valueKey = $this->valueKey; $result = $this->result; $result->reset(); - $context = new AnalyzerContext($schema, $this, $input, $destKey, $result); + $context = new AnalyzerContext($schema, $this, $input, $valueKey, $result); /** @var func $analyzerFunc */ $analyzerFunc = $schema->analyzerFunc; @@ -160,15 +178,15 @@ class ScalarWrapper extends Wrapper { else $what = $this->_analyze($context); if ($what !== ref_analyze::STRING) return $what; - $dest = $context->dest; + $value = $context->value; try { /** @var func $extractorFunc */ $extractorFunc = $schema->extractorFunc; - if ($extractorFunc !== null) $extracted = $extractorFunc->invoke([$dest, $context]); - else $extracted = $context->type->extract($dest); - $context->dest = $extracted; + if ($extractorFunc !== null) $extracted = $extractorFunc->invoke([$value, $context]); + else $extracted = $context->type->extract($value); + $context->value = $extracted; } catch (ValueException $e) { - return $result->setInvalid($context->orig, $schema, $e); + return $result->setInvalid($context->origValue, $schema, $e); } if ($context->type->isNull($extracted)) return $result->setNull($schema); @@ -177,31 +195,31 @@ class ScalarWrapper extends Wrapper { $parserFunc = $schema->parserFunc; if ($parserFunc !== null) $parsed = $parserFunc->invoke([$extracted, $context]); else $parsed = $context->type->parse($extracted); - $context->dest = $parsed; + $context->value = $parsed; } catch (ValueException $e) { - return $result->setInvalid($context->orig, $schema, $e); + return $result->setInvalid($context->origValue, $schema, $e); } - $normalized = $parsed === $context->orig; + $normalized = $parsed === $context->origValue; if ($normalized) { - $input->set($parsed, $destKey); + $input->set($parsed, $valueKey); return $result->setNormalized(); } else { - $input->set($extracted, $destKey); + $input->set($extracted, $valueKey); return $result->setValid($parsed); } } function verifix(?bool $throw=null): bool { $result = $this->result; - $destKey = $this->destKey; + $valueKey = $this->valueKey; $verifix = false; $modified = false; if ($result->resultAvailable) { if ($result->null) { # forcer la valeur null, parce que la valeur actuelle est peut-être une # valeur assimilée à null - $this->input->set(null, $destKey); + $this->input->set(null, $valueKey); } elseif ($result->valid && !$result->normalized) { $normalizedValue = $result->normalizedValue; if ($normalizedValue !== null) { @@ -219,19 +237,19 @@ class ScalarWrapper extends Wrapper { } if ($verifix) { - $value = $this->input->get($destKey); + $value = $this->input->get($valueKey); $schema = $this->schema; /** @var func $normalizerFunc */ $normalizerFunc = $schema->normalizerFunc; if ($normalizerFunc !== null) { - $context = new AnalyzerContext($schema, $this, $this->input, $destKey, $result); + $context = new AnalyzerContext($schema, $this, $this->input, $valueKey, $result); $orig = $value; $value = $normalizerFunc->invoke([$orig, $context]); $modified = $value !== $orig; } else { $modified = $this->type->verifix($value, $result, $this->schema); } - if ($result->valid) $this->input->set($value, $destKey); + if ($result->valid) $this->input->set($value, $valueKey); } if (!$result->valid) $result->throw($throw ?? $this->throw); return $modified; @@ -262,26 +280,26 @@ class ScalarWrapper extends Wrapper { } function get($default=null) { - if ($this->result->available) return $this->input->get($this->destKey); + if ($this->result->available) return $this->input->get($this->valueKey); else return $default; } function set($value, ?bool $verifix=null): ScalarWrapper { - $this->input->set($value, $this->destKey); + $this->input->set($value, $this->valueKey); $this->analyzeExtractParse(); if ($verifix ?? $this->verifix) $this->verifix(); return $this; } function unset(?bool $verifix=null): ScalarWrapper { - $this->input->unset($this->destKey); + $this->input->unset($this->valueKey); $this->analyzeExtractParse(); if ($verifix ?? $this->verifix) $this->verifix(); return $this; } function format($format=null): string { - $value = $this->input->get($this->destKey); + $value = $this->input->get($this->valueKey); /** @var func $formatterFunc */ $formatterFunc = $this->schema->formatterFunc; if ($formatterFunc !== null) { diff --git a/src/schema/input/FormInput.php b/src/schema/input/FormInput.php index 01b56c2..e708cd5 100644 --- a/src/schema/input/FormInput.php +++ b/src/schema/input/FormInput.php @@ -25,7 +25,7 @@ class FormInput extends Input { } protected function access($key): IAccess { - return $this->keyAccess[$key] ??= new ShadowAccess($this->formAccess($key), new KeyAccess($this->dest, $key, [ + return $this->keyAccess[$key] ??= new ShadowAccess($this->formAccess($key), new KeyAccess($this->value, $key, [ "allow_empty" => $this->allowEmpty, ])); } diff --git a/src/schema/input/Input.php b/src/schema/input/Input.php index 881adb0..1008d87 100644 --- a/src/schema/input/Input.php +++ b/src/schema/input/Input.php @@ -13,13 +13,13 @@ use nur\sery\wip\php\access\ValueAccess; class Input { const ALLOW_EMPTY = true; - function __construct(&$dest=null, ?array $params=null) { - $this->dest =& $dest; + function __construct(&$value=null, ?array $params=null) { + $this->value =& $value; $this->allowEmpty = $params["allow_empty"] ?? static::ALLOW_EMPTY; } /** @var mixed */ - protected $dest; + protected $value; /** * @var bool comment considérer une chaine vide: "" si allowEmpty, null sinon @@ -31,12 +31,12 @@ class Input { protected function access($key): IAccess { if ($key === null) { - return $this->valueAccess ??= new ValueAccess($this->dest, [ + return $this->valueAccess ??= new ValueAccess($this->value, [ "allow_null" => true, "allow_empty" => $this->allowEmpty, ]); } else { - return $this->keyAccess[$key] ??= new KeyAccess($this->dest, $key, [ + return $this->keyAccess[$key] ??= new KeyAccess($this->value, $key, [ "allow_empty" => $this->allowEmpty, ]); } diff --git a/src/schema/types.php b/src/schema/types.php index f02a696..c69ccba 100644 --- a/src/schema/types.php +++ b/src/schema/types.php @@ -9,6 +9,7 @@ use nur\sery\wip\schema\types\tcallable; use nur\sery\wip\schema\types\tfloat; use nur\sery\wip\schema\types\tint; use nur\sery\wip\schema\types\trawstring; +use nur\sery\wip\schema\types\tstring; use nur\sery\wip\schema\types\ttext; /** diff --git a/src/schema/types/IType.php b/src/schema/types/IType.php index 2518248..f7fd5cc 100644 --- a/src/schema/types/IType.php +++ b/src/schema/types/IType.php @@ -58,8 +58,8 @@ interface IType { */ function get3States(): array; - /** la donnée $input($destKey) est-elle disponible? */ - function isAvailable(Input $input, $destKey): bool; + /** la donnée $input($valueKey) est-elle disponible? */ + function isAvailable(Input $input, $valueKey): bool; /** la valeur $value est-elle nulle? */ function isNull($value): bool; diff --git a/src/schema/types/_tsimple.php b/src/schema/types/_tsimple.php index 957f0aa..5f9ce7e 100644 --- a/src/schema/types/_tsimple.php +++ b/src/schema/types/_tsimple.php @@ -39,8 +39,8 @@ abstract class _tsimple implements IType { throw StateException::not_implemented(); } - function isAvailable(Input $input, $destKey): bool { - return $input->isAvailable($destKey) && $input->get($destKey) !== false; + function isAvailable(Input $input, $valueKey): bool { + return $input->isAvailable($valueKey) && $input->get($valueKey) !== false; } function isNull($value): bool { diff --git a/src/schema/types/tbool.php b/src/schema/types/tbool.php index 891fe21..39c17e1 100644 --- a/src/schema/types/tbool.php +++ b/src/schema/types/tbool.php @@ -72,8 +72,8 @@ class tbool extends _tformatable { return [false, true, null]; } - function isAvailable(Input $input, $destKey): bool { - return $input->isAvailable($destKey); + function isAvailable(Input $input, $valueKey): bool { + return $input->isAvailable($valueKey); } function isValid($value, ?bool &$normalized=null): bool { diff --git a/tests/wip/schema/_scalar/ScalarValueTest.php b/tests/wip/schema/_scalar/ScalarValueTest.php index 1fb9184..e39fe1b 100644 --- a/tests/wip/schema/_scalar/ScalarValueTest.php +++ b/tests/wip/schema/_scalar/ScalarValueTest.php @@ -6,16 +6,16 @@ use nulib\ValueException; use nur\sery\wip\schema\input\Input; class ScalarValueTest extends TestCase { - function checkValue(ScalarWrapper $value, $dest, bool $present, bool $available, bool $valid, bool $normalized): void { - self::assertSame($dest, $value->get(), "value"); - self::assertSame($present, $value->isPresent(), "present"); - self::assertSame($available, $value->isAvailable(), "available"); - self::assertSame($valid, $value->isValid(), "valid"); - self::assertSame($normalized, $value->isNormalized(), "normalized"); + function checkValue(ScalarWrapper $wrapper, $dest, bool $present, bool $available, bool $valid, bool $normalized): void { + self::assertSame($dest, $wrapper->get(), "value"); + self::assertSame($present, $wrapper->isPresent(), "present"); + self::assertSame($available, $wrapper->isAvailable(), "available"); + self::assertSame($valid, $wrapper->isValid(), "valid"); + self::assertSame($normalized, $wrapper->isNormalized(), "normalized"); } function checkVerifix(ScalarSchema $schema, $src, bool $verifix, $dest, bool $present, bool $available, bool $valid, bool $normalized, ?array $inputParams=null): void { - $value = $schema->newWrapper(); + $value = $schema->getWrapper(); if ($inputParams !== null) $input = new Input($src, $inputParams); else $input = $src; $value->reset($input, null, $verifix); @@ -23,7 +23,7 @@ class ScalarValueTest extends TestCase { } function checkException(ScalarSchema $schema, $src, bool $verifix, string $exceptionClass, ?array $inputParams=null) { - $value = $schema->newWrapper(); + $value = $schema->getWrapper(); if ($inputParams !== null) $src = new Input($src, $inputParams); self::assertException($exceptionClass, function() use ($value, &$src, $verifix) { $value->reset($src, null, $verifix); @@ -60,6 +60,23 @@ class ScalarValueTest extends TestCase { $this->checkVerifix($schema, [], false, [], true, true, false, false); $this->checkException($schema, [], true, ValueException::class); + ## Tester valeur par défaut + $schema = new ScalarSchema(["rawstring", null]); + + $this->checkVerifix($schema, false, false, null, true, false, true, true); + $this->checkVerifix($schema, false, true, null, true, false, true, true); + + $this->checkVerifix($schema, null, false, null, true, true, false, false); + $this->checkException($schema, null, true, ValueException::class); + + $schema = new ScalarSchema(["rawstring", "default"]); + + $this->checkVerifix($schema, false, false, "default", true, true, true, true); + $this->checkVerifix($schema, false, true, "default", true, true, true, true); + + $this->checkVerifix($schema, null, false, null, true, true, false, false); + $this->checkException($schema, null, true, ValueException::class); + ## Tester nullable $schema = new ScalarSchema("?rawstring"); diff --git a/tests/wip/schema/types/boolTest.php b/tests/wip/schema/types/boolTest.php index 98067b4..f4db6ce 100644 --- a/tests/wip/schema/types/boolTest.php +++ b/tests/wip/schema/types/boolTest.php @@ -7,105 +7,105 @@ use nur\sery\wip\schema\_scalar\ScalarWrapper; use nur\sery\wip\schema\Schema; class boolTest extends TestCase { - function commonTests($destv, &$dest, callable $destvSetter): void { - $destv->set(true); - self::assertSame(true, $destv->get()); - self::assertSame(true, $dest); - self::assertSame("Oui", $destv->format()); - self::assertSame("Oui", $destv->format("OuiNonNull")); - self::assertSame("O", $destv->format("ON")); - self::assertSame("O", $destv->format("ONN")); + function commonTests($wrapper, &$value, callable $wrapperSetter): void { + $wrapper->set(true); + self::assertSame(true, $wrapper->get()); + self::assertSame(true, $value); + self::assertSame("Oui", $wrapper->format()); + self::assertSame("Oui", $wrapper->format("OuiNonNull")); + self::assertSame("O", $wrapper->format("ON")); + self::assertSame("O", $wrapper->format("ONN")); - $destv->set(false); - self::assertSame(false, $destv->get()); - self::assertSame(false, $dest); - self::assertSame("Non", $destv->format()); - self::assertSame("Non", $destv->format("OuiNonNull")); - self::assertSame("N", $destv->format("ON")); - self::assertSame("N", $destv->format("ONN")); + $wrapper->set(false); + self::assertSame(false, $wrapper->get()); + self::assertSame(false, $value); + self::assertSame("Non", $wrapper->format()); + self::assertSame("Non", $wrapper->format("OuiNonNull")); + self::assertSame("N", $wrapper->format("ON")); + self::assertSame("N", $wrapper->format("ONN")); - $destv->set("yes"); - self::assertSame(true, $destv->get()); + $wrapper->set("yes"); + self::assertSame(true, $wrapper->get()); - $destv->set(" yes "); - self::assertSame(true, $destv->get()); + $wrapper->set(" yes "); + self::assertSame(true, $wrapper->get()); - $destv->set("12"); - self::assertSame(true, $destv->get()); + $wrapper->set("12"); + self::assertSame(true, $wrapper->get()); - $destv->set(12); - self::assertSame(true, $destv->get()); + $wrapper->set(12); + self::assertSame(true, $wrapper->get()); - $destv->set("no"); - self::assertSame(false, $destv->get()); + $wrapper->set("no"); + self::assertSame(false, $wrapper->get()); - $destv->set(" no "); - self::assertSame(false, $destv->get()); + $wrapper->set(" no "); + self::assertSame(false, $wrapper->get()); - $destv->set("0"); - self::assertSame(false, $destv->get()); + $wrapper->set("0"); + self::assertSame(false, $wrapper->get()); - $destv->set(0); - self::assertSame(false, $destv->get()); + $wrapper->set(0); + self::assertSame(false, $wrapper->get()); - $destv->set(12.34); - self::assertSame(true, $destv->get()); + $wrapper->set(12.34); + self::assertSame(true, $wrapper->get()); - self::assertException(Exception::class, $destvSetter("a")); - self::assertException(Exception::class, $destvSetter([])); - self::assertException(Exception::class, $destvSetter(["a"])); + self::assertException(Exception::class, $wrapperSetter("a")); + self::assertException(Exception::class, $wrapperSetter([])); + self::assertException(Exception::class, $wrapperSetter(["a"])); } function testBool() { - /** @var ScalarWrapper $destv */ - Schema::nw($dest, null, $schema, "bool", $destv); - $destvSetter = function($value) use($destv) { - return function() use($destv, $value) { - $destv->set($value); + /** @var ScalarWrapper $wrapper */ + Schema::nw($value, null, $schema, "bool", $wrapper); + $wrapperSetter = function($value) use($wrapper) { + return function() use($wrapper, $value) { + $wrapper->set($value); }; }; - self::assertException(Exception::class, $destvSetter(null)); - self::assertException(Exception::class, $destvSetter("")); - self::assertException(Exception::class, $destvSetter(" ")); + self::assertException(Exception::class, $wrapperSetter(null)); + self::assertException(Exception::class, $wrapperSetter("")); + self::assertException(Exception::class, $wrapperSetter(" ")); - $this->commonTests($destv, $dest, $destvSetter); + $this->commonTests($wrapper, $value, $wrapperSetter); } function testNbool() { - /** @var ScalarWrapper $destv */ - Schema::nw($dest, null, $schema, "?bool", $destv); - $destvSetter = function($value) use($destv) { - return function() use($destv, $value) { - $destv->set($value); + /** @var ScalarWrapper $wrapper */ + Schema::nw($value, null, $schema, "?bool", $wrapper); + $wrapperSetter = function($value) use($wrapper) { + return function() use($wrapper, $value) { + $wrapper->set($value); }; }; - $destv->set(null); - self::assertNull($destv->get()); - self::assertNull($dest); - self::assertSame("Non", $destv->format()); - self::assertSame("", $destv->format("OuiNonNull")); - self::assertSame("N", $destv->format("ON")); - self::assertSame("", $destv->format("ONN")); + $wrapper->set(null); + self::assertNull($wrapper->get()); + self::assertNull($value); + self::assertSame("Non", $wrapper->format()); + self::assertSame("", $wrapper->format("OuiNonNull")); + self::assertSame("N", $wrapper->format("ON")); + self::assertSame("", $wrapper->format("ONN")); - $destv->set(""); - self::assertNull($destv->get()); - self::assertNull($dest); - self::assertSame("Non", $destv->format()); - self::assertSame("", $destv->format("OuiNonNull")); - self::assertSame("N", $destv->format("ON")); - self::assertSame("", $destv->format("ONN")); + $wrapper->set(""); + self::assertNull($wrapper->get()); + self::assertNull($value); + self::assertSame("Non", $wrapper->format()); + self::assertSame("", $wrapper->format("OuiNonNull")); + self::assertSame("N", $wrapper->format("ON")); + self::assertSame("", $wrapper->format("ONN")); - $destv->set(" "); - self::assertNull($destv->get()); - self::assertNull($dest); - self::assertSame("Non", $destv->format()); - self::assertSame("", $destv->format("OuiNonNull")); - self::assertSame("N", $destv->format("ON")); - self::assertSame("", $destv->format("ONN")); + $wrapper->set(" "); + self::assertNull($wrapper->get()); + self::assertNull($value); + self::assertSame("Non", $wrapper->format()); + self::assertSame("", $wrapper->format("OuiNonNull")); + self::assertSame("N", $wrapper->format("ON")); + self::assertSame("", $wrapper->format("ONN")); - $this->commonTests($destv, $dest, $destvSetter); + $this->commonTests($wrapper, $value, $wrapperSetter); } } diff --git a/tests/wip/schema/types/floatTest.php b/tests/wip/schema/types/floatTest.php index 27411b9..a4679a4 100644 --- a/tests/wip/schema/types/floatTest.php +++ b/tests/wip/schema/types/floatTest.php @@ -7,133 +7,133 @@ use nur\sery\wip\schema\_scalar\ScalarWrapper; use nur\sery\wip\schema\Schema; class floatTest extends TestCase { - function commonTests($destv, &$dest, callable $destvSetter): void { - $destv->set(12); - self::assertSame(12.0, $destv->get()); - self::assertSame(12.0, $dest); - self::assertSame("12", $destv->format()); - self::assertSame("0012", $destv->format("%04u")); + function commonTests($wrapper, &$value, callable $wrapperSetter): void { + $wrapper->set(12); + self::assertSame(12.0, $wrapper->get()); + self::assertSame(12.0, $value); + self::assertSame("12", $wrapper->format()); + self::assertSame("0012", $wrapper->format("%04u")); - $destv->set("12"); - self::assertSame(12.0, $destv->get()); + $wrapper->set("12"); + self::assertSame(12.0, $wrapper->get()); - $destv->set(" 12 "); - self::assertSame(12.0, $destv->get()); + $wrapper->set(" 12 "); + self::assertSame(12.0, $wrapper->get()); - $destv->set(12.34); - self::assertSame(12.34, $destv->get()); + $wrapper->set(12.34); + self::assertSame(12.34, $wrapper->get()); - $destv->set(true); - self::assertSame(1.0, $destv->get()); + $wrapper->set(true); + self::assertSame(1.0, $wrapper->get()); - self::assertException(Exception::class, $destvSetter("a")); - self::assertException(Exception::class, $destvSetter([])); - self::assertException(Exception::class, $destvSetter(["a"])); + self::assertException(Exception::class, $wrapperSetter("a")); + self::assertException(Exception::class, $wrapperSetter([])); + self::assertException(Exception::class, $wrapperSetter(["a"])); } function testFloat() { - /** @var ScalarWrapper $destv */ - Schema::nw($dest, null, $schema, "float", $destv); - $destvSetter = function($value) use($destv) { - return function() use($destv, $value) { - $destv->set($value); + /** @var ScalarWrapper $wrapper */ + Schema::nw($value, null, $schema, "float", $wrapper); + $wrapperSetter = function($value) use($wrapper) { + return function() use($wrapper, $value) { + $wrapper->set($value); }; }; - self::assertException(Exception::class, $destvSetter(null)); - self::assertException(Exception::class, $destvSetter("")); - self::assertException(Exception::class, $destvSetter(" ")); + self::assertException(Exception::class, $wrapperSetter(null)); + self::assertException(Exception::class, $wrapperSetter("")); + self::assertException(Exception::class, $wrapperSetter(" ")); // valeur non requise donc retourne null - $destv->set(false); - self::assertNull($destv->get()); + $wrapper->set(false); + self::assertNull($wrapper->get()); - $this->commonTests($destv, $dest, $destvSetter); + $this->commonTests($wrapper, $value, $wrapperSetter); } function testRequiredFloat() { - /** @var ScalarWrapper $destv */ - Schema::nw($dest, null, $schema, [ + /** @var ScalarWrapper $wrapper */ + Schema::nw($value, null, $schema, [ "float", null, "required" => true, - ], $destv); - $destvSetter = function($value) use($destv) { - return function() use($destv, $value) { - $destv->set($value); + ], $wrapper); + $wrapperSetter = function($value) use($wrapper) { + return function() use($wrapper, $value) { + $wrapper->set($value); }; }; - self::assertException(Exception::class, $destvSetter(null)); - self::assertException(Exception::class, $destvSetter("")); - self::assertException(Exception::class, $destvSetter(" ")); + self::assertException(Exception::class, $wrapperSetter(null)); + self::assertException(Exception::class, $wrapperSetter("")); + self::assertException(Exception::class, $wrapperSetter(" ")); // valeur requise donc lance une exception - self::assertException(Exception::class, $destvSetter(false)); + self::assertException(Exception::class, $wrapperSetter(false)); - $this->commonTests($destv, $dest, $destvSetter); + $this->commonTests($wrapper, $value, $wrapperSetter); } function testNfloat() { - /** @var ScalarWrapper $destv */ - Schema::nw($dest, null, $schema, "?float", $destv); - $destvSetter = function($value) use($destv) { - return function() use($destv, $value) { - $destv->set($value); + /** @var ScalarWrapper $wrapper */ + Schema::nw($value, null, $schema, "?float", $wrapper); + $wrapperSetter = function($value) use($wrapper) { + return function() use($wrapper, $value) { + $wrapper->set($value); }; }; - $destv->set(null); - self::assertNull($destv->get()); - self::assertNull($dest); - self::assertSame("", $destv->format()); + $wrapper->set(null); + self::assertNull($wrapper->get()); + self::assertNull($value); + self::assertSame("", $wrapper->format()); - $destv->set(""); - self::assertNull($destv->get()); - self::assertNull($dest); - self::assertSame("", $destv->format()); + $wrapper->set(""); + self::assertNull($wrapper->get()); + self::assertNull($value); + self::assertSame("", $wrapper->format()); - $destv->set(" "); - self::assertNull($destv->get()); - self::assertNull($dest); - self::assertSame("", $destv->format()); + $wrapper->set(" "); + self::assertNull($wrapper->get()); + self::assertNull($value); + self::assertSame("", $wrapper->format()); // valeur non requise donc retourne null - $destv->set(false); - self::assertNull($destv->get()); + $wrapper->set(false); + self::assertNull($wrapper->get()); - $this->commonTests($destv, $dest, $destvSetter); + $this->commonTests($wrapper, $value, $wrapperSetter); } function testRequiredNfloat() { - /** @var ScalarWrapper $destv */ - Schema::nw($dest, null, $schema, [ + /** @var ScalarWrapper $wrapper */ + Schema::nw($value, null, $schema, [ "?float", null, "required" => true, - ], $destv); - $destvSetter = function($value) use($destv) { - return function() use($destv, $value) { - $destv->set($value); + ], $wrapper); + $wrapperSetter = function($value) use($wrapper) { + return function() use($wrapper, $value) { + $wrapper->set($value); }; }; - $destv->set(null); - self::assertNull($destv->get()); - self::assertNull($dest); - self::assertSame("", $destv->format()); + $wrapper->set(null); + self::assertNull($wrapper->get()); + self::assertNull($value); + self::assertSame("", $wrapper->format()); - $destv->set(""); - self::assertNull($destv->get()); - self::assertNull($dest); - self::assertSame("", $destv->format()); + $wrapper->set(""); + self::assertNull($wrapper->get()); + self::assertNull($value); + self::assertSame("", $wrapper->format()); - $destv->set(" "); - self::assertNull($destv->get()); - self::assertNull($dest); - self::assertSame("", $destv->format()); + $wrapper->set(" "); + self::assertNull($wrapper->get()); + self::assertNull($value); + self::assertSame("", $wrapper->format()); // valeur requise donc lance une exception - self::assertException(Exception::class, $destvSetter(false)); + self::assertException(Exception::class, $wrapperSetter(false)); - $this->commonTests($destv, $dest, $destvSetter); + $this->commonTests($wrapper, $value, $wrapperSetter); } } diff --git a/tests/wip/schema/types/intTest.php b/tests/wip/schema/types/intTest.php index a013b01..c9cccbf 100644 --- a/tests/wip/schema/types/intTest.php +++ b/tests/wip/schema/types/intTest.php @@ -7,133 +7,133 @@ use nur\sery\wip\schema\_scalar\ScalarWrapper; use nur\sery\wip\schema\Schema; class intTest extends TestCase { - function commonTests($destv, &$dest, callable $destvSetter): void { - $destv->set(12); - self::assertSame(12, $destv->get()); - self::assertSame(12, $dest); - self::assertSame("12", $destv->format()); - self::assertSame("0012", $destv->format("%04u")); + function commonTests($wrapper, &$value, callable $wrapperSetter): void { + $wrapper->set(12); + self::assertSame(12, $wrapper->get()); + self::assertSame(12, $value); + self::assertSame("12", $wrapper->format()); + self::assertSame("0012", $wrapper->format("%04u")); - $destv->set("12"); - self::assertSame(12, $destv->get()); + $wrapper->set("12"); + self::assertSame(12, $wrapper->get()); - $destv->set(" 12 "); - self::assertSame(12, $destv->get()); + $wrapper->set(" 12 "); + self::assertSame(12, $wrapper->get()); - $destv->set(12.34); - self::assertSame(12, $destv->get()); + $wrapper->set(12.34); + self::assertSame(12, $wrapper->get()); - $destv->set(true); - self::assertSame(1, $destv->get()); + $wrapper->set(true); + self::assertSame(1, $wrapper->get()); - self::assertException(Exception::class, $destvSetter("a")); - self::assertException(Exception::class, $destvSetter([])); - self::assertException(Exception::class, $destvSetter(["a"])); + self::assertException(Exception::class, $wrapperSetter("a")); + self::assertException(Exception::class, $wrapperSetter([])); + self::assertException(Exception::class, $wrapperSetter(["a"])); } function testInt() { - /** @var ScalarWrapper $destv */ - Schema::nw($dest, null, $schema, "int", $destv); - $destvSetter = function($value) use($destv) { - return function() use($destv, $value) { - $destv->set($value); + /** @var ScalarWrapper $wrapper */ + Schema::nw($value, null, $schema, "int", $wrapper); + $wrapperSetter = function($value) use($wrapper) { + return function() use($wrapper, $value) { + $wrapper->set($value); }; }; - self::assertException(Exception::class, $destvSetter(null)); - self::assertException(Exception::class, $destvSetter("")); - self::assertException(Exception::class, $destvSetter(" ")); + self::assertException(Exception::class, $wrapperSetter(null)); + self::assertException(Exception::class, $wrapperSetter("")); + self::assertException(Exception::class, $wrapperSetter(" ")); // valeur non requise donc retourne null - $destv->set(false); - self::assertNull($destv->get()); + $wrapper->set(false); + self::assertNull($wrapper->get()); - $this->commonTests($destv, $dest, $destvSetter); + $this->commonTests($wrapper, $value, $wrapperSetter); } function testRequiredInt() { - /** @var ScalarWrapper $destv */ - Schema::nw($dest, null, $schema, [ + /** @var ScalarWrapper $wrapper */ + Schema::nw($value, null, $schema, [ "int", null, "required" => true, - ], $destv); - $destvSetter = function($value) use($destv) { - return function() use($destv, $value) { - $destv->set($value); + ], $wrapper); + $wrapperSetter = function($value) use($wrapper) { + return function() use($wrapper, $value) { + $wrapper->set($value); }; }; - self::assertException(Exception::class, $destvSetter(null)); - self::assertException(Exception::class, $destvSetter("")); - self::assertException(Exception::class, $destvSetter(" ")); + self::assertException(Exception::class, $wrapperSetter(null)); + self::assertException(Exception::class, $wrapperSetter("")); + self::assertException(Exception::class, $wrapperSetter(" ")); // valeur requise donc lance une exception - self::assertException(Exception::class, $destvSetter(false)); + self::assertException(Exception::class, $wrapperSetter(false)); - $this->commonTests($destv, $dest, $destvSetter); + $this->commonTests($wrapper, $value, $wrapperSetter); } function testNint() { - /** @var ScalarWrapper $destv */ - Schema::nw($dest, null, $schema, "?int", $destv); - $destvSetter = function($value) use($destv) { - return function() use($destv, $value) { - $destv->set($value); + /** @var ScalarWrapper $wrapper */ + Schema::nw($value, null, $schema, "?int", $wrapper); + $wrapperSetter = function($value) use($wrapper) { + return function() use($wrapper, $value) { + $wrapper->set($value); }; }; - $destv->set(null); - self::assertNull($destv->get()); - self::assertNull($dest); - self::assertSame("", $destv->format()); + $wrapper->set(null); + self::assertNull($wrapper->get()); + self::assertNull($value); + self::assertSame("", $wrapper->format()); - $destv->set(""); - self::assertNull($destv->get()); - self::assertNull($dest); - self::assertSame("", $destv->format()); + $wrapper->set(""); + self::assertNull($wrapper->get()); + self::assertNull($value); + self::assertSame("", $wrapper->format()); - $destv->set(" "); - self::assertNull($destv->get()); - self::assertNull($dest); - self::assertSame("", $destv->format()); + $wrapper->set(" "); + self::assertNull($wrapper->get()); + self::assertNull($value); + self::assertSame("", $wrapper->format()); // valeur non requise donc retourne null - $destv->set(false); - self::assertNull($destv->get()); + $wrapper->set(false); + self::assertNull($wrapper->get()); - $this->commonTests($destv, $dest, $destvSetter); + $this->commonTests($wrapper, $value, $wrapperSetter); } function testRequiredNint() { - /** @var ScalarWrapper $destv */ - Schema::nw($dest, null, $schema, [ + /** @var ScalarWrapper $wrapper */ + Schema::nw($value, null, $schema, [ "?int", null, "required" => true, - ], $destv); - $destvSetter = function($value) use($destv) { - return function() use($destv, $value) { - $destv->set($value); + ], $wrapper); + $wrapperSetter = function($value) use($wrapper) { + return function() use($wrapper, $value) { + $wrapper->set($value); }; }; - $destv->set(null); - self::assertNull($destv->get()); - self::assertNull($dest); - self::assertSame("", $destv->format()); + $wrapper->set(null); + self::assertNull($wrapper->get()); + self::assertNull($value); + self::assertSame("", $wrapper->format()); - $destv->set(""); - self::assertNull($destv->get()); - self::assertNull($dest); - self::assertSame("", $destv->format()); + $wrapper->set(""); + self::assertNull($wrapper->get()); + self::assertNull($value); + self::assertSame("", $wrapper->format()); - $destv->set(" "); - self::assertNull($destv->get()); - self::assertNull($dest); - self::assertSame("", $destv->format()); + $wrapper->set(" "); + self::assertNull($wrapper->get()); + self::assertNull($value); + self::assertSame("", $wrapper->format()); // valeur requise donc lance une exception - self::assertException(Exception::class, $destvSetter(false)); + self::assertException(Exception::class, $wrapperSetter(false)); - $this->commonTests($destv, $dest, $destvSetter); + $this->commonTests($wrapper, $value, $wrapperSetter); } } diff --git a/tests/wip/schema/types/strTest.php b/tests/wip/schema/types/strTest.php index 9310de5..184d99c 100644 --- a/tests/wip/schema/types/strTest.php +++ b/tests/wip/schema/types/strTest.php @@ -7,117 +7,117 @@ use nur\sery\wip\schema\_scalar\ScalarWrapper; use nur\sery\wip\schema\Schema; class strTest extends TestCase { - function commonTests($destv, &$dest, callable $destvSetter): void { - $destv->set(""); - self::assertSame("", $destv->get()); - self::assertSame("", $dest); + function commonTests($wrapper, &$value, callable $wrapperSetter): void { + $wrapper->set(""); + self::assertSame("", $wrapper->get()); + self::assertSame("", $value); - $destv->set(" "); - self::assertSame("", $destv->get()); - self::assertSame("", $dest); + $wrapper->set(" "); + self::assertSame("", $wrapper->get()); + self::assertSame("", $value); - $destv->set("a"); - self::assertSame("a", $destv->get()); - self::assertSame("a", $dest); + $wrapper->set("a"); + self::assertSame("a", $wrapper->get()); + self::assertSame("a", $value); - $destv->set("12"); - self::assertSame("12", $destv->get()); + $wrapper->set("12"); + self::assertSame("12", $wrapper->get()); - $destv->set(" 12 "); - self::assertSame("12", $destv->get()); + $wrapper->set(" 12 "); + self::assertSame("12", $wrapper->get()); - $destv->set(12); - self::assertSame("12", $destv->get()); + $wrapper->set(12); + self::assertSame("12", $wrapper->get()); - $destv->set(12.34); - self::assertSame("12.34", $destv->get()); + $wrapper->set(12.34); + self::assertSame("12.34", $wrapper->get()); - $destv->set(true); - self::assertSame("1", $destv->get()); + $wrapper->set(true); + self::assertSame("1", $wrapper->get()); - self::assertException(Exception::class, $destvSetter([])); - self::assertException(Exception::class, $destvSetter(["a"])); + self::assertException(Exception::class, $wrapperSetter([])); + self::assertException(Exception::class, $wrapperSetter(["a"])); } function testStr() { - /** @var ScalarWrapper $destv */ - Schema::nw($dest, null, $schema, "string", $destv); - $destvSetter = function($value) use($destv) { - return function() use($destv, $value) { - $destv->set($value); + /** @var ScalarWrapper $wrapper */ + Schema::nw($value, null, $schema, "string", $wrapper); + $wrapperSetter = function($value) use($wrapper) { + return function() use($wrapper, $value) { + $wrapper->set($value); }; }; - self::assertException(Exception::class, $destvSetter(null)); + self::assertException(Exception::class, $wrapperSetter(null)); // valeur non requise donc retourne null - $destv->set(false); - self::assertNull($destv->get()); + $wrapper->set(false); + self::assertNull($wrapper->get()); - $this->commonTests($destv, $dest, $destvSetter); + $this->commonTests($wrapper, $value, $wrapperSetter); } function testRequiredStr() { - /** @var ScalarWrapper $destv */ - Schema::nw($dest, null, $schema, [ + /** @var ScalarWrapper $wrapper */ + Schema::nw($value, null, $schema, [ "string", null, "required" => true, - ], $destv); - $destvSetter = function($value) use($destv) { - return function() use($destv, $value) { - $destv->set($value); + ], $wrapper); + $wrapperSetter = function($value) use($wrapper) { + return function() use($wrapper, $value) { + $wrapper->set($value); }; }; - self::assertException(Exception::class, $destvSetter(null)); + self::assertException(Exception::class, $wrapperSetter(null)); // valeur requise donc lance une exception - self::assertException(Exception::class, $destvSetter(false)); + self::assertException(Exception::class, $wrapperSetter(false)); - $this->commonTests($destv, $dest, $destvSetter); + $this->commonTests($wrapper, $value, $wrapperSetter); } function testNstr() { - /** @var ScalarWrapper $destv */ - Schema::nw($dest, null, $schema, "?string", $destv); - $destvSetter = function($value) use($destv) { - return function() use($destv, $value) { - $destv->set($value); + /** @var ScalarWrapper $wrapper */ + Schema::nw($value, null, $schema, "?string", $wrapper); + $wrapperSetter = function($value) use($wrapper) { + return function() use($wrapper, $value) { + $wrapper->set($value); }; }; - $destv->set(null); - self::assertNull($destv->get()); - self::assertNull($dest); - self::assertSame("", $destv->format()); + $wrapper->set(null); + self::assertNull($wrapper->get()); + self::assertNull($value); + self::assertSame("", $wrapper->format()); // valeur non requise donc retourne null - $destv->set(false); - self::assertNull($destv->get()); + $wrapper->set(false); + self::assertNull($wrapper->get()); - $this->commonTests($destv, $dest, $destvSetter); + $this->commonTests($wrapper, $value, $wrapperSetter); } function testRequiredNstr() { - /** @var ScalarWrapper $destv */ - Schema::nw($dest, null, $schema, [ + /** @var ScalarWrapper $wrapper */ + Schema::nw($value, null, $schema, [ "?string", null, "required" => true, - ], $destv); - $destvSetter = function($value) use($destv) { - return function() use($destv, $value) { - $destv->set($value); + ], $wrapper); + $wrapperSetter = function($value) use($wrapper) { + return function() use($wrapper, $value) { + $wrapper->set($value); }; }; - $destv->set(null); - self::assertNull($destv->get()); - self::assertNull($dest); - self::assertSame("", $destv->format()); + $wrapper->set(null); + self::assertNull($wrapper->get()); + self::assertNull($value); + self::assertSame("", $wrapper->format()); // valeur requise donc lance une exception - self::assertException(Exception::class, $destvSetter(false)); + self::assertException(Exception::class, $wrapperSetter(false)); - $this->commonTests($destv, $dest, $destvSetter); + $this->commonTests($wrapper, $value, $wrapperSetter); } } diff --git a/tests/wip/schema/types/unionTest.php b/tests/wip/schema/types/unionTest.php index f5f59cc..312d3d4 100644 --- a/tests/wip/schema/types/unionTest.php +++ b/tests/wip/schema/types/unionTest.php @@ -10,20 +10,21 @@ class unionTest extends TestCase { ## l'ordre des types doit être respecté # string puis int - /** @var ScalarWrapper $siv */ - Schema::nw($si, null, $sis, "string|int", $siv); + /** @var ScalarWrapper $siw */ + Schema::nw($si, null, $sis, "string|int", $siw); - $siv->set("12"); + $siw->set("12"); self::assertSame("12", $si); - $siv->set(12); + $siw->set(12); self::assertSame(12, $si); # int puis string - Schema::nw($is, null, $iss, "int|string", $isv); + /** @var ScalarWrapper $isw */ + Schema::nw($is, null, $iss, "int|string", $isw); - $isv->set("12"); + $isw->set("12"); self::assertSame("12", $is); - $isv->set(12); + $isw->set(12); self::assertSame(12, $is); } }