Skip to content

Commit b943244

Browse files
committed
Merge pull request #7 from alexsdutton/patch-1
JsonPointer.from_parts should handle the empty path
2 parents ac7c86e + 85620b0 commit b943244

File tree

2 files changed

+24
-2
lines changed

2 files changed

+24
-2
lines changed

jsonpointer.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,7 @@ def path(self):
255255
"""
256256
parts = [part.replace('~', '~0') for part in self.parts]
257257
parts = [part.replace('/', '~1') for part in parts]
258-
return '/' + '/'.join(parts)
258+
return ''.join('/' + part for part in parts)
259259

260260
def __eq__(self, other):
261261
""" compares a pointer to another object
@@ -283,7 +283,7 @@ def from_parts(cls, parts):
283283
parts = [str(part) for part in parts]
284284
parts = [part.replace('~', '~0') for part in parts]
285285
parts = [part.replace('/', '~1') for part in parts]
286-
ptr = cls('/' + '/'.join(parts))
286+
ptr = cls(''.join('/' + part for part in parts))
287287
return ptr
288288

289289

tests.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,28 @@ def test_eol(self):
4747
self.assertTrue(isinstance(resolve_pointer(doc, "/foo/-"), EndOfList))
4848
self.assertRaises(JsonPointerException, resolve_pointer, doc, "/foo/-/1")
4949

50+
def test_round_trip(self):
51+
paths = [
52+
"",
53+
"/foo",
54+
"/foo/0",
55+
"/",
56+
"/a~1b",
57+
"/c%d",
58+
"/e^f",
59+
"/g|h",
60+
"/i\\j",
61+
"/k\"l",
62+
"/ ",
63+
"/m~0n",
64+
]
65+
for path in paths:
66+
ptr = JsonPointer(path)
67+
self.assertEqual(path, ptr.path)
68+
69+
parts = ptr.parts
70+
new_ptr = JsonPointer.from_parts(parts)
71+
self.assertEqual(ptr, new_ptr)
5072

5173
class ComparisonTests(unittest.TestCase):
5274

0 commit comments

Comments
 (0)