diff --git a/src/schema/TODO.md b/src/schema/TODO.md index 6db1a74..6910802 100644 --- a/src/schema/TODO.md +++ b/src/schema/TODO.md @@ -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() diff --git a/src/schema/_scalar/ScalarSchema.php b/src/schema/_scalar/ScalarSchema.php index 4a0ab60..88650a1 100644 --- a/src/schema/_scalar/ScalarSchema.php +++ b/src/schema/_scalar/ScalarSchema.php @@ -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); } } diff --git a/src/schema/_scalar/ScalarWrapper.php b/src/schema/_scalar/ScalarWrapper.php index 2427e8b..0734b8b 100644 --- a/src/schema/_scalar/ScalarWrapper.php +++ b/src/schema/_scalar/ScalarWrapper.php @@ -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; diff --git a/tests/wip/schema/_scalar/ScalarSchemaTest.php b/tests/wip/schema/_scalar/ScalarSchemaTest.php index 84fdd35..0a2e071 100644 --- a/tests/wip/schema/_scalar/ScalarSchemaTest.php +++ b/tests/wip/schema/_scalar/ScalarSchemaTest.php @@ -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"))); } }