instancier type le plus vite possible
This commit is contained in:
parent
e1b4ef4cc3
commit
fc523bfb6c
@ -1,9 +1,6 @@
|
||||
# nulib\schema
|
||||
|
||||
* tenir compte de la valeur par défaut, qui *doit* être du bon type
|
||||
* type vaut soit une instance de IType, soit une tableau de types
|
||||
* dans la définition, `[type]` est remplacé par l'instance de IType lors de sa
|
||||
résolution? --> NON, sauf si c'est un type union
|
||||
* newInput dans Schema
|
||||
* ScalarSchema::from_property()
|
||||
|
||||
|
@ -175,7 +175,7 @@ class ScalarSchema extends Schema {
|
||||
$params = $name;
|
||||
$name = $key;
|
||||
}
|
||||
$definition["type"] = [types::get($nullable, $name, $params, $definition)];
|
||||
$definition["type"] = types::get($nullable, $name, $params, $definition);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -81,8 +81,8 @@ class ScalarWrapper extends Wrapper {
|
||||
if (!$input->isPresent($destKey)) return $result->setMissing($schema);
|
||||
|
||||
$schemaTypes = $schema->type;
|
||||
if (count($schemaTypes) == 1 && $schemaTypes[0] instanceof IType) {
|
||||
$type = $schemaTypes[0];
|
||||
if ($schemaTypes instanceof IType) {
|
||||
$type = $schemaTypes;
|
||||
} else {
|
||||
# type union
|
||||
$haveType = false;
|
||||
|
@ -3,6 +3,7 @@ namespace nur\sery\wip\schema\_scalar;
|
||||
|
||||
use nulib\tests\TestCase;
|
||||
use nur\sery\wip\schema\SchemaException;
|
||||
use nur\sery\wip\schema\types\IType;
|
||||
|
||||
class ScalarSchemaTest extends TestCase {
|
||||
const NULL_SCHEMA = [
|
||||
@ -31,6 +32,13 @@ class ScalarSchemaTest extends TestCase {
|
||||
return array_merge(self::NULL_SCHEMA, $schema);
|
||||
}
|
||||
|
||||
static function sanitize(array $schema): array {
|
||||
if ($schema["type"] instanceof IType) {
|
||||
$schema["type"] = [$schema["type"]->getClass()];
|
||||
}
|
||||
return $schema;
|
||||
}
|
||||
|
||||
function testNormalize() {
|
||||
self::assertSame(self::NULL_SCHEMA, ScalarSchema::normalize(null));
|
||||
self::assertSame(self::NULL_SCHEMA, ScalarSchema::normalize([]));
|
||||
@ -43,22 +51,22 @@ class ScalarSchemaTest extends TestCase {
|
||||
});
|
||||
|
||||
$string = self::schema(["type" => ["string"], "nullable" => false]);
|
||||
self::assertSame($string, ScalarSchema::normalize("string"));
|
||||
self::assertSame($string, ScalarSchema::normalize(["string"]));
|
||||
self::assertSame($string, self::sanitize(ScalarSchema::normalize("string")));
|
||||
self::assertSame($string, self::sanitize(ScalarSchema::normalize(["string"])));
|
||||
|
||||
$nstring = self::schema(["type" => ["string"]]);
|
||||
self::assertSame($nstring, ScalarSchema::normalize(["?string"]));
|
||||
self::assertSame($nstring, ScalarSchema::normalize(["?string|null"]));
|
||||
self::assertSame($nstring, ScalarSchema::normalize(["string|null"]));
|
||||
self::assertSame($nstring, ScalarSchema::normalize([["?string", "null"]]));
|
||||
self::assertSame($nstring, ScalarSchema::normalize([["string", "null"]]));
|
||||
self::assertSame($nstring, ScalarSchema::normalize([["string", null]]));
|
||||
self::assertSame($nstring, self::sanitize(ScalarSchema::normalize(["?string"])));
|
||||
self::assertSame($nstring, self::sanitize(ScalarSchema::normalize(["?string|null"])));
|
||||
self::assertSame($nstring, self::sanitize(ScalarSchema::normalize(["string|null"])));
|
||||
self::assertSame($nstring, self::sanitize(ScalarSchema::normalize([["?string", "null"]])));
|
||||
self::assertSame($nstring, self::sanitize(ScalarSchema::normalize([["string", "null"]])));
|
||||
self::assertSame($nstring, self::sanitize(ScalarSchema::normalize([["string", null]])));
|
||||
|
||||
$key = self::schema(["type" => ["string", "int"], "nullable" => false]);
|
||||
self::assertSame($key, ScalarSchema::normalize("string|int"));
|
||||
self::assertSame($key, self::sanitize(ScalarSchema::normalize("string|int")));
|
||||
|
||||
$nkey = self::schema(["type" => ["string", "int"], "nullable" => true]);
|
||||
self::assertSame($nkey, ScalarSchema::normalize("?string|int"));
|
||||
self::assertSame($nkey, ScalarSchema::normalize("string|?int"));
|
||||
self::assertSame($nkey, self::sanitize(ScalarSchema::normalize("?string|int")));
|
||||
self::assertSame($nkey, self::sanitize(ScalarSchema::normalize("string|?int")));
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user