| 
									
										
										
										
											2024-12-25 21:55:15 +01:00
										 |  |  | from typing import cast | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | from .. import WitnessWorld | 
					
						
							| 
									
										
										
										
											2024-12-10 21:13:45 +01:00
										 |  |  | from ..test import WitnessMultiworldTestBase, WitnessTestBase | 
					
						
							| 
									
										
										
										
											2024-07-06 13:40:55 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class TestIndividualDoors(WitnessTestBase): | 
					
						
							|  |  |  |     options = { | 
					
						
							|  |  |  |         "shuffle_doors": "doors", | 
					
						
							|  |  |  |         "door_groupings": "off", | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_swamp_laser_shortcut(self) -> None: | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         Test that Door Shuffle grants early access to Swamp Laser from the back shortcut. | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         self.assertTrue(self.get_items_by_name("Swamp Laser Shortcut (Door)")) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         self.assertAccessDependency( | 
					
						
							|  |  |  |             ["Swamp Laser Panel"], | 
					
						
							|  |  |  |             [ | 
					
						
							|  |  |  |                 ["Swamp Laser Shortcut (Door)"], | 
					
						
							|  |  |  |                 ["Swamp Red Underwater Exit (Door)"], | 
					
						
							|  |  |  |             ], | 
					
						
							|  |  |  |             only_check_listed=True, | 
					
						
							|  |  |  |         ) | 
					
						
							| 
									
										
										
										
											2024-12-10 21:13:45 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class TestForbiddenDoors(WitnessMultiworldTestBase): | 
					
						
							|  |  |  |     options_per_world = [ | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             "early_caves": "off", | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             "early_caves": "add_to_pool", | 
					
						
							|  |  |  |         }, | 
					
						
							| 
									
										
										
										
											2024-12-25 21:55:15 +01:00
										 |  |  |         { | 
					
						
							|  |  |  |             "early_caves": "add_to_pool", | 
					
						
							|  |  |  |             "door_groupings": "regional", | 
					
						
							|  |  |  |         }, | 
					
						
							| 
									
										
										
										
											2024-12-10 21:13:45 +01:00
										 |  |  |     ] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     common_options = { | 
					
						
							|  |  |  |         "shuffle_doors": "panels", | 
					
						
							|  |  |  |         "shuffle_postgame": True, | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_forbidden_doors(self) -> None: | 
					
						
							| 
									
										
										
										
											2024-12-25 21:55:15 +01:00
										 |  |  |         with self.subTest("Test that Caves Mountain Shortcut (Panel) exists if Early Caves is off"): | 
					
						
							|  |  |  |             self.assertTrue( | 
					
						
							|  |  |  |                 self.get_items_by_name("Caves Mountain Shortcut (Panel)", 1), | 
					
						
							|  |  |  |                 "Caves Mountain Shortcut (Panel) should exist in panels shuffle, but it didn't." | 
					
						
							|  |  |  |             ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         with self.subTest("Test that Caves Mountain Shortcut (Panel) doesn't exist if Early Caves is start_to_pool"): | 
					
						
							|  |  |  |             self.assertFalse( | 
					
						
							|  |  |  |                 self.get_items_by_name("Caves Mountain Shortcut (Panel)", 2), | 
					
						
							|  |  |  |                 "Caves Mountain Shortcut (Panel) should be removed when Early Caves is enabled, but it still exists." | 
					
						
							|  |  |  |             ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         with self.subTest("Test that slot data is set up correctly for a panels seed with Early Caves"): | 
					
						
							|  |  |  |             slot_data = cast(WitnessWorld, self.multiworld.worlds[3])._get_slot_data() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             self.assertIn( | 
					
						
							|  |  |  |                 WitnessWorld.item_name_to_id["Caves Panels"], | 
					
						
							|  |  |  |                 slot_data["door_items_in_the_pool"], | 
					
						
							|  |  |  |                 'Caves Panels should still exist in slot_data under "door_items_in_the_pool".' | 
					
						
							|  |  |  |             ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             self.assertIn( | 
					
						
							|  |  |  |                 0x021D7, | 
					
						
							|  |  |  |                 slot_data["item_id_to_door_hexes"][WitnessWorld.item_name_to_id["Caves Panels"]], | 
					
						
							|  |  |  |                 "Caves Panels should still contain Caves Mountain Shortcut Panel as a door they unlock.", | 
					
						
							|  |  |  |             ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             self.assertIn( | 
					
						
							|  |  |  |                 0x021D7, | 
					
						
							|  |  |  |                 slot_data["doors_that_shouldnt_be_locked"], | 
					
						
							|  |  |  |                 "Caves Mountain Shortcut Panel should be marked as \"shouldn't be locked\".", | 
					
						
							|  |  |  |             ) |