Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions bin/jsonpointer
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,9 @@ def resolve_files():

try:
result = jsonpointer.resolve_pointer(doc, ptr)
if isinstance(result, jsonpointer.EndOfList):
raise jsonpointer.JsonPointerException(
"'-' does not reference an existing array element")
print(json.dumps(result, indent=args.indent))
except jsonpointer.JsonPointerException as e:
print('Could not resolve pointer: %s' % str(e), file=sys.stderr)
Expand Down
30 changes: 30 additions & 0 deletions tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -639,6 +639,36 @@ def test_unresolvable_pointer(self):
self.assertIn('Could not resolve pointer', proc.stderr)
self.assertEqual(proc.stdout, '')

def test_end_of_list_pointer(self):
for content, pointer in (('[]', '/-'), ('[1, 2]', '/-'),
('{"a": []}', '/a/-')):
with self.subTest(content=content, pointer=pointer):
self._write('array.json', content)
proc = self._run(pointer, 'array.json')
self.assertEqual(proc.returncode, 1)
self.assertEqual(proc.stdout, '')
self.assertIn('Could not resolve pointer:', proc.stderr)
self.assertNotIn('Traceback', proc.stderr)

def test_end_of_list_pointer_in_one_file(self):
self._write('array.json', '{"a": []}')
self._write('member.json', '{"a": {"-": "value"}}')
for files in (('array.json', 'member.json'),
('member.json', 'array.json')):
with self.subTest(files=files):
proc = self._run('/a/-', *files)
self.assertEqual(proc.returncode, 1)
self.assertEqual(proc.stdout, '"value"\n')
self.assertIn('Could not resolve pointer:', proc.stderr)
self.assertNotIn('Traceback', proc.stderr)

def test_hyphen_object_member(self):
self._write('member.json', '{"-": [1, 2]}')
proc = self._run('/-', 'member.json')
self.assertEqual(proc.returncode, 0, proc.stderr)
self.assertEqual(proc.stdout, '[1, 2]\n')
self.assertEqual(proc.stderr, '')

def test_unresolvable_pointer_in_one_file(self):
# /b resolves in b.json only; a.json is still reported but b.json
# is processed
Expand Down
Loading