1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
|
<?php
/*
* This file is part of the JsonSchema package.
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace JsonSchema\Tests;
use JsonSchema\Validator;
use PHPUnit\Framework\Attributes\DataProvider;
use PHPUnit\Framework\TestCase;
class RefTest extends TestCase
{
public function dataRefIgnoresSiblings(): array
{
return [
// #0 check that $ref is resolved and the instance is validated against
// the referenced schema
[
'{
"definitions":{"test": {"type": "integer"}},
"properties": {
"propertyOne": {"$ref": "#/definitions/test"}
}
}',
'{"propertyOne": "not an integer"}',
false
],
// #1 check that sibling properties of $ref are ignored during validation
[
'{
"definitions":{
"test": {"type": "integer"}
},
"properties": {
"propertyOne": {
"$ref": "#/definitions/test",
"maximum": 5
}
}
}',
'{"propertyOne": 10}',
true
],
// #2 infinite-loop / unresolveable circular reference
[
'{
"definitions": {
"test1": {"$ref": "#/definitions/test2"},
"test2": {"$ref": "#/definitions/test1"}
},
"properties": {"propertyOne": {"$ref": "#/definitions/test1"}}
}',
'{"propertyOne": 5}',
true,
'\JsonSchema\Exception\UnresolvableJsonPointerException'
]
];
}
#[DataProvider('dataRefIgnoresSiblings')]
public function testRefIgnoresSiblings($schema, $document, $isValid, $exception = null): void
{
$document = json_decode($document);
$schema = json_decode($schema);
$v = new Validator();
if ($exception) {
$this->expectException($exception);
}
$v->validate($document, $schema);
$this->assertEquals($isValid, $v->isValid());
}
}
|