diff planemo/lib/python3.7/site-packages/schema_salad/tests/test_examples.py @ 1:56ad4e20f292 draft

"planemo upload commit 6eee67778febed82ddd413c3ca40b3183a3898f1"
author guerler
date Fri, 31 Jul 2020 00:32:28 -0400
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/planemo/lib/python3.7/site-packages/schema_salad/tests/test_examples.py	Fri Jul 31 00:32:28 2020 -0400
@@ -0,0 +1,434 @@
+from __future__ import absolute_import, print_function
+
+import os
+
+import six
+
+import ruamel.yaml
+from ruamel.yaml.comments import CommentedMap, CommentedSeq
+import schema_salad.main
+import schema_salad.ref_resolver
+import schema_salad.schema
+from schema_salad.jsonld_context import makerdf
+from schema_salad.sourceline import SourceLine, cmap
+
+from .util import get_data
+
+
+def test_schemas():
+    loader = schema_salad.ref_resolver.Loader({})
+
+    ra, _ = loader.resolve_all(
+        cmap(
+            {
+                u"$schemas": [
+                    schema_salad.ref_resolver.file_uri(get_data("tests/EDAM.owl"))
+                ],
+                u"$namespaces": {u"edam": u"http://edamontology.org/"},
+                u"edam:has_format": u"edam:format_1915",
+            }
+        ),
+        "",
+    )
+
+    assert {
+        u"$schemas": [schema_salad.ref_resolver.file_uri(get_data("tests/EDAM.owl"))],
+        u"$namespaces": {u"edam": u"http://edamontology.org/"},
+        u"http://edamontology.org/has_format": u"http://edamontology.org/format_1915",
+    } == ra
+
+
+def test_self_validate():
+    assert 0 == schema_salad.main.main(argsl=[get_data("metaschema/metaschema.yml")])
+    assert 0 == schema_salad.main.main(
+        argsl=[
+            get_data("metaschema/metaschema.yml"),
+            get_data("metaschema/metaschema.yml"),
+        ]
+    )
+
+
+def test_avro_regression():
+    assert 0 == schema_salad.main.main(argsl=[get_data("tests/Process.yml")])
+
+
+def test_jsonld_ctx():
+    ldr, _, _, _ = schema_salad.schema.load_schema(
+        cmap(
+            {
+                "$base": "Y",
+                "name": "X",
+                "$namespaces": {"foo": "http://example.com/foo#"},
+                "$graph": [
+                    {"name": "ExampleType", "type": "enum", "symbols": ["asym", "bsym"]}
+                ],
+            }
+        )
+    )
+
+    ra, _ = ldr.resolve_all(cmap({"foo:bar": "asym"}), "X")
+
+    assert ra == {"http://example.com/foo#bar": "asym"}
+
+
+def test_idmap():
+    ldr = schema_salad.ref_resolver.Loader({})
+    ldr.add_context(
+        {
+            "inputs": {
+                "@id": "http://example.com/inputs",
+                "mapSubject": "id",
+                "mapPredicate": "a",
+            },
+            "outputs": {"@type": "@id", "identity": True},
+            "id": "@id",
+        }
+    )
+
+    ra, _ = ldr.resolve_all(
+        cmap(
+            {
+                "id": "stuff",
+                "inputs": {"zip": 1, "zing": 2},
+                "outputs": ["out"],
+                "other": {"n": 9},
+            }
+        ),
+        "http://example2.com/",
+    )
+
+    assert "http://example2.com/#stuff" == ra["id"]
+    for item in ra["inputs"]:
+        if item["a"] == 2:
+            assert "http://example2.com/#stuff/zing" == item["id"]
+        else:
+            assert "http://example2.com/#stuff/zip" == item["id"]
+    assert ["http://example2.com/#stuff/out"] == ra["outputs"]
+    assert {"n": 9} == ra["other"]
+
+
+def test_scoped_ref():
+    ldr = schema_salad.ref_resolver.Loader({})
+    ldr.add_context(
+        {
+            "scatter": {"@type": "@id", "refScope": 0},
+            "source": {"@type": "@id", "refScope": 2},
+            "in": {"mapSubject": "id", "mapPredicate": "source"},
+            "out": {"@type": "@id", "identity": True},
+            "inputs": {"mapSubject": "id", "mapPredicate": "type"},
+            "outputs": {"mapSubject": "id"},
+            "steps": {"mapSubject": "id"},
+            "id": "@id",
+        }
+    )
+
+    ra, _ = ldr.resolve_all(
+        cmap(
+            {
+                "inputs": {"inp": "string", "inp2": "string"},
+                "outputs": {"out": {"type": "string", "source": "step2/out"}},
+                "steps": {
+                    "step1": {
+                        "in": {"inp": "inp", "inp2": "#inp2", "inp3": ["inp", "inp2"]},
+                        "out": ["out"],
+                        "scatter": "inp",
+                    },
+                    "step2": {
+                        "in": {"inp": "step1/out"},
+                        "scatter": "inp",
+                        "out": ["out"],
+                    },
+                },
+            }
+        ),
+        "http://example2.com/",
+    )
+
+    assert {
+        "inputs": [
+            {"id": "http://example2.com/#inp", "type": "string"},
+            {"id": "http://example2.com/#inp2", "type": "string"},
+        ],
+        "outputs": [
+            {
+                "id": "http://example2.com/#out",
+                "type": "string",
+                "source": "http://example2.com/#step2/out",
+            }
+        ],
+        "steps": [
+            {
+                "id": "http://example2.com/#step1",
+                "scatter": "http://example2.com/#step1/inp",
+                "in": [
+                    {
+                        "id": "http://example2.com/#step1/inp",
+                        "source": "http://example2.com/#inp",
+                    },
+                    {
+                        "id": "http://example2.com/#step1/inp2",
+                        "source": "http://example2.com/#inp2",
+                    },
+                    {
+                        "id": "http://example2.com/#step1/inp3",
+                        "source": [
+                            "http://example2.com/#inp",
+                            "http://example2.com/#inp2",
+                        ],
+                    },
+                ],
+                "out": ["http://example2.com/#step1/out"],
+            },
+            {
+                "id": "http://example2.com/#step2",
+                "scatter": "http://example2.com/#step2/inp",
+                "in": [
+                    {
+                        "id": "http://example2.com/#step2/inp",
+                        "source": "http://example2.com/#step1/out",
+                    }
+                ],
+                "out": ["http://example2.com/#step2/out"],
+            },
+        ],
+    } == ra
+
+
+def test_examples():
+    for a in ["field_name", "ident_res", "link_res", "vocab_res"]:
+        ldr, _, _, _ = schema_salad.schema.load_schema(
+            get_data("metaschema/%s_schema.yml" % a)
+        )
+        with open(get_data("metaschema/%s_src.yml" % a)) as src_fp:
+            src = ldr.resolve_all(
+                ruamel.yaml.round_trip_load(src_fp), "", checklinks=False
+            )[0]
+        with open(get_data("metaschema/%s_proc.yml" % a)) as src_proc:
+            proc = ruamel.yaml.safe_load(src_proc)
+        assert proc == src
+
+
+def test_yaml_float_test():
+    assert ruamel.yaml.safe_load("float-test: 2e-10")["float-test"] == 2e-10
+
+
+def test_typedsl_ref():
+    ldr = schema_salad.ref_resolver.Loader({})
+    ldr.add_context(
+        {
+            "File": "http://example.com/File",
+            "null": "http://example.com/null",
+            "array": "http://example.com/array",
+            "type": {"@type": "@vocab", "typeDSL": True},
+        }
+    )
+
+    ra, _ = ldr.resolve_all(cmap({"type": "File"}), "")
+    assert {"type": "File"} == ra
+
+    ra, _ = ldr.resolve_all(cmap({"type": "File?"}), "")
+    assert {"type": ["null", "File"]} == ra
+
+    ra, _ = ldr.resolve_all(cmap({"type": "File[]"}), "")
+    assert {"type": {"items": "File", "type": "array"}} == ra
+
+    ra, _ = ldr.resolve_all(cmap({"type": "File[]?"}), "")
+    assert {"type": ["null", {"items": "File", "type": "array"}]} == ra
+
+
+def test_secondaryFile_dsl_ref():
+    ldr = schema_salad.ref_resolver.Loader({})
+    ldr.add_context({"secondaryFiles": {"secondaryFilesDSL": True}})
+
+    ra, _ = ldr.resolve_all(cmap({"secondaryFiles": ".foo"}), "")
+    assert {"secondaryFiles": {"pattern": ".foo", "required": None}} == ra
+
+    ra, _ = ldr.resolve_all(cmap({"secondaryFiles": ".foo?"}), "")
+    assert {"secondaryFiles": {"pattern": ".foo", "required": False}} == ra
+
+    ra, _ = ldr.resolve_all(cmap({"secondaryFiles": [".foo"]}), "")
+    assert {"secondaryFiles": [{"pattern": ".foo", "required": None}]} == ra
+
+    ra, _ = ldr.resolve_all(cmap({"secondaryFiles": [".foo?"]}), "")
+    assert {"secondaryFiles": [{"pattern": ".foo", "required": False}]} == ra
+
+
+def test_scoped_id():
+    ldr = schema_salad.ref_resolver.Loader({})
+    ctx = {
+        "id": "@id",
+        "location": {"@id": "@id", "@type": "@id"},
+        "bar": "http://example.com/bar",
+        "ex": "http://example.com/",
+    }
+    ldr.add_context(ctx)
+
+    ra, _ = ldr.resolve_all(
+        cmap({"id": "foo", "bar": {"id": "baz"}}), "http://example.com"
+    )
+    assert {
+        "id": "http://example.com/#foo",
+        "bar": {"id": "http://example.com/#foo/baz"},
+    } == ra
+
+    g = makerdf(None, ra, ctx)
+    print(g.serialize(format="n3"))
+
+    ra, _ = ldr.resolve_all(
+        cmap({"location": "foo", "bar": {"location": "baz"}}),
+        "http://example.com",
+        checklinks=False,
+    )
+    assert {
+        "location": "http://example.com/foo",
+        "bar": {"location": "http://example.com/baz"},
+    } == ra
+
+    g = makerdf(None, ra, ctx)
+    print(g.serialize(format="n3"))
+
+    ra, _ = ldr.resolve_all(
+        cmap({"id": "foo", "bar": {"location": "baz"}}),
+        "http://example.com",
+        checklinks=False,
+    )
+    assert {
+        "id": "http://example.com/#foo",
+        "bar": {"location": "http://example.com/baz"},
+    } == ra
+
+    g = makerdf(None, ra, ctx)
+    print(g.serialize(format="n3"))
+
+    ra, _ = ldr.resolve_all(
+        cmap({"location": "foo", "bar": {"id": "baz"}}),
+        "http://example.com",
+        checklinks=False,
+    )
+    assert {
+        "location": "http://example.com/foo",
+        "bar": {"id": "http://example.com/#baz"},
+    } == ra
+
+    g = makerdf(None, ra, ctx)
+    print(g.serialize(format="n3"))
+
+
+def test_subscoped_id():
+    ldr = schema_salad.ref_resolver.Loader({})
+    ctx = {"id": "@id", "bar": {"subscope": "bar"}}
+    ldr.add_context(ctx)
+
+    ra, _ = ldr.resolve_all(
+        cmap({"id": "foo", "bar": {"id": "baz"}}), "http://example.com"
+    )
+    assert {
+        "id": "http://example.com/#foo",
+        "bar": {"id": "http://example.com/#foo/bar/baz"},
+    } == ra
+
+
+def test_mixin():
+    base_url = schema_salad.ref_resolver.file_uri(os.path.join(os.getcwd(), "tests"))
+    ldr = schema_salad.ref_resolver.Loader({})
+    ra = ldr.resolve_ref(
+        cmap({"$mixin": get_data("tests/mixin.yml"), "one": "five"}), base_url=base_url
+    )
+    assert {"id": "four", "one": "five"} == ra[0]
+    ldr = schema_salad.ref_resolver.Loader({"id": "@id"})
+
+    ra = ldr.resolve_all(
+        cmap(
+            [
+                {"id": "a", "m": {"$mixin": get_data("tests/mixin.yml")}},
+                {"id": "b", "m": {"$mixin": get_data("tests/mixin.yml")}},
+            ]
+        ),
+        base_url=base_url,
+    )
+    assert [
+        {"id": base_url + "#a", "m": {"id": base_url + u"#a/four", "one": "two"}},
+        {"id": base_url + "#b", "m": {"id": base_url + u"#b/four", "one": "two"}},
+    ] == ra[0]
+
+
+def test_fragment():
+    ldr = schema_salad.ref_resolver.Loader({"id": "@id"})
+    b, _ = ldr.resolve_ref(get_data("tests/frag.yml#foo2"))
+    assert {"id": b["id"], "bar": "b2"} == b
+
+
+def test_file_uri():
+    # Note: this test probably won't pass on Windows.  Someone with a
+    # windows box should add an alternate test.
+    assert "file:///foo/bar%20baz/quux" == schema_salad.ref_resolver.file_uri(
+        "/foo/bar baz/quux"
+    )
+    assert os.path.normpath(
+        "/foo/bar baz/quux"
+    ) == schema_salad.ref_resolver.uri_file_path("file:///foo/bar%20baz/quux")
+    assert (
+        "file:///foo/bar%20baz/quux%23zing%20zong"
+        == schema_salad.ref_resolver.file_uri("/foo/bar baz/quux#zing zong")
+    )
+    assert (
+        "file:///foo/bar%20baz/quux#zing%20zong"
+        == schema_salad.ref_resolver.file_uri(
+            "/foo/bar baz/quux#zing zong", split_frag=True
+        )
+    )
+    assert os.path.normpath(
+        "/foo/bar baz/quux#zing zong"
+    ) == schema_salad.ref_resolver.uri_file_path(
+        "file:///foo/bar%20baz/quux#zing%20zong"
+    )
+
+
+def test_sourceline():
+    ldr = schema_salad.ref_resolver.Loader({"id": "@id"})
+    b, _ = ldr.resolve_ref(get_data("tests/frag.yml"))
+
+    class TestExp(Exception):
+        pass
+
+    try:
+        with SourceLine(b, 1, TestExp, False):
+            raise Exception("Whoops")
+    except TestExp as e:
+        assert str(e).endswith("frag.yml:3:3: Whoops"), e
+    except Exception as exc:
+        assert False, exc
+
+    if six.PY2:
+        try:
+            with SourceLine(b, 1, TestExp, True):
+                raise Exception("Whoops")
+        except TestExp as e:
+            assert (
+                str(e)
+                .splitlines()[0]
+                .endswith("frag.yml:3:3: Traceback (most recent call last):")
+            ), str(e)
+        except Exception as exc:
+            assert False, exc
+
+
+def test_cmap():
+    # Test bugfix that cmap won't fail when given a CommentedMap with no lc.data
+    cmap(CommentedMap((("foo", "bar"), ("baz", ["quux"]))))
+    cmap(CommentedSeq(("foo", [], "bar")))
+
+
+def test_blank_node_id():
+    # Test that blank nodes are passed through and not considered
+    # relative paths.  Blank nodes (also called anonymous ids) are
+    # URIs starting with "_:".  They are randomly generated
+    # placeholders mainly used internally where an id is needed but
+    # was not given.
+
+    ldr = schema_salad.ref_resolver.Loader({})
+    ctx = {"id": "@id"}
+    ldr.add_context(ctx)
+
+    ra, _ = ldr.resolve_all(cmap({"id": "_:foo"}), "http://example.com")
+    assert {"id": "_:foo"} == ra