57 lines
2.5 KiB
Python
57 lines
2.5 KiB
Python
import unittest
|
|
from typing import List, Union
|
|
|
|
from BaseClasses import MultiWorld
|
|
from worlds.stardew_valley.mods.mod_data import all_mods
|
|
from worlds.stardew_valley.test import setup_solo_multiworld
|
|
from worlds.stardew_valley.test.TestOptions import basic_checks, SVTestCase
|
|
from worlds.stardew_valley.items import item_table
|
|
from worlds.stardew_valley.locations import location_table
|
|
from worlds.stardew_valley.options import Mods
|
|
from .option_names import options_to_include
|
|
|
|
|
|
def check_stray_mod_items(chosen_mods: Union[List[str], str], tester: unittest.TestCase, multiworld: MultiWorld):
|
|
if isinstance(chosen_mods, str):
|
|
chosen_mods = [chosen_mods]
|
|
for multiworld_item in multiworld.get_items():
|
|
item = item_table[multiworld_item.name]
|
|
tester.assertTrue(item.mod_name is None or item.mod_name in chosen_mods)
|
|
for multiworld_location in multiworld.get_locations():
|
|
if multiworld_location.event:
|
|
continue
|
|
location = location_table[multiworld_location.name]
|
|
tester.assertTrue(location.mod_name is None or location.mod_name in chosen_mods)
|
|
|
|
|
|
class TestGenerateModsOptions(SVTestCase):
|
|
|
|
def test_given_mod_pairs_when_generate_then_basic_checks(self):
|
|
if self.skip_long_tests:
|
|
return
|
|
mods = list(all_mods)
|
|
num_mods = len(mods)
|
|
for mod1_index in range(0, num_mods):
|
|
for mod2_index in range(mod1_index + 1, num_mods):
|
|
mod1 = mods[mod1_index]
|
|
mod2 = mods[mod2_index]
|
|
mod_pair = (mod1, mod2)
|
|
with self.subTest(f"Mods: {mod_pair}"):
|
|
multiworld = setup_solo_multiworld({Mods: mod_pair})
|
|
basic_checks(self, multiworld)
|
|
check_stray_mod_items(list(mod_pair), self, multiworld)
|
|
|
|
def test_given_mod_names_when_generate_paired_with_other_options_then_basic_checks(self):
|
|
if self.skip_long_tests:
|
|
return
|
|
num_options = len(options_to_include)
|
|
for option_index in range(0, num_options):
|
|
option = options_to_include[option_index]
|
|
if not option.options:
|
|
continue
|
|
for value in option.options:
|
|
for mod in all_mods:
|
|
with self.subTest(f"{option.internal_name}: {value}, Mod: {mod}"):
|
|
multiworld = setup_solo_multiworld({option.internal_name: option.options[value], Mods: mod})
|
|
basic_checks(self, multiworld)
|
|
check_stray_mod_items(mod, self, multiworld) |