Skip to content

Commit 09b3cd7

Browse files
authored
Merge pull request #78 from x0Lazarus/fix/subclass-join
Preserve JsonPointer subclasses when joining
2 parents 16c4c8e + 49a0b58 commit 09b3cd7

2 files changed

Lines changed: 26 additions & 1 deletion

File tree

‎jsonpointer.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -291,7 +291,7 @@ def join(self, suffix):
291291
else:
292292
suffix_parts = suffix
293293
try:
294-
return JsonPointer.from_parts(chain(self.parts, suffix_parts))
294+
return self.__class__.from_parts(chain(self.parts, suffix_parts))
295295
except: # noqa E722
296296
raise JsonPointerException("Invalid suffix")
297297

‎tests.py‎

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,31 @@ def test_join_magic(self):
192192
ptr12e = self.ptr1 / ["a", "b"]
193193
self.assertEqual(ptr12e.path, "/a/b/c/a/b")
194194

195+
def test_join_subclass(self):
196+
class Pointer(JsonPointer):
197+
pass
198+
199+
class OtherPointer(JsonPointer):
200+
pass
201+
202+
ptr = Pointer("/a~1b")
203+
suffixes = [JsonPointer("/m~0n"), Pointer("/m~0n"),
204+
OtherPointer("/m~0n"), "/m~0n", ["m~n"]]
205+
for suffix in suffixes:
206+
with self.subTest(suffix=suffix):
207+
joined = ptr.join(suffix)
208+
self.assertIs(type(joined), Pointer)
209+
self.assertEqual(joined.path, "/a~1b/m~0n")
210+
self.assertEqual(ptr.path, "/a~1b")
211+
212+
def test_join_magic_subclass(self):
213+
class Pointer(JsonPointer):
214+
pass
215+
216+
ptr = Pointer("/a") / JsonPointer("/b") / ["c"]
217+
self.assertIs(type(ptr), Pointer)
218+
self.assertEqual(ptr.path, "/a/b/c")
219+
195220

196221
class WrongInputTests(unittest.TestCase):
197222

0 commit comments

Comments
 (0)