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}"
|