Skip to content

Commit 0d9ddd2

Browse files
committed
And tests for the same for if/then/else.
1 parent 21af2e4 commit 0d9ddd2

File tree

2 files changed

+31
-3
lines changed

2 files changed

+31
-3
lines changed

jsonschema/_validators.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -364,13 +364,12 @@ def not_(validator, not_schema, instance, schema):
364364

365365

366366
def if_(validator, if_schema, instance, schema):
367-
# FIXME: paths
368367
if validator.is_valid(instance, if_schema):
369368
if u"then" in schema:
370369
then = schema[u"then"]
371-
for error in validator.descend(instance, then):
370+
for error in validator.descend(instance, then, schema_path="then"):
372371
yield error
373372
elif u"else" in schema:
374373
else_ = schema[u"else"]
375-
for error in validator.descend(instance, else_):
374+
for error in validator.descend(instance, else_, schema_path="else"):
376375
yield error

jsonschema/tests/test_validators.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -894,6 +894,35 @@ def test_propertyNames(self):
894894
"%r is not allowed for %r" % ({"const": "foo"}, "foo"),
895895
)
896896
self.assertEqual(error.path, deque([]))
897+
self.assertEqual(error.schema_path, deque(["propertyNames", "not"]))
898+
899+
def test_if_then(self):
900+
schema = {
901+
"if": {"const": 12},
902+
"then": {"const": 13},
903+
}
904+
905+
validator = validators.Draft7Validator(schema)
906+
error, = validator.iter_errors(12)
907+
908+
self.assertEqual(error.validator, "const")
909+
self.assertEqual(error.message, "13 was expected")
910+
self.assertEqual(error.path, deque([]))
911+
self.assertEqual(error.schema_path, deque(["if", "then", "const"]))
912+
913+
def test_if_else(self):
914+
schema = {
915+
"if": {"const": 12},
916+
"else": {"const": 13},
917+
}
918+
919+
validator = validators.Draft7Validator(schema)
920+
error, = validator.iter_errors(15)
921+
922+
self.assertEqual(error.validator, "const")
923+
self.assertEqual(error.message, "13 was expected")
924+
self.assertEqual(error.path, deque([]))
925+
self.assertEqual(error.schema_path, deque(["if", "else", "const"]))
897926

898927

899928
class MetaSchemaTestsMixin(object):

0 commit comments

Comments
 (0)