summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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):