73 lines
2.6 KiB
PHP
73 lines
2.6 KiB
PHP
<?php
|
|
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 = [
|
|
"type" => [null],
|
|
"default" => null,
|
|
"title" => null,
|
|
"required" => false,
|
|
"nullable" => true,
|
|
"desc" => null,
|
|
"analyzer_func" => null,
|
|
"extractor_func" => null,
|
|
"parser_func" => null,
|
|
"normalizer_func" => null,
|
|
"messages" => null,
|
|
"formatter_func" => null,
|
|
"format" => null,
|
|
"" => ["scalar"],
|
|
"schema" => null,
|
|
"name" => null,
|
|
"pkey" => null,
|
|
"header" => null,
|
|
"composite" => null,
|
|
];
|
|
|
|
static function schema(array $schema): array {
|
|
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([]));
|
|
self::assertSame(self::NULL_SCHEMA, ScalarSchema::normalize([null]));
|
|
self::assertException(SchemaException::class, function () {
|
|
ScalarSchema::normalize([[]]);
|
|
});
|
|
self::assertException(SchemaException::class, function () {
|
|
ScalarSchema::normalize([[null]]);
|
|
});
|
|
|
|
$string = self::schema(["type" => ["string"], "nullable" => false]);
|
|
self::assertSame($string, self::sanitize(ScalarSchema::normalize("string")));
|
|
self::assertSame($string, self::sanitize(ScalarSchema::normalize(["string"])));
|
|
|
|
$nstring = self::schema(["type" => ["string"]]);
|
|
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, self::sanitize(ScalarSchema::normalize("string|int")));
|
|
|
|
$nkey = self::schema(["type" => ["string", "int"], "nullable" => true]);
|
|
self::assertSame($nkey, self::sanitize(ScalarSchema::normalize("?string|int")));
|
|
self::assertSame($nkey, self::sanitize(ScalarSchema::normalize("string|?int")));
|
|
}
|
|
}
|