62 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			62 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|   | import typing | ||
|  | from argparse import Namespace | ||
|  | from BaseClasses import CollectionState, MultiWorld | ||
|  | from Options import ItemLinks | ||
|  | 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}" |