Zillion: fix unit tests

previous fix was incorrect
This commit is contained in:
beauxq 2022-10-23 13:23:30 -07:00 committed by black-sliver
parent 37c5865c0e
commit ad445629bd
3 changed files with 34 additions and 22 deletions

View File

@ -19,13 +19,13 @@ class WorldTestBase(unittest.TestCase):
if self.auto_construct:
self.world_setup()
def world_setup(self) -> None:
def world_setup(self, seed: typing.Optional[int] = None) -> None:
if not hasattr(self, "game"):
raise NotImplementedError("didn't define game name")
self.world = MultiWorld(1)
self.world.game[1] = self.game
self.world.player_name = {1: "Tester"}
self.world.set_seed()
self.world.set_seed(seed)
args = Namespace()
for name, option in AutoWorld.AutoWorldRegister.world_types[self.game].option_definitions.items():
setattr(args, name, {

View File

@ -10,7 +10,7 @@ class TestGoalVanilla(ZillionTestBase):
"floppy_req": 6,
}
def test_floppies(self):
def test_floppies(self) -> None:
self.collect_by_name(["Apple", "Champ", "Red ID Card"])
self.assertBeatable(False) # 0 floppies
floppies = self.get_items_by_name("Floppy Disk")
@ -26,19 +26,20 @@ class TestGoalVanilla(ZillionTestBase):
self.assertEqual(self.count("Floppy Disk"), 7)
self.assertBeatable(True)
def test_with_everything(self):
def test_with_everything(self) -> None:
self.collect_by_name(["Apple", "Champ", "Red ID Card", "Floppy Disk"])
self.assertBeatable(True)
def test_no_jump(self):
def test_no_jump(self) -> None:
self.collect_by_name(["Champ", "Red ID Card", "Floppy Disk"])
self.assertBeatable(False)
def test_no_gun(self):
def test_no_gun(self) -> None:
self.ensure_gun_3_requirement()
self.collect_by_name(["Apple", "Red ID Card", "Floppy Disk"])
self.assertBeatable(False)
def test_no_red(self):
def test_no_red(self) -> None:
self.collect_by_name(["Apple", "Champ", "Floppy Disk"])
self.assertBeatable(False)
@ -50,7 +51,7 @@ class TestGoalBalanced(ZillionTestBase):
"gun_levels": "balanced",
}
def test_jump(self):
def test_jump(self) -> None:
self.collect_by_name(["Red ID Card", "Floppy Disk", "Zillion"])
self.assertBeatable(False) # not enough jump
opas = self.get_items_by_name("Opa-Opa")
@ -60,7 +61,8 @@ class TestGoalBalanced(ZillionTestBase):
self.collect(opas[1:])
self.assertBeatable(True)
def test_guns(self):
def test_guns(self) -> None:
self.ensure_gun_3_requirement()
self.collect_by_name(["Red ID Card", "Floppy Disk", "Opa-Opa"])
self.assertBeatable(False) # not enough gun
guns = self.get_items_by_name("Zillion")
@ -78,7 +80,7 @@ class TestGoalRestrictive(ZillionTestBase):
"gun_levels": "restrictive",
}
def test_jump(self):
def test_jump(self) -> None:
self.collect_by_name(["Champ", "Red ID Card", "Floppy Disk", "Zillion"])
self.assertBeatable(False) # not enough jump
self.collect_by_name("Opa-Opa")
@ -86,7 +88,8 @@ class TestGoalRestrictive(ZillionTestBase):
self.collect_by_name("Apple")
self.assertBeatable(True)
def test_guns(self):
def test_guns(self) -> None:
self.ensure_gun_3_requirement()
self.collect_by_name(["Apple", "Red ID Card", "Floppy Disk", "Opa-Opa"])
self.assertBeatable(False) # not enough gun
self.collect_by_name("Zillion")
@ -104,15 +107,17 @@ class TestGoalAppleStart(ZillionTestBase):
"zillion_count": 5
}
def test_guns_jj_first(self):
def test_guns_jj_first(self) -> None:
""" with low gun levels, 5 Zillion is enough to get JJ to gun 3 """
self.ensure_gun_3_requirement()
self.collect_by_name(["JJ", "Red ID Card", "Floppy Disk", "Opa-Opa"])
self.assertBeatable(False) # not enough gun
self.collect_by_name("Zillion")
self.assertBeatable(True)
def test_guns_zillions_first(self):
def test_guns_zillions_first(self) -> None:
""" with low gun levels, 5 Zillion is enough to get JJ to gun 3 """
self.ensure_gun_3_requirement()
self.collect_by_name(["Zillion", "Red ID Card", "Floppy Disk", "Opa-Opa"])
self.assertBeatable(False) # not enough gun
self.collect_by_name("JJ")
@ -129,14 +134,14 @@ class TestGoalChampStart(ZillionTestBase):
"opas_per_level": 1
}
def test_jump_jj_first(self):
def test_jump_jj_first(self) -> None:
""" with low jump levels, 5 level-ups is enough to get JJ to jump 3 """
self.collect_by_name(["JJ", "Red ID Card", "Floppy Disk", "Zillion"])
self.assertBeatable(False) # not enough jump
self.collect_by_name("Opa-Opa")
self.assertBeatable(True)
def test_jump_opa_first(self):
def test_jump_opa_first(self) -> None:
""" with low jump levels, 5 level-ups is enough to get JJ to jump 3 """
self.collect_by_name(["Opa-Opa", "Red ID Card", "Floppy Disk", "Zillion"])
self.assertBeatable(False) # not enough jump

View File

@ -1,13 +1,20 @@
from typing import cast
from test.worlds.test_base import WorldTestBase
from worlds.zillion.region import ZillionLocation
from worlds.zillion import ZillionWorld
class ZillionTestBase(WorldTestBase):
game = "Zillion"
def world_setup(self) -> None:
super().world_setup()
# make sure game requires gun 3 for tests
for location in self.world.get_locations():
if isinstance(location, ZillionLocation) and location.name.startswith("O-7"):
location.zz_loc.req.gun = 3
def ensure_gun_3_requirement(self) -> None:
"""
There's a low probability that gun 3 is not required.
This makes sure that gun 3 is required by making all the canisters
in O-7 (including key word canisters) require gun 3.
"""
zz_world = cast(ZillionWorld, self.world.worlds[1])
assert zz_world.zz_system.randomizer
for zz_loc_name, zz_loc in zz_world.zz_system.randomizer.locations.items():
if zz_loc_name.startswith("r15c6"):
zz_loc.req.gun = 3