88from jsonpointer import resolve_pointer , EndOfList , JsonPointerException , \
99 JsonPointer , set_pointer
1010
11+
1112class SpecificationTests (unittest .TestCase ):
1213 """ Tests all examples from the JSON Pointer specification """
1314
@@ -70,6 +71,7 @@ def test_round_trip(self):
7071 new_ptr = JsonPointer .from_parts (parts )
7172 self .assertEqual (ptr , new_ptr )
7273
74+
7375class ComparisonTests (unittest .TestCase ):
7476
7577 def test_eq_hash (self ):
@@ -94,10 +96,10 @@ def test_contains(self):
9496 p3 = JsonPointer ("/b/c" )
9597
9698 self .assertTrue (p1 .contains (p2 ))
99+ self .assertTrue (p1 .contains (p1 ))
97100 self .assertFalse (p1 .contains (p3 ))
98101
99102
100-
101103class WrongInputTests (unittest .TestCase ):
102104
103105 def test_no_start_slash (self ):
@@ -181,11 +183,11 @@ def test_set(self):
181183
182184 self .assertRaises (JsonPointerException , set_pointer , doc , "" , 9 )
183185
184- class AltTypesTests (unittest .TestCase ):
185186
186- def test_alttypes (self ):
187- JsonPointer .alttypes = True
187+ class AltTypesTests (unittest .TestCase ):
188188
189+ @classmethod
190+ def setUpClass (cls ):
189191 class Node (object ):
190192 def __init__ (self , name , parent = None ):
191193 self .name = name
@@ -217,6 +219,18 @@ def __setitem__(self, key, val):
217219
218220 raise KeyError ("Only left and right supported: %s" % key )
219221
222+ class mdict (object ):
223+ def __init__ (self , d ):
224+ self ._d = d
225+ def __getitem__ (self , item ):
226+ return self ._d [item ]
227+
228+ cls .mdict = mdict ({'root' : {'1' : {'2' : '3' }}})
229+ cls .Node = Node
230+
231+
232+ def test_alttypes (self ):
233+ Node = self .Node
220234
221235 root = Node ('root' )
222236 root .set_left (Node ('a' ))
@@ -238,6 +252,38 @@ def __setitem__(self, key, val):
238252 set_pointer (root , '/left/right' , Node ('AB' ))
239253 self .assertEqual (resolve_pointer (root , '/left/right' ).name , 'AB' )
240254
255+ def test_mock_dict_sanity (self ):
256+ doc = self .mdict
257+ default = None
258+
259+ # TODO: Generate this automatically for any given object
260+ path_to_expected_value = {
261+ '/root/1' : {'2' : '3' },
262+ '/root' : {'1' : {'2' : '3' }},
263+ '/root/1/2' : '3' ,
264+ }
265+
266+ for path , expected_value in iter (path_to_expected_value .items ()):
267+ self .assertEqual (resolve_pointer (doc , path , default ), expected_value )
268+
269+ def test_mock_dict_returns_default (self ):
270+ doc = self .mdict
271+ default = None
272+
273+ path_to_expected_value = {
274+ '/foo' : default ,
275+ '/x/y/z/d' : default
276+ }
277+
278+ for path , expected_value in iter (path_to_expected_value .items ()):
279+ self .assertEqual (resolve_pointer (doc , path , default ), expected_value )
280+
281+ def test_mock_dict_raises_key_error (self ):
282+ doc = self .mdict
283+ self .assertRaises (KeyError , resolve_pointer , doc , '/foo' )
284+
285+
286+
241287suite = unittest .TestSuite ()
242288suite .addTest (unittest .makeSuite (SpecificationTests ))
243289suite .addTest (unittest .makeSuite (ComparisonTests ))
0 commit comments