| 
									
										
										
										
											2020-03-19 21:55:26 +11:00
										 |  |  | import unittest | 
					
						
							| 
									
										
										
										
											2021-08-30 16:38:21 +02:00
										 |  |  | from argparse import Namespace | 
					
						
							| 
									
										
										
										
											2020-03-19 21:55:26 +11:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-24 05:38:56 +02:00
										 |  |  | from BaseClasses import MultiWorld | 
					
						
							|  |  |  | from worlds.alttp.Dungeons import create_dungeons | 
					
						
							|  |  |  | from worlds.alttp.EntranceShuffle import connect_entrance, Inverted_LW_Entrances, Inverted_LW_Dungeon_Entrances, Inverted_LW_Single_Cave_Doors, Inverted_Old_Man_Entrances, Inverted_DW_Entrances, Inverted_DW_Dungeon_Entrances, Inverted_DW_Single_Cave_Doors, \ | 
					
						
							| 
									
										
										
										
											2020-04-29 01:34:30 +10:00
										 |  |  |     Inverted_LW_Entrances_Must_Exit, Inverted_LW_Dungeon_Entrances_Must_Exit, Inverted_Bomb_Shop_Multi_Cave_Doors, Inverted_Bomb_Shop_Single_Cave_Doors, Blacksmith_Single_Cave_Doors, Inverted_Blacksmith_Multi_Cave_Doors | 
					
						
							| 
									
										
										
										
											2020-10-24 05:38:56 +02:00
										 |  |  | from worlds.alttp.InvertedRegions import create_inverted_regions | 
					
						
							|  |  |  | from worlds.alttp.ItemPool import difficulties | 
					
						
							|  |  |  | from worlds.alttp.Rules import set_inverted_big_bomb_rules | 
					
						
							| 
									
										
										
										
											2021-08-30 16:38:21 +02:00
										 |  |  | from worlds import AutoWorld | 
					
						
							| 
									
										
										
										
											2020-03-19 21:55:26 +11:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class TestInvertedBombRules(unittest.TestCase): | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def setUp(self): | 
					
						
							| 
									
										
										
										
											2021-03-14 08:38:02 +01:00
										 |  |  |         self.world = MultiWorld(1) | 
					
						
							|  |  |  |         self.world.mode[1] = "inverted" | 
					
						
							| 
									
										
										
										
											2021-08-30 16:38:21 +02:00
										 |  |  |         args = Namespace | 
					
						
							|  |  |  |         for name, option in AutoWorld.AutoWorldRegister.world_types["A Link to the Past"].options.items(): | 
					
						
							|  |  |  |             setattr(args, name, {1: option.from_any(option.default)}) | 
					
						
							|  |  |  |             self.world.set_options(args) | 
					
						
							| 
									
										
										
										
											2020-04-29 01:34:30 +10:00
										 |  |  |         self.world.difficulty_requirements[1] = difficulties['normal'] | 
					
						
							| 
									
										
										
										
											2020-03-19 21:55:26 +11:00
										 |  |  |         create_inverted_regions(self.world, 1) | 
					
						
							|  |  |  |         create_dungeons(self.world, 1) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     #TODO: Just making sure I haven't missed an entrance.  It would be good to test the rules make sense as well. | 
					
						
							|  |  |  |     def testInvertedBombRulesAreComplete(self): | 
					
						
							|  |  |  |         entrances = list(Inverted_LW_Entrances + Inverted_LW_Dungeon_Entrances + Inverted_LW_Single_Cave_Doors + Inverted_Old_Man_Entrances + Inverted_DW_Entrances + Inverted_DW_Dungeon_Entrances + Inverted_DW_Single_Cave_Doors) | 
					
						
							|  |  |  |         must_exits = list(Inverted_LW_Entrances_Must_Exit + Inverted_LW_Dungeon_Entrances_Must_Exit) | 
					
						
							|  |  |  |         for entrance_name in (entrances + must_exits): | 
					
						
							|  |  |  |             if entrance_name not in ['Desert Palace Entrance (East)', 'Spectacle Rock Cave', 'Spectacle Rock Cave (Bottom)']: | 
					
						
							|  |  |  |                 entrance = self.world.get_entrance(entrance_name, 1) | 
					
						
							| 
									
										
										
										
											2020-04-29 01:34:30 +10:00
										 |  |  |                 connect_entrance(self.world, entrance_name, 'Inverted Big Bomb Shop', 1) | 
					
						
							| 
									
										
										
										
											2020-03-19 21:55:26 +11:00
										 |  |  |                 set_inverted_big_bomb_rules(self.world, 1) | 
					
						
							|  |  |  |                 entrance.connected_region.entrances.remove(entrance) | 
					
						
							|  |  |  |                 entrance.connected_region = None | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-04-05 14:44:00 +10:00
										 |  |  |     def testInvalidEntrancesAreNotUsed(self): | 
					
						
							| 
									
										
										
										
											2020-04-29 01:34:30 +10:00
										 |  |  |         entrances = list(Inverted_Blacksmith_Multi_Cave_Doors + Blacksmith_Single_Cave_Doors + Inverted_Bomb_Shop_Multi_Cave_Doors + Inverted_Bomb_Shop_Single_Cave_Doors) | 
					
						
							| 
									
										
										
										
											2020-04-05 14:44:00 +10:00
										 |  |  |         invalid_entrances = ['Desert Palace Entrance (East)', 'Spectacle Rock Cave', 'Spectacle Rock Cave (Bottom)', 'Pyramid Fairy'] | 
					
						
							|  |  |  |         for invalid_entrance in invalid_entrances: | 
					
						
							|  |  |  |             self.assertNotIn(invalid_entrance, entrances) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-19 21:55:26 +11:00
										 |  |  |     def testInvalidEntrances(self): | 
					
						
							|  |  |  |         for entrance_name in ['Desert Palace Entrance (East)', 'Spectacle Rock Cave', 'Spectacle Rock Cave (Bottom)']: | 
					
						
							|  |  |  |             entrance = self.world.get_entrance(entrance_name, 1) | 
					
						
							| 
									
										
										
										
											2020-04-29 01:34:30 +10:00
										 |  |  |             connect_entrance(self.world, entrance_name, 'Inverted Big Bomb Shop', 1) | 
					
						
							| 
									
										
										
										
											2020-03-19 21:55:26 +11:00
										 |  |  |             with self.assertRaises(Exception): | 
					
						
							|  |  |  |                 set_inverted_big_bomb_rules(self.world, 1) | 
					
						
							|  |  |  |             entrance.connected_region.entrances.remove(entrance) | 
					
						
							|  |  |  |             entrance.connected_region = None |