63 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			63 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 
								 | 
							
								import typing
							 | 
						||
| 
								 | 
							
								from argparse import Namespace
							 | 
						||
| 
								 | 
							
								from BaseClasses import CollectionState, MultiWorld
							 | 
						||
| 
								 | 
							
								from Options import ItemLinks
							 | 
						||
| 
								 | 
							
								from test.bases import WorldTestBase
							 | 
						||
| 
								 | 
							
								from worlds.AutoWorld import AutoWorldRegister, call_all
							 | 
						||
| 
								 | 
							
								from .. import HKWorld
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class linkedTestHK():
							 | 
						||
| 
								 | 
							
								    run_default_tests = False
							 | 
						||
| 
								 | 
							
								    game = "Hollow Knight"
							 | 
						||
| 
								 | 
							
								    world: HKWorld
							 | 
						||
| 
								 | 
							
								    expected_grubs: int
							 | 
						||
| 
								 | 
							
								    item_link_group: typing.List[typing.Dict[str, typing.Any]]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def setup_item_links(self, args):
							 | 
						||
| 
								 | 
							
								        setattr(args, "item_links",
							 | 
						||
| 
								 | 
							
								                {
							 | 
						||
| 
								 | 
							
								                    1: ItemLinks.from_any(self.item_link_group),
							 | 
						||
| 
								 | 
							
								                    2: ItemLinks.from_any([{
							 | 
						||
| 
								 | 
							
								                        "name": "ItemLinkTest",
							 | 
						||
| 
								 | 
							
								                        "item_pool": ["Grub"],
							 | 
						||
| 
								 | 
							
								                        "link_replacement": False,
							 | 
						||
| 
								 | 
							
								                        "replacement_item": "One_Geo",
							 | 
						||
| 
								 | 
							
								                    }])
							 | 
						||
| 
								 | 
							
								                })
							 | 
						||
| 
								 | 
							
								        return args
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def world_setup(self) -> None:
							 | 
						||
| 
								 | 
							
								        """
							 | 
						||
| 
								 | 
							
								        Create a multiworld with two players that share an itemlink
							 | 
						||
| 
								 | 
							
								        """
							 | 
						||
| 
								 | 
							
								        self.multiworld = MultiWorld(2)
							 | 
						||
| 
								 | 
							
								        self.multiworld.game = {1: self.game, 2: self.game}
							 | 
						||
| 
								 | 
							
								        self.multiworld.player_name = {1: "Linker 1", 2: "Linker 2"}
							 | 
						||
| 
								 | 
							
								        self.multiworld.set_seed()
							 | 
						||
| 
								 | 
							
								        args = Namespace()
							 | 
						||
| 
								 | 
							
								        options_dataclass = AutoWorldRegister.world_types[self.game].options_dataclass
							 | 
						||
| 
								 | 
							
								        for name, option in options_dataclass.type_hints.items():
							 | 
						||
| 
								 | 
							
								            setattr(args, name, {
							 | 
						||
| 
								 | 
							
								                1: option.from_any(self.options.get(name, option.default)),
							 | 
						||
| 
								 | 
							
								                2: option.from_any(self.options.get(name, option.default))
							 | 
						||
| 
								 | 
							
								            })
							 | 
						||
| 
								 | 
							
								        args = self.setup_item_links(args)
							 | 
						||
| 
								 | 
							
								        self.multiworld.set_options(args)
							 | 
						||
| 
								 | 
							
								        self.multiworld.set_item_links()
							 | 
						||
| 
								 | 
							
								        # groups get added to state during its constructor so this has to be after item links are set
							 | 
						||
| 
								 | 
							
								        self.multiworld.state = CollectionState(self.multiworld)
							 | 
						||
| 
								 | 
							
								        gen_steps = ("generate_early", "create_regions", "create_items", "set_rules", "generate_basic")
							 | 
						||
| 
								 | 
							
								        for step in gen_steps:
							 | 
						||
| 
								 | 
							
								            call_all(self.multiworld, step)
							 | 
						||
| 
								 | 
							
								        # link the items together and stop at prefill
							 | 
						||
| 
								 | 
							
								        self.multiworld.link_items()
							 | 
						||
| 
								 | 
							
								        self.multiworld._all_state = None
							 | 
						||
| 
								 | 
							
								        call_all(self.multiworld, "pre_fill")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.world = self.multiworld.worlds[self.player]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def test_grub_count(self) -> None:
							 | 
						||
| 
								 | 
							
								        assert self.world.grub_count == self.expected_grubs, \
							 | 
						||
| 
								 | 
							
								               f"Expected {self.expected_grubs} but found {self.world.grub_count}"
							 |