From 95a5b4672a60ecf298ea86ef501550fb0c032d52 Mon Sep 17 00:00:00 2001 From: Alexander Dutton Date: Wed, 26 Mar 2014 14:30:17 +0000 Subject: JsonPointer.from_parts should handle the empty path [The RFC says](http://tools.ietf.org/html/rfc6901#page-5) that the path `""` points at the original document. However, passing `[]` to `from_parts()` results in a path of `"/"` (the same as when one passes `[""]`. This makes the empty list produce a pointer for the empty path. --- jsonpointer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jsonpointer.py b/jsonpointer.py index 4d65987..e4a5c81 100644 --- a/jsonpointer.py +++ b/jsonpointer.py @@ -283,7 +283,7 @@ class JsonPointer(object): parts = [str(part) for part in parts] parts = [part.replace('~', '~0') for part in parts] parts = [part.replace('/', '~1') for part in parts] - ptr = cls('/' + '/'.join(parts)) + ptr = cls(''.join('/' + part for part in parts)) return ptr -- cgit v1.2.1 From 1ed957b1e4ea6206f94830b30882de83b34ee935 Mon Sep 17 00:00:00 2001 From: Alexander Dutton Date: Wed, 26 Mar 2014 14:48:32 +0000 Subject: Added tests for round-tripping pointers from paths to parts --- tests.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/tests.py b/tests.py index 9dc5f1b..2b5608e 100755 --- a/tests.py +++ b/tests.py @@ -47,6 +47,28 @@ class SpecificationTests(unittest.TestCase): self.assertTrue(isinstance(resolve_pointer(doc, "/foo/-"), EndOfList)) self.assertRaises(JsonPointerException, resolve_pointer, doc, "/foo/-/1") + def test_round_trip(self): + paths = [ + "", + "/foo", + "/foo/0", + "/", + "/a~1b", + "/c%d", + "/e^f", + "/g|h", + "/i\\j", + "/k\"l", + "/ ", + "/m~0n", + ] + for path in paths: + ptr = JsonPointer(path) + self.assertEqual(path, ptr.path) + + parts = ptr.parts + new_ptr = JsonPointer.from_parts(parts) + self.assertEqual(ptr, new_ptr) class ComparisonTests(unittest.TestCase): -- cgit v1.2.1 From 85620b0255b0680ce35c6a1b37385d054cfc99d4 Mon Sep 17 00:00:00 2001 From: Alexander Dutton Date: Wed, 26 Mar 2014 14:48:56 +0000 Subject: Calculate path properly when self.parts == []. --- jsonpointer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jsonpointer.py b/jsonpointer.py index e4a5c81..d28e111 100644 --- a/jsonpointer.py +++ b/jsonpointer.py @@ -255,7 +255,7 @@ class JsonPointer(object): """ parts = [part.replace('~', '~0') for part in self.parts] parts = [part.replace('/', '~1') for part in parts] - return '/' + '/'.join(parts) + return ''.join('/' + part for part in parts) def __eq__(self, other): """ compares a pointer to another object -- cgit v1.2.1