38 lines
2.1 KiB
Python
38 lines
2.1 KiB
Python
from BaseClasses import CollectionState
|
|
from . import MessengerTestBase
|
|
from ..portals import PORTALS
|
|
|
|
|
|
class PortalTestBase(MessengerTestBase):
|
|
options = {
|
|
"available_portals": 3,
|
|
}
|
|
|
|
def test_portal_reqs(self) -> None:
|
|
"""tests the paths to open a portal if only that portal is closed with vanilla connections."""
|
|
# portal and requirements to reach it if it's the only closed portal
|
|
portal_requirements = {
|
|
"Autumn Hills Portal": [["Wingsuit"]], # grotto -> bamboo -> catacombs -> hills
|
|
"Riviere Turquoise Portal": [["Candle", "Wingsuit", "Rope Dart"]], # hills -> catacombs -> dark cave -> riviere
|
|
"Howling Grotto Portal": [["Wingsuit"], ["Meditation", "Second Wind"]], # crags -> quillshroom -> grotto
|
|
"Sunken Shrine Portal": [["Seashell"]], # crags -> quillshroom -> grotto -> shrine
|
|
"Searing Crags Portal": [["Wingsuit"], ["Rope Dart"]], # grotto -> quillshroom -> crags there's two separate paths
|
|
"Glacial Peak Portal": [["Wingsuit", "Second Wind", "Meditation"], ["Rope Dart"]], # grotto -> quillshroom -> crags -> peak or crags -> peak
|
|
}
|
|
|
|
for portal in PORTALS:
|
|
name = f"{portal} Portal"
|
|
entrance_name = f"ToTHQ {name}"
|
|
with self.subTest(portal=name, entrance_name=entrance_name):
|
|
entrance = self.multiworld.get_entrance(entrance_name, self.player)
|
|
# this emulates the portal being initially closed
|
|
entrance.access_rule = lambda state: state.has(name, self.player)
|
|
for grouping in portal_requirements[name]:
|
|
test_state = CollectionState(self.multiworld)
|
|
self.assertFalse(entrance.can_reach(test_state), "reachable with nothing")
|
|
items = self.get_items_by_name(grouping)
|
|
for item in items:
|
|
test_state.collect(item)
|
|
self.assertTrue(entrance.can_reach(test_state), grouping)
|
|
entrance.access_rule = lambda state: True
|