Skip to content

Commit 0a06905

Browse files
committed
fixed tests
1 parent 0dded8b commit 0a06905

File tree

4 files changed

+68
-9
lines changed

4 files changed

+68
-9
lines changed

src/MagicMap.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,4 +117,12 @@ public function rewind()
117117
}
118118

119119

120+
public function __isset($name)
121+
{
122+
if (isset($this->__arrayOfData[$name])) {
123+
return true;
124+
} else {
125+
return isset($this->$name);
126+
}
127+
}
120128
}

src/Schema.php

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -428,15 +428,19 @@ public function process($data, Context $options, $path = '#', $result = null)
428428
}
429429

430430
$found = false;
431-
if (isset($this->dependencies->$key)) {
432-
$dependencies = $this->dependencies->$key;
433-
if ($dependencies instanceof Schema) {
434-
$dependencies->process($data, $options, $path . '->dependencies:' . $key);
435-
} else {
436-
foreach ($dependencies as $item) {
437-
if (!property_exists($data, $item)) {
438-
$this->fail(new ObjectException('Dependency property missing: ' . $item,
439-
ObjectException::DEPENDENCY_MISSING), $path);
431+
432+
if (!empty($this->dependencies)) {
433+
$deps = $this->dependencies;
434+
if (isset($deps->$key)) {
435+
$dependencies = $deps->$key;
436+
if ($dependencies instanceof Schema) {
437+
$dependencies->process($data, $options, $path . '->dependencies:' . $key);
438+
} else {
439+
foreach ($dependencies as $item) {
440+
if (!property_exists($data, $item)) {
441+
$this->fail(new ObjectException('Dependency property missing: ' . $item,
442+
ObjectException::DEPENDENCY_MISSING), $path);
443+
}
440444
}
441445
}
442446
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
<?php
2+
3+
namespace PHPUnit\ClassStructure;
4+
5+
6+
use Swaggest\JsonSchema\Structure\ObjectItem;
7+
8+
class ObjectItemTest extends \PHPUnit_Framework_TestCase
9+
{
10+
public function testIndirectIsset()
11+
{
12+
$o = new ObjectItem();
13+
$this->assertSame(false, isset($o->a));
14+
$this->assertSame(false, isset($o->a->b));
15+
16+
$o->a = (object)array();
17+
$this->assertSame(true, isset($o->a));
18+
$this->assertSame(false, isset($o->a->b));
19+
20+
$o->a->b = 1;
21+
$this->assertSame(true, isset($o->a->b));
22+
}
23+
24+
}

tests/src/PHPUnit/Constraint/DependenciesTest.php

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
namespace Swaggest\JsonSchema\Tests\PHPUnit\Constraint;
44

55

6+
use Swaggest\JsonSchema\InvalidValue;
67
use Swaggest\JsonSchema\Schema;
78

89
class DependenciesTest extends \PHPUnit_Framework_TestCase
@@ -32,4 +33,26 @@ public function testSubschemaDeps()
3233
$this->assertSame(2, $imported->bar);
3334
}
3435

36+
public function testMissingDependencies() {
37+
$schemaJson = <<<JSON
38+
{
39+
"dependencies": {
40+
"bar": [
41+
"foo"
42+
]
43+
}
44+
}
45+
JSON;
46+
$dataJson = <<<JSON
47+
{
48+
"bar": 2
49+
}
50+
JSON;
51+
52+
53+
$schema = Schema::import(json_decode($schemaJson));
54+
$this->setExpectedException(get_class(new InvalidValue()));
55+
$schema->in(json_decode($dataJson));
56+
}
57+
3558
}

0 commit comments

Comments
 (0)