Skip to content

Commit ebaa7d0

Browse files
committed
test: Pass draft identifier to testcase
1 parent 6f61429 commit ebaa7d0

File tree

2 files changed

+37
-17
lines changed

2 files changed

+37
-17
lines changed

src/JsonSchema/DraftIdentifiers.php

Lines changed: 30 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -21,24 +21,39 @@ class DraftIdentifiers extends Enum
2121
public const DRAFT_2019_09 = 'https://json-schema.org/draft/2019-09/schema';
2222
public const DRAFT_2020_12 = 'https://json-schema.org/draft/2020-12/schema';
2323

24+
/** @var array<DraftIdentifiers::DRAFT_*, string> */
25+
private const MAPPING = [
26+
self::DRAFT_3 => 'draft03',
27+
self::DRAFT_4 => 'draft04',
28+
self::DRAFT_6 => 'draft06',
29+
self::DRAFT_7 => 'draft07',
30+
self::DRAFT_2019_09 => 'draft2019-09',
31+
self::DRAFT_2020_12 => 'draft2020-12',
32+
];
33+
34+
private const FALLBACK_MAPPING = [
35+
'draft3' => self::DRAFT_3,
36+
'draft4' => self::DRAFT_4,
37+
'draft6' => self::DRAFT_6,
38+
'draft7' => self::DRAFT_7,
39+
];
40+
2441
public function toConstraintName(): string
2542
{
26-
switch ($this->getValue()) {
27-
case self::DRAFT_3:
28-
return 'draft03';
29-
case self::DRAFT_4:
30-
return 'draft04';
31-
case self::DRAFT_6:
32-
return 'draft06';
33-
case self::DRAFT_7:
34-
return 'draft07';
35-
case self::DRAFT_2019_09:
36-
return 'draft2019-09';
37-
case self::DRAFT_2020_12:
38-
return 'draft2020-12';
39-
default:
40-
throw new \Exception('Unsupported schema URI: ' . $this->getValue());
43+
return self::MAPPING[$this->getValue()];
44+
}
45+
46+
public static function fromConstraintName(string $name): DraftIdentifiers
47+
{
48+
$reverseMap = array_flip(self::MAPPING);
49+
if (!array_key_exists($name, $reverseMap)) {
50+
if (array_key_exists($name, self::FALLBACK_MAPPING)) {
51+
return DraftIdentifiers::byValue(self::FALLBACK_MAPPING[$name]);
52+
}
53+
throw new \InvalidArgumentException("$name is not a valid constraint name.");
4154
}
55+
56+
return DraftIdentifiers::byValue($reverseMap[$name]);
4257
}
4358

4459
public function withoutFragment(): string

tests/JsonSchemaTestSuiteTest.php

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
use CallbackFilterIterator;
88
use JsonSchema\Constraints\Constraint;
99
use JsonSchema\Constraints\Factory;
10+
use JsonSchema\DraftIdentifiers;
1011
use JsonSchema\SchemaStorage;
1112
use JsonSchema\SchemaStorageInterface;
1213
use JsonSchema\Validator;
@@ -28,14 +29,17 @@ public function testTestCaseValidatesCorrectly(
2829
$schema,
2930
$data,
3031
int $checkMode,
32+
DraftIdentifiers $draft,
3133
bool $expectedValidationResult,
3234
bool $optional
3335
): void {
3436
$schemaStorage = new SchemaStorage();
3537
$id = is_object($schema) && property_exists($schema, 'id') ? $schema->id : SchemaStorage::INTERNAL_PROVIDED_SCHEMA_URI;
3638
$schemaStorage->addSchema($id, $schema);
3739
$this->loadRemotesIntoStorage($schemaStorage);
38-
$validator = new Validator(new Factory($schemaStorage));
40+
$factory = new Factory($schemaStorage);
41+
$factory->setDefaultDialect($draft->getValue());
42+
$validator = new Validator($factory);
3943

4044
try {
4145
$validator->validate($data, $schema, $checkMode);
@@ -64,7 +68,7 @@ public function casesDataProvider(): \Generator
6468
$drafts = array_filter(glob($testDir . '/*'), static function (string $filename) {
6569
return is_dir($filename);
6670
});
67-
$skippedDrafts = ['draft2019-09', 'draft2020-12', 'draft-next', 'latest'];
71+
$skippedDrafts = ['draft3', 'draft4', 'draft6', 'draft2019-09', 'draft2020-12', 'draft-next', 'latest'];
6872

6973
foreach ($drafts as $draft) {
7074
$baseDraftName = basename($draft);
@@ -105,6 +109,7 @@ function ($file) {
105109
'schema' => $testCase->schema,
106110
'data' => $test->data,
107111
'checkMode' => $this->getCheckModeForDraft($baseDraftName),
112+
'draft' => DraftIdentifiers::fromConstraintName($baseDraftName),
108113
'expectedValidationResult' => $test->valid,
109114
'optional' => str_contains($file->getPathname(), '/optional/')
110115
];

0 commit comments

Comments
 (0)