forked from ArchipelagoMW/Archipelago
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
core: Region management helpers (ArchipelagoMW#761)
- Loading branch information
1 parent
9d73988
commit 94a0251
Showing
2 changed files
with
94 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,71 @@ | ||
from random import seed | ||
from typing import Dict, Optional, Callable, Tuple, List | ||
|
||
from BaseClasses import MultiWorld, CollectionState, Region | ||
import unittest | ||
|
||
|
||
class TestHelpers(unittest.TestCase): | ||
multiworld: MultiWorld | ||
player: int = 1 | ||
|
||
def setUp(self) -> None: | ||
self.multiworld = MultiWorld(self.player) | ||
self.multiworld.game[self.player] = "helper_test_game" | ||
self.multiworld.player_name = {1: "Tester"} | ||
self.multiworld.set_seed(seed) | ||
self.multiworld.set_default_common_options() | ||
|
||
def testRegionHelpers(self) -> None: | ||
regions: Dict[str, str] = { | ||
"TestRegion1": "I'm an apple", | ||
"TestRegion2": "I'm a banana", | ||
} | ||
|
||
locations: Dict[str, Dict[str, Optional[int]]] = { | ||
"TestRegion1": { | ||
"loc_1": 123, | ||
"loc_2": 456, | ||
"event_loc": None, | ||
}, | ||
"TestRegion2": { | ||
"loc_1": 321, | ||
"loc_2": 654, | ||
} | ||
} | ||
|
||
reg_exits: Dict[str, Dict[str, Optional[str]]] = { | ||
"TestRegion1": {"TestRegion2": "connection"}, | ||
"TestRegion2": {"TestRegion1": None}, | ||
} | ||
|
||
exit_rules: Dict[str, Callable[[CollectionState], bool]] = { | ||
"TestRegion1": lambda state: state.has("test_item", self.player) | ||
} | ||
|
||
self.multiworld.regions += [Region(region, self.player, self.multiworld, regions[region]) for region in regions] | ||
|
||
with self.subTest("Test Location Creation Helper"): | ||
for region, loc_pair in locations.items(): | ||
self.multiworld.get_region(region, self.player).add_locations(loc_pair) | ||
|
||
created_location_names = [loc.name for loc in self.multiworld.get_locations()] | ||
for loc_pair in locations.values(): | ||
for loc_name in loc_pair: | ||
self.assertTrue(loc_name in created_location_names) | ||
|
||
with self.subTest("Test Exit Creation Helper"): | ||
for region, exit_dict in reg_exits.items(): | ||
self.multiworld.get_region(region, self.player).add_exits(exit_dict, exit_rules) | ||
|
||
created_exit_names = [exit.name for region in self.multiworld.get_regions() for exit in region.exits] | ||
for parent, exit_pair in reg_exits.items(): | ||
for exit_reg, exit_name in exit_pair.items(): | ||
if exit_name: | ||
self.assertTrue(exit_name in created_exit_names) | ||
else: | ||
self.assertTrue(f"{parent} -> {exit_reg}" in created_exit_names) | ||
if exit_reg in exit_rules: | ||
entrance_name = exit_name if exit_name else f"{parent} -> {exit_reg}" | ||
self.assertEqual(exit_rules[exit_reg], | ||
self.multiworld.get_entrance(entrance_name, self.player).access_rule) |