mirror of
https://github.com/MarioSpore/Grinch-AP.git
synced 2025-10-21 12:11:33 -06:00
Tests: now autoload tests from /worlds/*/test (#1318)
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
This commit is contained in:
@@ -1,136 +0,0 @@
|
||||
import unittest
|
||||
import Generate
|
||||
from Options import PlandoBosses
|
||||
|
||||
|
||||
class SingleBosses(PlandoBosses):
|
||||
bosses = {"B1", "B2"}
|
||||
locations = {"L1", "L2"}
|
||||
|
||||
option_vanilla = 0
|
||||
option_shuffle = 1
|
||||
|
||||
@staticmethod
|
||||
def can_place_boss(boss: str, location: str) -> bool:
|
||||
if boss == "b1" and location == "l1":
|
||||
return False
|
||||
return True
|
||||
|
||||
|
||||
class MultiBosses(SingleBosses):
|
||||
bosses = SingleBosses.bosses # explicit copy required
|
||||
locations = SingleBosses.locations
|
||||
duplicate_bosses = True
|
||||
|
||||
option_singularity = 2 # required when duplicate_bosses = True
|
||||
|
||||
|
||||
class TestPlandoBosses(unittest.TestCase):
|
||||
def testCI(self):
|
||||
"""Bosses, locations and modes are supposed to be case-insensitive"""
|
||||
self.assertEqual(MultiBosses.from_any("L1-B2").value, "l1-b2;vanilla")
|
||||
self.assertEqual(MultiBosses.from_any("ShUfFlE").value, SingleBosses.option_shuffle)
|
||||
|
||||
def testRandom(self):
|
||||
"""Validate random is random"""
|
||||
import random
|
||||
random.seed(0)
|
||||
value1 = MultiBosses.from_any("random")
|
||||
random.seed(0)
|
||||
value2 = MultiBosses.from_text("random")
|
||||
self.assertEqual(value1, value2)
|
||||
for n in range(0, 100):
|
||||
if MultiBosses.from_text("random") != value1:
|
||||
break
|
||||
else:
|
||||
raise Exception("random is not random")
|
||||
|
||||
def testShuffleMode(self):
|
||||
"""Test that simple modes (no Plando) work"""
|
||||
self.assertEqual(MultiBosses.from_any("shuffle"), MultiBosses.option_shuffle)
|
||||
self.assertNotEqual(MultiBosses.from_any("vanilla"), MultiBosses.option_shuffle)
|
||||
|
||||
def testPlacement(self):
|
||||
"""Test that valid placements work and invalid placements fail"""
|
||||
with self.assertRaises(ValueError):
|
||||
MultiBosses.from_any("l1-b1")
|
||||
MultiBosses.from_any("l1-b2;l2-b1")
|
||||
|
||||
def testMixed(self):
|
||||
"""Test that shuffle is applied for remaining locations"""
|
||||
self.assertIn("shuffle", MultiBosses.from_any("l1-b2;l2-b1;shuffle").value)
|
||||
self.assertIn("vanilla", MultiBosses.from_any("l1-b2;l2-b1").value)
|
||||
|
||||
def testUnknown(self):
|
||||
"""Test that unknown values throw exceptions"""
|
||||
# unknown boss
|
||||
with self.assertRaises(ValueError):
|
||||
MultiBosses.from_any("l1-b0")
|
||||
# unknown location
|
||||
with self.assertRaises(ValueError):
|
||||
MultiBosses.from_any("l0-b1")
|
||||
# swapped boss-location
|
||||
with self.assertRaises(ValueError):
|
||||
MultiBosses.from_any("b2-b2")
|
||||
# boss name in place of mode (no singularity)
|
||||
with self.assertRaises(ValueError):
|
||||
SingleBosses.from_any("b1")
|
||||
with self.assertRaises(ValueError):
|
||||
SingleBosses.from_any("l2-b2;b1")
|
||||
# location name in place of mode
|
||||
with self.assertRaises(ValueError):
|
||||
MultiBosses.from_any("l1")
|
||||
with self.assertRaises(ValueError):
|
||||
MultiBosses.from_any("l2-b2;l1")
|
||||
# mode name in place of location
|
||||
with self.assertRaises(ValueError):
|
||||
MultiBosses.from_any("shuffle-b2;vanilla")
|
||||
with self.assertRaises(ValueError):
|
||||
MultiBosses.from_any("shuffle-b2;l2-b2")
|
||||
# mode name in place of boss
|
||||
with self.assertRaises(ValueError):
|
||||
MultiBosses.from_any("l2-shuffle;vanilla")
|
||||
with self.assertRaises(ValueError):
|
||||
MultiBosses.from_any("l1-shuffle;l2-b2")
|
||||
|
||||
def testOrder(self):
|
||||
"""Can't use mode in random places"""
|
||||
with self.assertRaises(ValueError):
|
||||
MultiBosses.from_any("shuffle;l2-b2")
|
||||
|
||||
def testDuplicateBoss(self):
|
||||
"""Can place the same boss twice"""
|
||||
MultiBosses.from_any("l1-b2;l2-b2")
|
||||
with self.assertRaises(ValueError):
|
||||
SingleBosses.from_any("l1-b2;l2-b2")
|
||||
|
||||
def testDuplicateLocation(self):
|
||||
"""Can't use the same location twice"""
|
||||
with self.assertRaises(ValueError):
|
||||
MultiBosses.from_any("l1-b2;l1-b2")
|
||||
|
||||
def testSingularity(self):
|
||||
"""Test automatic singularity mode"""
|
||||
self.assertIn(";singularity", MultiBosses.from_any("b2").value)
|
||||
|
||||
def testPlandoSettings(self):
|
||||
"""Test that plando settings verification works"""
|
||||
plandoed_string = "l1-b2;l2-b1"
|
||||
mixed_string = "l1-b2;shuffle"
|
||||
regular_string = "shuffle"
|
||||
plandoed = MultiBosses.from_any(plandoed_string)
|
||||
mixed = MultiBosses.from_any(mixed_string)
|
||||
regular = MultiBosses.from_any(regular_string)
|
||||
|
||||
# plando should work with boss plando
|
||||
plandoed.verify(None, "Player", Generate.PlandoSettings.bosses)
|
||||
self.assertTrue(plandoed.value.startswith(plandoed_string))
|
||||
# plando should fall back to default without boss plando
|
||||
plandoed.verify(None, "Player", Generate.PlandoSettings.items)
|
||||
self.assertEqual(plandoed, MultiBosses.option_vanilla)
|
||||
# mixed should fall back to mode
|
||||
mixed.verify(None, "Player", Generate.PlandoSettings.items) # should produce a warning and still work
|
||||
self.assertEqual(mixed, MultiBosses.option_shuffle)
|
||||
# mode stuff should just work
|
||||
regular.verify(None, "Player", Generate.PlandoSettings.items)
|
||||
self.assertEqual(regular, MultiBosses.option_shuffle)
|
Reference in New Issue
Block a user