@@ -181,7 +181,109 @@ def test_specification_with_default():
181
181
assert specification is Specification .OPAQUE
182
182
183
183
184
- # FIXME: These two also ideally should live in the referencing suite.
184
+ # FIXME: The tests below should move to the referencing suite but I haven't yet
185
+ # figured out how to represent dynamic (& recursive) ref lookups in it.
186
+ def test_lookup_trivial_dynamic_ref ():
187
+ one = referencing .jsonschema .DRAFT202012 .create_resource (
188
+ {"$dynamicAnchor" : "foo" },
189
+ )
190
+ resolver = Registry ().with_resource ("http://example.com" , one ).resolver ()
191
+ resolved = resolver .lookup ("http://example.com#foo" )
192
+ assert resolved .contents == one .contents
193
+
194
+
195
+ def test_multiple_lookup_trivial_dynamic_ref ():
196
+ TRUE = referencing .jsonschema .DRAFT202012 .create_resource (True )
197
+ root = referencing .jsonschema .DRAFT202012 .create_resource (
198
+ {
199
+ "$id" : "http://example.com" ,
200
+ "$dynamicAnchor" : "fooAnchor" ,
201
+ "$defs" : {
202
+ "foo" : {
203
+ "$id" : "foo" ,
204
+ "$dynamicAnchor" : "fooAnchor" ,
205
+ "$defs" : {
206
+ "bar" : True ,
207
+ "baz" : {
208
+ "$dynamicAnchor" : "fooAnchor" ,
209
+ },
210
+ },
211
+ },
212
+ },
213
+ },
214
+ )
215
+ resolver = (
216
+ Registry ()
217
+ .with_resources (
218
+ [
219
+ ("http://example.com" , root ),
220
+ ("http://example.com/foo/" , TRUE ),
221
+ ("http://example.com/foo/bar" , root ),
222
+ ],
223
+ )
224
+ .resolver ()
225
+ )
226
+
227
+ first = resolver .lookup ("http://example.com" )
228
+ second = first .resolver .lookup ("foo/" )
229
+ resolver = second .resolver .lookup ("bar" ).resolver
230
+ fourth = resolver .lookup ("#fooAnchor" )
231
+ assert fourth .contents == root .contents
232
+
233
+
234
+ def test_multiple_lookup_dynamic_ref_to_nondynamic_ref ():
235
+ one = referencing .jsonschema .DRAFT202012 .create_resource (
236
+ {"$anchor" : "fooAnchor" },
237
+ )
238
+ two = referencing .jsonschema .DRAFT202012 .create_resource (
239
+ {
240
+ "$id" : "http://example.com" ,
241
+ "$dynamicAnchor" : "fooAnchor" ,
242
+ "$defs" : {
243
+ "foo" : {
244
+ "$id" : "foo" ,
245
+ "$dynamicAnchor" : "fooAnchor" ,
246
+ "$defs" : {
247
+ "bar" : True ,
248
+ "baz" : {
249
+ "$dynamicAnchor" : "fooAnchor" ,
250
+ },
251
+ },
252
+ },
253
+ },
254
+ },
255
+ )
256
+ resolver = (
257
+ Registry ()
258
+ .with_resources (
259
+ [
260
+ ("http://example.com" , two ),
261
+ ("http://example.com/foo/" , one ),
262
+ ("http://example.com/foo/bar" , two ),
263
+ ],
264
+ )
265
+ .resolver ()
266
+ )
267
+
268
+ first = resolver .lookup ("http://example.com" )
269
+ second = first .resolver .lookup ("foo/" )
270
+ resolver = second .resolver .lookup ("bar" ).resolver
271
+ fourth = resolver .lookup ("#fooAnchor" )
272
+ assert fourth .contents == two .contents
273
+
274
+
275
+ def test_lookup_trivial_recursive_ref ():
276
+ one = referencing .jsonschema .DRAFT201909 .create_resource (
277
+ {"$recursiveAnchor" : True },
278
+ )
279
+ resolver = Registry ().with_resource ("http://example.com" , one ).resolver ()
280
+ first = resolver .lookup ("http://example.com" )
281
+ resolved = referencing .jsonschema .lookup_recursive_ref (
282
+ resolver = first .resolver ,
283
+ )
284
+ assert resolved .contents == one .contents
285
+
286
+
185
287
def test_lookup_recursive_ref_to_bool ():
186
288
TRUE = referencing .jsonschema .DRAFT201909 .create_resource (True )
187
289
registry = Registry ({"http://example.com" : TRUE })
@@ -229,3 +331,48 @@ def test_multiple_lookup_recursive_ref_to_bool():
229
331
resolver = second .resolver .lookup ("bar" ).resolver
230
332
fourth = referencing .jsonschema .lookup_recursive_ref (resolver = resolver )
231
333
assert fourth .contents == root .contents
334
+
335
+
336
+ def test_multiple_lookup_recursive_ref_with_nonrecursive_ref ():
337
+ one = referencing .jsonschema .DRAFT201909 .create_resource (
338
+ {"$recursiveAnchor" : True },
339
+ )
340
+ two = referencing .jsonschema .DRAFT201909 .create_resource (
341
+ {
342
+ "$id" : "http://example.com" ,
343
+ "$recursiveAnchor" : True ,
344
+ "$defs" : {
345
+ "foo" : {
346
+ "$id" : "foo" ,
347
+ "$recursiveAnchor" : True ,
348
+ "$defs" : {
349
+ "bar" : True ,
350
+ "baz" : {
351
+ "$recursiveAnchor" : True ,
352
+ "$anchor" : "fooAnchor" ,
353
+ },
354
+ },
355
+ },
356
+ },
357
+ },
358
+ )
359
+ three = referencing .jsonschema .DRAFT201909 .create_resource (
360
+ {"$recursiveAnchor" : False },
361
+ )
362
+ resolver = (
363
+ Registry ()
364
+ .with_resources (
365
+ [
366
+ ("http://example.com" , three ),
367
+ ("http://example.com/foo/" , two ),
368
+ ("http://example.com/foo/bar" , one ),
369
+ ],
370
+ )
371
+ .resolver ()
372
+ )
373
+
374
+ first = resolver .lookup ("http://example.com" )
375
+ second = first .resolver .lookup ("foo/" )
376
+ resolver = second .resolver .lookup ("bar" ).resolver
377
+ fourth = referencing .jsonschema .lookup_recursive_ref (resolver = resolver )
378
+ assert fourth .contents == two .contents
0 commit comments