53 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			53 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, (), 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
 |