summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChase Sterling <chase.sterling@gmail.com>2013-08-25 09:44:21 -0700
committerChase Sterling <chase.sterling@gmail.com>2013-08-25 09:44:21 -0700
commit292a256b918af1e567982bb801c427cf4ca5b9fe (patch)
treeb32b30bc97349f90d638ac7ca9ae2abda1eeb0aa
parent55af59e75beda5951ffcf8fb97ad1444bfbce218 (diff)
parentd60b7b4057b3209a5858a7ed2304f6257392bd12 (diff)
downloadjsonschema-292a256b918af1e567982bb801c427cf4ca5b9fe.tar.gz
Merge pull request #123 from gazpachoking/error_index_fixbaserock/morph
Fix error paths when additionalItems is used with items keyword
-rw-r--r--jsonschema/_validators.py3
-rw-r--r--jsonschema/tests/test_validators.py17
2 files changed, 19 insertions, 1 deletions
diff --git a/jsonschema/_validators.py b/jsonschema/_validators.py
index 4a1121a..bfcd1c1 100644
--- a/jsonschema/_validators.py
+++ b/jsonschema/_validators.py
@@ -59,8 +59,9 @@ 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 index, item in enumerate(instance[len_items:], start=len_items):
for error in validator.descend(item, aI, path=index):
yield error
elif not aI and len(instance) > len(schema.get("items", [])):
diff --git a/jsonschema/tests/test_validators.py b/jsonschema/tests/test_validators.py
index ac93f61..357e388 100644
--- a/jsonschema/tests/test_validators.py
+++ b/jsonschema/tests/test_validators.py
@@ -500,6 +500,23 @@ class TestValidationErrorDetails(unittest.TestCase):
self.assertEqual(e1.validator, "type")
self.assertEqual(e2.validator, "minimum")
+ def test_additionalItems_with_items(self):
+ instance = ["foo", "bar", 1]
+ schema = {
+ "items": [{}],
+ "additionalItems" : {"type": "integer", "minimum": 5}
+ }
+
+ validator = Draft3Validator(schema)
+ errors = validator.iter_errors(instance)
+ e1, e2 = sorted_errors(errors)
+
+ self.assertEqual(list(e1.path), [1])
+ self.assertEqual(list(e2.path), [2])
+
+ self.assertEqual(e1.validator, "type")
+ self.assertEqual(e2.validator, "minimum")
+
class TestErrorTree(unittest.TestCase):
def setUp(self):