Skip to content

Commit 865909e

Browse files
committed
Add in tests for slot_applicable_range_elements
1 parent f0d8b61 commit 865909e

File tree

1 file changed

+39
-19
lines changed

1 file changed

+39
-19
lines changed

tests/test_utils/test_schemaview.py

Lines changed: 39 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1602,48 +1602,61 @@ def sv_range_riid_gen(request: pytest.FixtureRequest) -> tuple[SchemaView, tuple
16021602
return sv_range_import_whatever(request, range_tuple=request.param)
16031603

16041604

1605+
CD = "class_definition"
1606+
ED = "enum_definition"
1607+
TD = "type_definition"
1608+
# Expected results for the various range tests run in test_slot_range.
16051609
ranges_no_defaults = {
1606-
"none_range": [None, set(), set()],
1607-
"string_range": ["string", {"string"}, {"string"}],
1608-
"class_range": ["RangeClass", {"RangeClass"}, {"RangeClass"}],
1609-
"enum_range": ["RangeEnum", {"RangeEnum"}, {"RangeEnum"}],
1610-
"any_range": ["AnyOldRange", {"AnyOldRange"}, {"AnyOldRange"}],
1611-
"exactly_one_of_range": ["AnyOldRange", {"AnyOldRange", "range_string", "string"}, {"range_string", "string"}],
1610+
"none_range": [None, set(), set(), ValueError],
1611+
"string_range": ["string", {"string"}, {"string"}, {TD}],
1612+
"class_range": ["RangeClass", {"RangeClass"}, {"RangeClass"}, {CD}],
1613+
"enum_range": ["RangeEnum", {"RangeEnum"}, {"RangeEnum"}, {ED}],
1614+
"any_range": ["AnyOldRange", {"AnyOldRange"}, {"AnyOldRange"}, {CD, ED, TD}],
1615+
"exactly_one_of_range": [
1616+
"AnyOldRange",
1617+
{"AnyOldRange", "range_string", "string"},
1618+
{"range_string", "string"},
1619+
{CD, ED, TD},
1620+
],
16121621
"any_of_range": [
16131622
"AnyOldRange",
16141623
{"AnyOldRange", "RangeEnum", "RangeClass", "string"},
16151624
{"RangeEnum", "RangeClass", "string"},
1625+
{CD, ED, TD},
16161626
],
16171627
"any_of_and_exactly_one_of_range": [
16181628
"AnyOldRange",
16191629
{"AnyOldRange", "RangeEnum", "RangeClass", "string", "range_string"},
16201630
{"RangeEnum", "RangeClass", "string", "range_string"},
1631+
{CD, ED, TD},
16211632
],
1622-
"invalid_any_range_no_linkml_any": [None, {"string", "range_string"}, set()],
1623-
"invalid_any_range_enum": ["RangeEnum", {"RangeEnum", "string", "range_string"}, {"RangeEnum"}],
1624-
"invalid_any_range_class": ["RangeClass", {"RangeClass", "string", "range_string"}, {"RangeClass"}],
1633+
"invalid_any_range_no_linkml_any": [None, {"string", "range_string"}, set(), {TD}],
1634+
"invalid_any_range_enum": ["RangeEnum", {"RangeEnum", "string", "range_string"}, {"RangeEnum"}, {ED, TD}],
1635+
"invalid_any_range_class": ["RangeClass", {"RangeClass", "string", "range_string"}, {"RangeClass"}, {CD, TD}],
16251636
}
16261637

1638+
# These are the expected ranges for slots where the range is replaced by
1639+
# the default_range of the local, importer, or import_importer schema.
16271640
ranges_replaced_by_defaults = {
16281641
"none_range": {
16291642
# these tuples replicate what is in RANGE_TUPLES
16301643
# local schema only
16311644
(EMPTY, None, None): [None, {None}, set()],
1632-
(RLD, None, None): [RLD, {RLD}, {RLD}],
1645+
(RLD, None, None): [RLD, {RLD}, {RLD}, {TD}],
16331646
# local imported by `importer` schema
16341647
(EMPTY, EMPTY, None): [None, {None}, set()],
1635-
(EMPTY, RID, None): [RID, {RID}, {RID}],
1648+
(EMPTY, RID, None): [RID, {RID}, {RID}, {TD}],
16361649
(RLD, EMPTY, None): [None, {None}, set()],
1637-
(RLD, RID, None): [RID, {RID}, {RID}],
1650+
(RLD, RID, None): [RID, {RID}, {RID}, {TD}],
16381651
# `importer` schema imported by a third schema
16391652
(EMPTY, EMPTY, EMPTY): [None, {None}, set()],
16401653
(EMPTY, RID, EMPTY): [None, {None}, set()],
1641-
(EMPTY, EMPTY, RIID): [RIID, {RIID}, {RIID}],
1642-
(EMPTY, RID, RIID): [RIID, {RIID}, {RIID}],
1654+
(EMPTY, EMPTY, RIID): [RIID, {RIID}, {RIID}, {TD}],
1655+
(EMPTY, RID, RIID): [RIID, {RIID}, {RIID}, {TD}],
16431656
(RLD, EMPTY, EMPTY): [None, {None}, set()],
16441657
(RLD, RID, EMPTY): [None, {None}, set()],
1645-
(RLD, EMPTY, RIID): [RIID, {RIID}, {RIID}],
1646-
(RLD, RID, RIID): [RIID, {RIID}, {RIID}],
1658+
(RLD, EMPTY, RIID): [RIID, {RIID}, {RIID}, {TD}],
1659+
(RLD, RID, RIID): [RIID, {RIID}, {RIID}, {TD}],
16471660
}
16481661
}
16491662
ranges_replaced_by_defaults["invalid_any_range_no_linkml_any"] = {
@@ -1655,7 +1668,8 @@ def sv_range_riid_gen(request: pytest.FixtureRequest) -> tuple[SchemaView, tuple
16551668
def test_generated_range_schema(sv_range_riid_gen: tuple[SchemaView, tuple[str, str | None, str | None]]) -> None:
16561669
"""Tests for generation of range schemas.
16571670
1658-
This is a "meta-test" to ensure that the sv_range_import_whatever function is working as expected.
1671+
This is a "meta-test" to ensure that the sv_range_import_whatever function is
1672+
generating the correct schemas.
16591673
"""
16601674
(sv_range, range_tuple) = sv_range_riid_gen
16611675
schema_name = gen_schema_name(range_tuple)
@@ -1666,7 +1680,7 @@ def test_generated_range_schema(sv_range_riid_gen: tuple[SchemaView, tuple[str,
16661680
assert isinstance(sv_range, SchemaView)
16671681

16681682

1669-
@pytest.mark.parametrize("range_function", ["slot_range", "slot_range_as_union"]) # , "induced_slot_range"])
1683+
@pytest.mark.parametrize("range_function", ["slot_range", "slot_range_as_union", "slot_applicable_range_elements"])
16701684
@pytest.mark.parametrize("slot_name", ranges_no_defaults.keys())
16711685
def test_slot_range(
16721686
range_function: str,
@@ -1695,7 +1709,13 @@ def test_slot_range(
16951709
elif range_function == "induced_slot_range":
16961710
assert sv_range.induced_slot_range(slots_by_name[slot_name]) == expected[2]
16971711
elif range_function == "slot_applicable_range_elements":
1698-
assert set(sv_range.slot_applicable_range_elements(slots_by_name[slot_name])) == expected[3]
1712+
if slot_name in ranges_replaced_by_defaults and len(expected) < 4:
1713+
expected = ranges_no_defaults[slot_name]
1714+
if isinstance(expected[3], set):
1715+
assert set(sv_range.slot_applicable_range_elements(slots_by_name[slot_name])) == expected[3]
1716+
else:
1717+
with pytest.raises(expected[3], match="Unrecognized range: None"):
1718+
sv_range.slot_applicable_range_elements(slots_by_name[slot_name])
16991719
else:
17001720
pytest.fail(f"Unexpected range_function value: {range_function}")
17011721

0 commit comments

Comments
 (0)