diff options
author | Chase Sterling <chase.sterling@gmail.com> | 2013-08-24 12:49:19 -0400 |
---|---|---|
committer | Chase Sterling <chase.sterling@gmail.com> | 2013-08-24 12:49:19 -0400 |
commit | 7bd85c5aafefaeb7638bfa8159bf07c9194eb9d8 (patch) | |
tree | f841eb61e6ee40bf5513f5c44bc4a1325f15f0ee /jsonschema | |
parent | 55af59e75beda5951ffcf8fb97ad1444bfbce218 (diff) | |
download | jsonschema-7bd85c5aafefaeb7638bfa8159bf07c9194eb9d8.tar.gz |
Fix error paths when additionalItems is used with items keyword. fix #122
Diffstat (limited to 'jsonschema')
-rw-r--r-- | jsonschema/_validators.py | 5 | ||||
-rw-r--r-- | jsonschema/tests/test_validators.py | 8 |
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") |