summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChase Sterling <chase.sterling@gmail.com>2013-08-24 12:49:19 -0400
committerChase Sterling <chase.sterling@gmail.com>2013-08-24 12:49:19 -0400
commit7bd85c5aafefaeb7638bfa8159bf07c9194eb9d8 (patch)
treef841eb61e6ee40bf5513f5c44bc4a1325f15f0ee
parent55af59e75beda5951ffcf8fb97ad1444bfbce218 (diff)
downloadjsonschema-7bd85c5aafefaeb7638bfa8159bf07c9194eb9d8.tar.gz
Fix error paths when additionalItems is used with items keyword. fix #122
-rw-r--r--jsonschema/_validators.py5
-rw-r--r--jsonschema/tests/test_validators.py8
2 files changed, 7 insertions, 6 deletions
diff --git a/jsonschema/_validators.py b/jsonschema/_validators.py
index 4a1121a..4735d8d 100644
--- a/jsonschema/_validators.py
+++ b/jsonschema/_validators.py
@@ -59,9 +59,10 @@ def additionalItems(validator, aI, instance, schema):
):
return
+ len_items = len(schema.get("items", []))
if validator.is_type(aI, "object"):
- for index, item in enumerate(instance[len(schema.get("items", [])):]):
- for error in validator.descend(item, aI, path=index):
+ for index, item in enumerate(instance[len_items:]):
+ for error in validator.descend(item, aI, path=index+len_items):
yield error
elif not aI and len(instance) > len(schema.get("items", [])):
error = "Additional items are not allowed (%s %s unexpected)"
diff --git a/jsonschema/tests/test_validators.py b/jsonschema/tests/test_validators.py
index ac93f61..9e31d1f 100644
--- a/jsonschema/tests/test_validators.py
+++ b/jsonschema/tests/test_validators.py
@@ -484,9 +484,9 @@ class TestValidationErrorDetails(unittest.TestCase):
self.assertEqual(e2.validator, "minimum")
def test_additionalItems(self):
- instance = ["foo", 1]
+ instance = ["foo", "bar", 1]
schema = {
- "items": [],
+ "items": [{}],
"additionalItems" : {"type": "integer", "minimum": 5}
}
@@ -494,8 +494,8 @@ class TestValidationErrorDetails(unittest.TestCase):
errors = validator.iter_errors(instance)
e1, e2 = sorted_errors(errors)
- self.assertEqual(list(e1.path), [0])
- self.assertEqual(list(e2.path), [1])
+ self.assertEqual(list(e1.path), [1])
+ self.assertEqual(list(e2.path), [2])
self.assertEqual(e1.validator, "type")
self.assertEqual(e2.validator, "minimum")