8
8
from jsonpointer import resolve_pointer , EndOfList , JsonPointerException , \
9
9
JsonPointer , set_pointer
10
10
11
+
11
12
class SpecificationTests (unittest .TestCase ):
12
13
""" Tests all examples from the JSON Pointer specification """
13
14
@@ -70,6 +71,7 @@ def test_round_trip(self):
70
71
new_ptr = JsonPointer .from_parts (parts )
71
72
self .assertEqual (ptr , new_ptr )
72
73
74
+
73
75
class ComparisonTests (unittest .TestCase ):
74
76
75
77
def test_eq_hash (self ):
@@ -94,10 +96,10 @@ def test_contains(self):
94
96
p3 = JsonPointer ("/b/c" )
95
97
96
98
self .assertTrue (p1 .contains (p2 ))
99
+ self .assertTrue (p1 .contains (p1 ))
97
100
self .assertFalse (p1 .contains (p3 ))
98
101
99
102
100
-
101
103
class WrongInputTests (unittest .TestCase ):
102
104
103
105
def test_no_start_slash (self ):
@@ -181,11 +183,11 @@ def test_set(self):
181
183
182
184
self .assertRaises (JsonPointerException , set_pointer , doc , "" , 9 )
183
185
184
- class AltTypesTests (unittest .TestCase ):
185
186
186
- def test_alttypes (self ):
187
- JsonPointer .alttypes = True
187
+ class AltTypesTests (unittest .TestCase ):
188
188
189
+ @classmethod
190
+ def setUpClass (cls ):
189
191
class Node (object ):
190
192
def __init__ (self , name , parent = None ):
191
193
self .name = name
@@ -217,6 +219,18 @@ def __setitem__(self, key, val):
217
219
218
220
raise KeyError ("Only left and right supported: %s" % key )
219
221
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
220
234
221
235
root = Node ('root' )
222
236
root .set_left (Node ('a' ))
@@ -238,6 +252,38 @@ def __setitem__(self, key, val):
238
252
set_pointer (root , '/left/right' , Node ('AB' ))
239
253
self .assertEqual (resolve_pointer (root , '/left/right' ).name , 'AB' )
240
254
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
+
241
287
suite = unittest .TestSuite ()
242
288
suite .addTest (unittest .makeSuite (SpecificationTests ))
243
289
suite .addTest (unittest .makeSuite (ComparisonTests ))
0 commit comments