@@ -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.
16051609ranges_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.
16271640ranges_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}
16491662ranges_replaced_by_defaults ["invalid_any_range_no_linkml_any" ] = {
@@ -1655,7 +1668,8 @@ def sv_range_riid_gen(request: pytest.FixtureRequest) -> tuple[SchemaView, tuple
16551668def 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 ())
16711685def 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