 e0e9fdd86a
			
		
	
	e0e9fdd86a
	
	
	
		
			
			Adds HotS, LotV and NCO campaigns to SC2 game. The world's name has changed to reflect that (it's not only Wings of Liberty now) The client was patched in a way that can still join to games generated prior this change --------- Co-authored-by: Magnemania <magnemight@gmail.com> Co-authored-by: EnvyDragon <138727357+EnvyDragon@users.noreply.github.com> Co-authored-by: Matthew <matthew.marinets@gmail.com> Co-authored-by: hopop201 <benjy.hopop201@gmail.com> Co-authored-by: Salzkorn <salzkitty@gmail.com> Co-authored-by: genderdruid <pallyoffail@gmail.com> Co-authored-by: MadiMadsen <137329235+MadiMadsen@users.noreply.github.com> Co-authored-by: neocerber <neocerber@gmail.com> Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com> Co-authored-by: Fabian Dill <Berserker66@users.noreply.github.com>
		
			
				
	
	
		
			90 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			90 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| import unittest
 | |
| 
 | |
| from worlds.AutoWorld import AutoWorldRegister, call_all
 | |
| from . import setup_solo_multiworld
 | |
| 
 | |
| 
 | |
| class TestBase(unittest.TestCase):
 | |
|     def test_create_item(self):
 | |
|         """Test that a world can successfully create all items in its datapackage"""
 | |
|         for game_name, world_type in AutoWorldRegister.world_types.items():
 | |
|             proxy_world = setup_solo_multiworld(world_type, ()).worlds[1]
 | |
|             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 test_item_name_group_has_valid_item(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":
 | |
|                 {"Missions", "WoL 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 test_item_name_group_conflict(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 test_item_count_equal_locations(self):
 | |
|         """Test that by the pre_fill step under default settings, each game submits items == locations"""
 | |
|         for game_name, world_type in AutoWorldRegister.world_types.items():
 | |
|             with self.subTest("Game", game=game_name):
 | |
|                 multiworld = setup_solo_multiworld(world_type)
 | |
|                 self.assertEqual(
 | |
|                     len(multiworld.itempool),
 | |
|                     len(multiworld.get_unfilled_locations()),
 | |
|                     f"{game_name} Item count MUST match the number of locations",
 | |
|                 )
 | |
| 
 | |
|     def test_items_in_datapackage(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)
 | |
| 
 | |
|     def test_item_descriptions_have_valid_names(self):
 | |
|         """Ensure all item descriptions match an item name or item group name"""
 | |
|         for game_name, world_type in AutoWorldRegister.world_types.items():
 | |
|             valid_names = world_type.item_names.union(world_type.item_name_groups)
 | |
|             for name in world_type.item_descriptions:
 | |
|                 with self.subTest("Name should be valid", game=game_name, item=name):
 | |
|                     self.assertIn(name, valid_names,
 | |
|                                   "All item descriptions must match defined item names")
 | |
| 
 | |
|     def test_itempool_not_modified(self):
 | |
|         """Test that worlds don't modify the itempool after `create_items`"""
 | |
|         gen_steps = ("generate_early", "create_regions", "create_items")
 | |
|         additional_steps = ("set_rules", "generate_basic", "pre_fill")
 | |
|         excluded_games = ("Links Awakening DX", "Ocarina of Time", "SMZ3")
 | |
|         worlds_to_test = {game: world
 | |
|                           for game, world in AutoWorldRegister.world_types.items() if game not in excluded_games}
 | |
|         for game_name, world_type in worlds_to_test.items():
 | |
|             with self.subTest("Game", game=game_name):
 | |
|                 multiworld = setup_solo_multiworld(world_type, gen_steps)
 | |
|                 created_items = multiworld.itempool.copy()
 | |
|                 for step in additional_steps:
 | |
|                     with self.subTest("step", step=step):
 | |
|                         call_all(multiworld, step)
 | |
|                         self.assertEqual(created_items, multiworld.itempool,
 | |
|                                          f"{game_name} modified the itempool during {step}")
 |