61 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			61 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Python
		
	
	
	
import unittest
 | 
						|
from worlds.AutoWorld import AutoWorldRegister
 | 
						|
from . import setup_solo_multiworld
 | 
						|
 | 
						|
 | 
						|
class TestBase(unittest.TestCase):
 | 
						|
    def testCreateItem(self):
 | 
						|
        for game_name, world_type in AutoWorldRegister.world_types.items():
 | 
						|
            proxy_world = world_type(None, 0)  # this is identical to MultiServer.py creating worlds
 | 
						|
            for item_name in world_type.item_name_to_id:
 | 
						|
                with self.subTest("Create Item", item_name=item_name, game_name=game_name):
 | 
						|
                    item = proxy_world.create_item(item_name)
 | 
						|
                    self.assertEqual(item.name, item_name)
 | 
						|
 | 
						|
    def testItemNameGroupHasValidItem(self):
 | 
						|
        """Test that all item name groups contain valid items. """
 | 
						|
        # This cannot test for Event names that you may have declared for logic, only sendable Items.
 | 
						|
        # In such a case, you can add your entries to this Exclusion dict. Game Name -> Group Names
 | 
						|
        exclusion_dict = {
 | 
						|
            "A Link to the Past":
 | 
						|
                {"Pendants", "Crystals"},
 | 
						|
            "Ocarina of Time":
 | 
						|
                {"medallions", "stones", "rewards", "logic_bottles"},
 | 
						|
            "Starcraft 2 Wings of Liberty":
 | 
						|
                {"Missions"},
 | 
						|
        }
 | 
						|
        for game_name, world_type in AutoWorldRegister.world_types.items():
 | 
						|
            with self.subTest(game_name, game_name=game_name):
 | 
						|
                exclusions = exclusion_dict.get(game_name, frozenset())
 | 
						|
                for group_name, items in world_type.item_name_groups.items():
 | 
						|
                    if group_name not in exclusions:
 | 
						|
                        with self.subTest(group_name, group_name=group_name):
 | 
						|
                            for item in items:
 | 
						|
                                self.assertIn(item, world_type.item_name_to_id)
 | 
						|
 | 
						|
    def testItemNameGroupConflict(self):
 | 
						|
        """Test that all item name groups aren't also item names."""
 | 
						|
        for game_name, world_type in AutoWorldRegister.world_types.items():
 | 
						|
            with self.subTest(game_name, game_name=game_name):
 | 
						|
                for group_name in world_type.item_name_groups:
 | 
						|
                    with self.subTest(group_name, group_name=group_name):
 | 
						|
                        self.assertNotIn(group_name, world_type.item_name_to_id)
 | 
						|
 | 
						|
    def testItemCountGreaterEqualLocations(self):
 | 
						|
        for game_name, world_type in AutoWorldRegister.world_types.items():
 | 
						|
            with self.subTest("Game", game=game_name):
 | 
						|
                multiworld = setup_solo_multiworld(world_type)
 | 
						|
                self.assertGreaterEqual(
 | 
						|
                    len(multiworld.itempool),
 | 
						|
                    len(multiworld.get_unfilled_locations()),
 | 
						|
                    f"{game_name} Item count MUST meet or exceed the number of locations",
 | 
						|
                )
 | 
						|
 | 
						|
    def testItemsInDatapackage(self):
 | 
						|
        """Test that any created items in the itempool are in the datapackage"""
 | 
						|
        for game_name, world_type in AutoWorldRegister.world_types.items():
 | 
						|
            with self.subTest("Game", game=game_name):
 | 
						|
                multiworld = setup_solo_multiworld(world_type)
 | 
						|
                for item in multiworld.itempool:
 | 
						|
                    self.assertIn(item.name, world_type.item_name_to_id)
 |