"Added a bunch of tests to make sure I don't break anything during refactoring Huge cleanup in the Regions file, extract methods, remove code duplicate, fix typos, fix variable naming conventions, etc. Small cleanup in other places, minor stuff just what was needed for Regions"
54 lines
2.0 KiB
Python
54 lines
2.0 KiB
Python
from typing import ClassVar
|
|
|
|
from typing import Dict, FrozenSet, Tuple, Any
|
|
from argparse import Namespace
|
|
|
|
from BaseClasses import MultiWorld
|
|
from test.TestBase import WorldTestBase
|
|
from .. import DLCqworld
|
|
from test.general import gen_steps, setup_solo_multiworld as setup_base_solo_multiworld
|
|
from worlds.AutoWorld import call_all
|
|
|
|
|
|
class DLCQuestTestBase(WorldTestBase):
|
|
game = "DLCQuest"
|
|
world: DLCqworld
|
|
player: ClassVar[int] = 1
|
|
|
|
def world_setup(self, *args, **kwargs):
|
|
super().world_setup(*args, **kwargs)
|
|
if self.constructed:
|
|
self.world = self.multiworld.worlds[self.player] # noqa
|
|
|
|
@property
|
|
def run_default_tests(self) -> bool:
|
|
# world_setup is overridden, so it'd always run default tests when importing DLCQuestTestBase
|
|
is_not_dlc_test = type(self) is not DLCQuestTestBase
|
|
should_run_default_tests = is_not_dlc_test and super().run_default_tests
|
|
return should_run_default_tests
|
|
|
|
|
|
def setup_dlc_quest_solo_multiworld(test_options=None, seed=None, _cache: Dict[FrozenSet[Tuple[str, Any]], MultiWorld] = {}) -> MultiWorld: #noqa
|
|
if test_options is None:
|
|
test_options = {}
|
|
|
|
# Yes I reuse the worlds generated between tests, its speeds the execution by a couple seconds
|
|
frozen_options = frozenset(test_options.items()).union({seed})
|
|
if frozen_options in _cache:
|
|
return _cache[frozen_options]
|
|
|
|
multiworld = setup_base_solo_multiworld(DLCqworld, ())
|
|
multiworld.set_seed(seed)
|
|
# print(f"Seed: {multiworld.seed}") # Uncomment to print the seed for every test
|
|
args = Namespace()
|
|
for name, option in DLCqworld.options_dataclass.type_hints.items():
|
|
value = option(test_options[name]) if name in test_options else option.from_any(option.default)
|
|
setattr(args, name, {1: value})
|
|
multiworld.set_options(args)
|
|
for step in gen_steps:
|
|
call_all(multiworld, step)
|
|
|
|
_cache[frozen_options] = multiworld
|
|
|
|
return multiworld
|