10
10
from jsonpointer import resolve_pointer , EndOfList , JsonPointerException , \
11
11
JsonPointer , set_pointer
12
12
13
+
13
14
class SpecificationTests (unittest .TestCase ):
14
15
""" Tests all examples from the JSON Pointer specification """
15
16
@@ -73,6 +74,7 @@ def test_round_trip(self):
73
74
new_ptr = JsonPointer .from_parts (parts )
74
75
self .assertEqual (ptr , new_ptr )
75
76
77
+
76
78
class ComparisonTests (unittest .TestCase ):
77
79
78
80
def setUp (self ):
@@ -108,7 +110,6 @@ def test_contains_magic(self):
108
110
self .assertTrue (self .ptr1 in self .ptr1 )
109
111
self .assertFalse (self .ptr3 in self .ptr1 )
110
112
111
-
112
113
class WrongInputTests (unittest .TestCase ):
113
114
114
115
def test_no_start_slash (self ):
@@ -192,42 +193,52 @@ def test_set(self):
192
193
193
194
self .assertRaises (JsonPointerException , set_pointer , doc , "" , 9 )
194
195
196
+
195
197
class AltTypesTests (unittest .TestCase ):
196
198
197
- def test_alttypes (self ):
198
- JsonPointer .alttypes = True
199
+ class Node (object ):
200
+ def __init__ (self , name , parent = None ):
201
+ self .name = name
202
+ self .parent = parent
203
+ self .left = None
204
+ self .right = None
199
205
200
- class Node (object ):
201
- def __init__ (self , name , parent = None ):
202
- self .name = name
203
- self .parent = parent
204
- self .left = None
205
- self .right = None
206
+ def set_left (self , node ):
207
+ node .parent = self
208
+ self .left = node
206
209
207
- def set_left (self , node ):
208
- node .parent = self
209
- self .left = node
210
+ def set_right (self , node ):
211
+ node .parent = self
212
+ self .right = node
210
213
211
- def set_right (self , node ):
212
- node .parent = self
213
- self .right = node
214
+ def __getitem__ (self , key ):
215
+ if key == 'left' :
216
+ return self .left
217
+ if key == 'right' :
218
+ return self .right
214
219
215
- def __getitem__ (self , key ):
216
- if key == 'left' :
217
- return self .left
218
- if key == 'right' :
219
- return self .right
220
+ raise KeyError ("Only left and right supported" )
220
221
221
- raise KeyError ("Only left and right supported" )
222
+ def __setitem__ (self , key , val ):
223
+ if key == 'left' :
224
+ return self .set_left (val )
225
+ if key == 'right' :
226
+ return self .set_right (val )
222
227
223
- def __setitem__ (self , key , val ):
224
- if key == 'left' :
225
- return self .set_left (val )
226
- if key == 'right' :
227
- return self .set_right (val )
228
+ raise KeyError ("Only left and right supported: %s" % key )
228
229
229
- raise KeyError ("Only left and right supported: %s" % key )
230
+ class mdict (object ):
231
+ def __init__ (self , d ):
232
+ self ._d = d
233
+ def __getitem__ (self , item ):
234
+ return self ._d [item ]
230
235
236
+ mdict = mdict ({'root' : {'1' : {'2' : '3' }}})
237
+ Node = Node
238
+
239
+
240
+ def test_alttypes (self ):
241
+ Node = self .Node
231
242
232
243
root = Node ('root' )
233
244
root .set_left (Node ('a' ))
@@ -249,6 +260,39 @@ def __setitem__(self, key, val):
249
260
set_pointer (root , '/left/right' , Node ('AB' ))
250
261
self .assertEqual (resolve_pointer (root , '/left/right' ).name , 'AB' )
251
262
263
+ def test_mock_dict_sanity (self ):
264
+ doc = self .mdict
265
+ default = None
266
+
267
+ # TODO: Generate this automatically for any given object
268
+ path_to_expected_value = {
269
+ '/root/1' : {'2' : '3' },
270
+ '/root' : {'1' : {'2' : '3' }},
271
+ '/root/1/2' : '3' ,
272
+ }
273
+
274
+ for path , expected_value in iter (path_to_expected_value .items ()):
275
+ self .assertEqual (resolve_pointer (doc , path , default ), expected_value )
276
+
277
+ def test_mock_dict_returns_default (self ):
278
+ doc = self .mdict
279
+ default = None
280
+
281
+ path_to_expected_value = {
282
+ '/foo' : default ,
283
+ '/x/y/z/d' : default
284
+ }
285
+
286
+ for path , expected_value in iter (path_to_expected_value .items ()):
287
+ self .assertEqual (resolve_pointer (doc , path , default ), expected_value )
288
+
289
+ def test_mock_dict_raises_key_error (self ):
290
+ doc = self .mdict
291
+ self .assertRaises (JsonPointerException , resolve_pointer , doc , '/foo' )
292
+ self .assertRaises (JsonPointerException , resolve_pointer , doc , '/root/1/2/3/4' )
293
+
294
+
295
+
252
296
suite = unittest .TestSuite ()
253
297
suite .addTest (unittest .makeSuite (SpecificationTests ))
254
298
suite .addTest (unittest .makeSuite (ComparisonTests ))
0 commit comments