61 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			61 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Python
		
	
	
	
| from unittest import TestCase
 | |
| 
 | |
| from BaseClasses import MultiWorld
 | |
| from test.general import gen_steps, setup_multiworld
 | |
| from worlds.AutoWorld import call_all
 | |
| from worlds.generic.Rules import locality_rules
 | |
| from ... import ALTTPWorld
 | |
| from ...Options import DungeonItem
 | |
| 
 | |
| 
 | |
| class DungeonFillTestBase(TestCase):
 | |
|     multiworld: MultiWorld
 | |
|     world_1: ALTTPWorld
 | |
|     world_2: ALTTPWorld
 | |
|     options = (
 | |
|         "big_key_shuffle",
 | |
|         "small_key_shuffle",
 | |
|         "key_drop_shuffle",
 | |
|         "compass_shuffle",
 | |
|         "map_shuffle",
 | |
|     )
 | |
| 
 | |
|     def setUp(self):
 | |
|         self.multiworld = setup_multiworld([ALTTPWorld, ALTTPWorld], ())
 | |
|         self.world_1 = self.multiworld.worlds[1]
 | |
|         self.world_2 = self.multiworld.worlds[2]
 | |
| 
 | |
|     def generate_with_options(self, option_value: int):
 | |
|         for option in self.options:
 | |
|             getattr(self.world_1.options, option).value = getattr(self.world_2.options, option).value = option_value
 | |
| 
 | |
|         for step in gen_steps:
 | |
|             call_all(self.multiworld, step)
 | |
|             # this is where locality rules are set in normal generation which we need to verify this test
 | |
|             if step == "set_rules":
 | |
|                 locality_rules(self.multiworld)
 | |
| 
 | |
|     def test_original_dungeons(self):
 | |
|         self.generate_with_options(DungeonItem.option_original_dungeon)
 | |
|         for location in self.multiworld.get_filled_locations():
 | |
|             with (self.subTest(location=location)):
 | |
|                 if location.parent_region.dungeon is None:
 | |
|                     self.assertIs(location.item.dungeon, None)
 | |
|                 else:
 | |
|                     self.assertEqual(location.player, location.item.player,
 | |
|                                      f"{location.item} does not belong to {location}'s player")
 | |
|                     if location.item.dungeon is None:
 | |
|                         continue
 | |
|                     self.assertIs(location.item.dungeon, location.parent_region.dungeon,
 | |
|                                   f"{location.item} was not placed in its original dungeon.")
 | |
| 
 | |
|     def test_own_dungeons(self):
 | |
|         self.generate_with_options(DungeonItem.option_own_dungeons)
 | |
|         for location in self.multiworld.get_filled_locations():
 | |
|             with self.subTest(location=location):
 | |
|                 if location.parent_region.dungeon is None:
 | |
|                     self.assertIs(location.item.dungeon, None)
 | |
|                 else:
 | |
|                     self.assertEqual(location.player, location.item.player,
 | |
|                                      f"{location.item} does not belong to {location}'s player")
 |