diff options
author | Chase Sterling <chase.sterling@gmail.com> | 2013-08-25 09:44:21 -0700 |
---|---|---|
committer | Chase Sterling <chase.sterling@gmail.com> | 2013-08-25 09:44:21 -0700 |
commit | 292a256b918af1e567982bb801c427cf4ca5b9fe (patch) | |
tree | b32b30bc97349f90d638ac7ca9ae2abda1eeb0aa | |
parent | 55af59e75beda5951ffcf8fb97ad1444bfbce218 (diff) | |
parent | d60b7b4057b3209a5858a7ed2304f6257392bd12 (diff) | |
download | jsonschema-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.py | 3 | ||||
-rw-r--r-- | jsonschema/tests/test_validators.py | 17 |
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): |