46 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			46 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
	
import typing
 | 
						|
from . import SoETestBase
 | 
						|
 | 
						|
 | 
						|
class SequenceBreaksTest(SoETestBase):
 | 
						|
    """Tests that 'on' doesn't put sequence breaks in logic. This is also the test base for in-logic."""
 | 
						|
    options: typing.Dict[str, typing.Any] = {"sequence_breaks": "on"}
 | 
						|
 | 
						|
    def testSequenceBreaksAccess(self):
 | 
						|
        in_logic = self.options["sequence_breaks"] == "logic"
 | 
						|
 | 
						|
        # some locations that just need any weapon + sequence break
 | 
						|
        break_reachable = [
 | 
						|
            "Sons of Sth.", "Mad Monk", "Magmar",
 | 
						|
            "Fireball",
 | 
						|
            "Volcano Room1 #73", "Pyramid top #135",
 | 
						|
        ]
 | 
						|
        # some locations that should still be unreachable
 | 
						|
        break_unreachable = [
 | 
						|
            "Aquagoth", "Megataur", "Tiny", "Rimsala",
 | 
						|
            "Barrier", "Call Up", "Levitate", "Stop", "Drain", "Escape",
 | 
						|
            "Greenhouse #275", "E. Crustacia #107", "Energy Core #285", "Vanilla Gauge #57",
 | 
						|
        ]
 | 
						|
 | 
						|
        self.assertLocationReachability(reachable=break_reachable, unreachable=break_unreachable, satisfied=False)
 | 
						|
        self.collect_by_name("Gladiator Sword")
 | 
						|
        self.assertLocationReachability(reachable=break_reachable, unreachable=break_unreachable, satisfied=in_logic)
 | 
						|
        self.collect_by_name("Spider Claw")  # Gauge now just needs non-sword
 | 
						|
        self.assertEqual(self.can_reach_location("Vanilla Gauge #57"), in_logic)
 | 
						|
        self.collect_by_name("Bronze Spear")  # Escape now just needs either Megataur or Rimsala dead
 | 
						|
        self.assertEqual(self.can_reach_location("Escape"), in_logic)
 | 
						|
 | 
						|
    def testSequenceBreaksGoal(self):
 | 
						|
        in_logic = self.options["sequence_breaks"] == "logic"
 | 
						|
 | 
						|
        # don't need Energy Core with sequence breaks in logic
 | 
						|
        for item in ["Gladiator Sword", "Diamond Eye", "Wheel", "Gauge"]:
 | 
						|
            self.assertBeatable(False)
 | 
						|
            self.collect_by_name(item)
 | 
						|
        self.assertBeatable(in_logic)
 | 
						|
 | 
						|
 | 
						|
class SequenceBreaksInLogicTest(SequenceBreaksTest):
 | 
						|
    """Tests that stuff that should be reachable/unreachable with sequence breaks actually is."""
 | 
						|
    options: typing.Dict[str, typing.Any] = {"sequence_breaks": "logic"}
 |