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")
 |