Team Ai
Datasetpublic

codekingpro/portable-devtools

sourceHugging Faceupdated 5mo agoView on Hugging Face
1likes14kdownloads
test_jsonschema.py383 linesDownload Raw Back to tests
1import pytest2 3from referencing import Registry, Resource, Specification4import referencing.jsonschema5 6 7@pytest.mark.parametrize(8    "uri, expected",9    [10        (11            "https://json-schema.org/draft/2020-12/schema",12            referencing.jsonschema.DRAFT202012,13        ),14        (15            "https://json-schema.org/draft/2019-09/schema",16            referencing.jsonschema.DRAFT201909,17        ),18        (19            "http://json-schema.org/draft-07/schema#",20            referencing.jsonschema.DRAFT7,21        ),22        (23            "http://json-schema.org/draft-06/schema#",24            referencing.jsonschema.DRAFT6,25        ),26        (27            "http://json-schema.org/draft-04/schema#",28            referencing.jsonschema.DRAFT4,29        ),30        (31            "http://json-schema.org/draft-03/schema#",32            referencing.jsonschema.DRAFT3,33        ),34    ],35)36def test_schemas_with_explicit_schema_keywords_are_detected(uri, expected):37    """38    The $schema keyword in JSON Schema is a dialect identifier.39    """40    contents = {"$schema": uri}41    resource = Resource.from_contents(contents)42    assert resource == Resource(contents=contents, specification=expected)43 44 45def test_unknown_dialect():46    dialect_id = "http://example.com/unknown-json-schema-dialect-id"47    with pytest.raises(referencing.jsonschema.UnknownDialect) as excinfo:48        Resource.from_contents({"$schema": dialect_id})49    assert excinfo.value.uri == dialect_id50 51 52@pytest.mark.parametrize(53    "id, specification",54    [55        ("$id", referencing.jsonschema.DRAFT202012),56        ("$id", referencing.jsonschema.DRAFT201909),57        ("$id", referencing.jsonschema.DRAFT7),58        ("$id", referencing.jsonschema.DRAFT6),59        ("id", referencing.jsonschema.DRAFT4),60        ("id", referencing.jsonschema.DRAFT3),61    ],62)63def test_id_of_mapping(id, specification):64    uri = "http://example.com/some-schema"65    assert specification.id_of({id: uri}) == uri66 67 68@pytest.mark.parametrize(69    "specification",70    [71        referencing.jsonschema.DRAFT202012,72        referencing.jsonschema.DRAFT201909,73        referencing.jsonschema.DRAFT7,74        referencing.jsonschema.DRAFT6,75    ],76)77@pytest.mark.parametrize("value", [True, False])78def test_id_of_bool(specification, value):79    assert specification.id_of(value) is None80 81 82@pytest.mark.parametrize(83    "specification",84    [85        referencing.jsonschema.DRAFT202012,86        referencing.jsonschema.DRAFT201909,87        referencing.jsonschema.DRAFT7,88        referencing.jsonschema.DRAFT6,89    ],90)91@pytest.mark.parametrize("value", [True, False])92def test_anchors_in_bool(specification, value):93    assert list(specification.anchors_in(value)) == []94 95 96@pytest.mark.parametrize(97    "specification",98    [99        referencing.jsonschema.DRAFT202012,100        referencing.jsonschema.DRAFT201909,101        referencing.jsonschema.DRAFT7,102        referencing.jsonschema.DRAFT6,103    ],104)105@pytest.mark.parametrize("value", [True, False])106def test_subresources_of_bool(specification, value):107    assert list(specification.subresources_of(value)) == []108 109 110@pytest.mark.parametrize(111    "uri, expected",112    [113        (114            "https://json-schema.org/draft/2020-12/schema",115            referencing.jsonschema.DRAFT202012,116        ),117        (118            "https://json-schema.org/draft/2019-09/schema",119            referencing.jsonschema.DRAFT201909,120        ),121        (122            "http://json-schema.org/draft-07/schema#",123            referencing.jsonschema.DRAFT7,124        ),125        (126            "http://json-schema.org/draft-06/schema#",127            referencing.jsonschema.DRAFT6,128        ),129        (130            "http://json-schema.org/draft-04/schema#",131            referencing.jsonschema.DRAFT4,132        ),133        (134            "http://json-schema.org/draft-03/schema#",135            referencing.jsonschema.DRAFT3,136        ),137    ],138)139def test_specification_with(uri, expected):140    assert referencing.jsonschema.specification_with(uri) == expected141 142 143@pytest.mark.parametrize(144    "uri, expected",145    [146        (147            "http://json-schema.org/draft-07/schema",148            referencing.jsonschema.DRAFT7,149        ),150        (151            "http://json-schema.org/draft-06/schema",152            referencing.jsonschema.DRAFT6,153        ),154        (155            "http://json-schema.org/draft-04/schema",156            referencing.jsonschema.DRAFT4,157        ),158        (159            "http://json-schema.org/draft-03/schema",160            referencing.jsonschema.DRAFT3,161        ),162    ],163)164def test_specification_with_no_empty_fragment(uri, expected):165    assert referencing.jsonschema.specification_with(uri) == expected166 167 168def test_specification_with_unknown_dialect():169    dialect_id = "http://example.com/unknown-json-schema-dialect-id"170    with pytest.raises(referencing.jsonschema.UnknownDialect) as excinfo:171        referencing.jsonschema.specification_with(dialect_id)172    assert excinfo.value.uri == dialect_id173 174 175def test_specification_with_default():176    dialect_id = "http://example.com/unknown-json-schema-dialect-id"177    specification = referencing.jsonschema.specification_with(178        dialect_id,179        default=Specification.OPAQUE,180    )181    assert specification is Specification.OPAQUE182 183 184# FIXME: The tests below should move to the referencing suite but I haven't yet185#        figured out how to represent dynamic (& recursive) ref lookups in it.186def 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.contents193 194 195def 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").resolver230    fourth = resolver.lookup("#fooAnchor")231    assert fourth.contents == root.contents232 233 234def 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").resolver271    fourth = resolver.lookup("#fooAnchor")272    assert fourth.contents == two.contents273 274 275def 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.contents285 286 287def test_lookup_recursive_ref_to_bool():288    TRUE = referencing.jsonschema.DRAFT201909.create_resource(True)289    registry = Registry({"http://example.com": TRUE})290    resolved = referencing.jsonschema.lookup_recursive_ref(291        resolver=registry.resolver(base_uri="http://example.com"),292    )293    assert resolved.contents == TRUE.contents294 295 296def test_multiple_lookup_recursive_ref_to_bool():297    TRUE = referencing.jsonschema.DRAFT201909.create_resource(True)298    root = referencing.jsonschema.DRAFT201909.create_resource(299        {300            "$id": "http://example.com",301            "$recursiveAnchor": True,302            "$defs": {303                "foo": {304                    "$id": "foo",305                    "$recursiveAnchor": True,306                    "$defs": {307                        "bar": True,308                        "baz": {309                            "$recursiveAnchor": True,310                            "$anchor": "fooAnchor",311                        },312                    },313                },314            },315        },316    )317    resolver = (318        Registry()319        .with_resources(320            [321                ("http://example.com", root),322                ("http://example.com/foo/", TRUE),323                ("http://example.com/foo/bar", root),324            ],325        )326        .resolver()327    )328 329    first = resolver.lookup("http://example.com")330    second = first.resolver.lookup("foo/")331    resolver = second.resolver.lookup("bar").resolver332    fourth = referencing.jsonschema.lookup_recursive_ref(resolver=resolver)333    assert fourth.contents == root.contents334 335 336def 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").resolver377    fourth = referencing.jsonschema.lookup_recursive_ref(resolver=resolver)378    assert fourth.contents == two.contents379 380 381def test_empty_registry():382    assert referencing.jsonschema.EMPTY_REGISTRY == Registry()383 
codekingpro/portable-devtools · Team Ai