mirror of
https://github.com/MarioSpore/Grinch-AP.git
synced 2025-10-21 20:21:32 -06:00
* SoE: new file naming also fixes test base deprecation * SoE: use options_dataclass * SoE: moar typing * SoE: no more multiworld.random * SoE: replace LogicMixin by SoEPlayerLogic object * SoE: add test that rocket parts always exist * SoE: Even moar typing * SoE: can haz apworld now * SoE: pep up test naming * SoE: use self.options for trap chances * SoE: remove unused import with outdated comment * SoE: move flag and trap extraction to dataclass as suggested by beauxq * SoE: test trap option parsing and item generation
54 lines
1.8 KiB
Python
54 lines
1.8 KiB
Python
from . import SoETestBase
|
|
|
|
|
|
class TestFragmentGoal(SoETestBase):
|
|
options = {
|
|
"energy_core": "fragments",
|
|
"available_fragments": 21,
|
|
"required_fragments": 20,
|
|
}
|
|
|
|
def test_fragments(self):
|
|
self.collect_by_name(["Gladiator Sword", "Diamond Eye", "Wheel", "Gauge"])
|
|
self.assertBeatable(False) # 0 fragments
|
|
fragments = self.get_items_by_name("Energy Core Fragment")
|
|
victory = self.get_item_by_name("Victory")
|
|
self.collect(fragments[:-2]) # 1 too few
|
|
self.assertEqual(self.count("Energy Core Fragment"), 19)
|
|
self.assertBeatable(False)
|
|
self.collect(fragments[-2:-1]) # exact
|
|
self.assertEqual(self.count("Energy Core Fragment"), 20)
|
|
self.assertBeatable(True)
|
|
self.remove([victory]) # reset
|
|
self.collect(fragments[-1:]) # 1 extra
|
|
self.assertEqual(self.count("Energy Core Fragment"), 21)
|
|
self.assertBeatable(True)
|
|
|
|
def test_no_weapon(self):
|
|
self.collect_by_name(["Diamond Eye", "Wheel", "Gauge", "Energy Core Fragment"])
|
|
self.assertBeatable(False)
|
|
|
|
def test_no_rocket(self):
|
|
self.collect_by_name(["Gladiator Sword", "Diamond Eye", "Wheel", "Energy Core Fragment"])
|
|
self.assertBeatable(False)
|
|
|
|
|
|
class TestShuffleGoal(SoETestBase):
|
|
options = {
|
|
"energy_core": "shuffle",
|
|
}
|
|
|
|
def test_core(self):
|
|
self.collect_by_name(["Gladiator Sword", "Diamond Eye", "Wheel", "Gauge"])
|
|
self.assertBeatable(False)
|
|
self.collect_by_name(["Energy Core"])
|
|
self.assertBeatable(True)
|
|
|
|
def test_no_weapon(self):
|
|
self.collect_by_name(["Diamond Eye", "Wheel", "Gauge", "Energy Core"])
|
|
self.assertBeatable(False)
|
|
|
|
def test_no_rocket(self):
|
|
self.collect_by_name(["Gladiator Sword", "Diamond Eye", "Wheel", "Energy Core"])
|
|
self.assertBeatable(False)
|