107 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			107 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|   | import unittest | ||
|  | 
 | ||
|  | import NetUtils | ||
|  | from CommonClient import CommonContext | ||
|  | 
 | ||
|  | 
 | ||
|  | class TestCommonContext(unittest.IsolatedAsyncioTestCase): | ||
|  |     async def asyncSetUp(self): | ||
|  |         self.ctx = CommonContext() | ||
|  |         self.ctx.slot = 1  # Pretend we're player 1 for this. | ||
|  |         self.ctx.slot_info.update({ | ||
|  |             1: NetUtils.NetworkSlot("Player 1", "__TestGame1", NetUtils.SlotType.player), | ||
|  |             2: NetUtils.NetworkSlot("Player 2", "__TestGame1", NetUtils.SlotType.player), | ||
|  |             3: NetUtils.NetworkSlot("Player 3", "__TestGame2", NetUtils.SlotType.player), | ||
|  |         }) | ||
|  |         self.ctx.consume_players_package([ | ||
|  |             NetUtils.NetworkPlayer(1, 1, "Player 1", "Player 1"), | ||
|  |             NetUtils.NetworkPlayer(1, 2, "Player 2", "Player 2"), | ||
|  |             NetUtils.NetworkPlayer(1, 3, "Player 3", "Player 3"), | ||
|  |         ]) | ||
|  |         # Using IDs outside the "safe range" for testing purposes only. If this fails unit tests, it's because | ||
|  |         # another world is not following the spec for allowed ID ranges. | ||
|  |         self.ctx.update_data_package({ | ||
|  |             "games": { | ||
|  |                 "__TestGame1": { | ||
|  |                     "location_name_to_id": { | ||
|  |                         "Test Location 1 - Safe": 2**54 + 1, | ||
|  |                         "Test Location 2 - Duplicate": 2**54 + 2, | ||
|  |                     }, | ||
|  |                     "item_name_to_id": { | ||
|  |                         "Test Item 1 - Safe": 2**54 + 1, | ||
|  |                         "Test Item 2 - Duplicate": 2**54 + 2, | ||
|  |                     }, | ||
|  |                 }, | ||
|  |                 "__TestGame2": { | ||
|  |                     "location_name_to_id": { | ||
|  |                         "Test Location 3 - Duplicate": 2**54 + 2, | ||
|  |                     }, | ||
|  |                     "item_name_to_id": { | ||
|  |                         "Test Item 3 - Duplicate": 2**54 + 2, | ||
|  |                     }, | ||
|  |                 }, | ||
|  |             }, | ||
|  |         }) | ||
|  | 
 | ||
|  |     async def test_archipelago_datapackage_lookups_exist(self): | ||
|  |         assert "Archipelago" in self.ctx.item_names, "Archipelago item names entry does not exist" | ||
|  |         assert "Archipelago" in self.ctx.location_names, "Archipelago location names entry does not exist" | ||
|  | 
 | ||
|  |     async def test_implicit_name_lookups(self): | ||
|  |         # Items | ||
|  |         assert self.ctx.item_names[2**54 + 1] == "Test Item 1 - Safe" | ||
|  |         assert self.ctx.item_names[2**54 + 3] == f"Unknown item (ID: {2**54+3})" | ||
|  |         assert self.ctx.item_names[-1] == "Nothing" | ||
|  | 
 | ||
|  |         # Locations | ||
|  |         assert self.ctx.location_names[2**54 + 1] == "Test Location 1 - Safe" | ||
|  |         assert self.ctx.location_names[2**54 + 3] == f"Unknown location (ID: {2**54+3})" | ||
|  |         assert self.ctx.location_names[-1] == "Cheat Console" | ||
|  | 
 | ||
|  |     async def test_explicit_name_lookups(self): | ||
|  |         # Items | ||
|  |         assert self.ctx.item_names["__TestGame1"][2**54+1] == "Test Item 1 - Safe" | ||
|  |         assert self.ctx.item_names["__TestGame1"][2**54+2] == "Test Item 2 - Duplicate" | ||
|  |         assert self.ctx.item_names["__TestGame1"][2**54+3] == f"Unknown item (ID: {2**54+3})" | ||
|  |         assert self.ctx.item_names["__TestGame1"][-1] == "Nothing" | ||
|  |         assert self.ctx.item_names["__TestGame2"][2**54+1] == f"Unknown item (ID: {2**54+1})" | ||
|  |         assert self.ctx.item_names["__TestGame2"][2**54+2] == "Test Item 3 - Duplicate" | ||
|  |         assert self.ctx.item_names["__TestGame2"][2**54+3] == f"Unknown item (ID: {2**54+3})" | ||
|  |         assert self.ctx.item_names["__TestGame2"][-1] == "Nothing" | ||
|  | 
 | ||
|  |         # Locations | ||
|  |         assert self.ctx.location_names["__TestGame1"][2**54+1] == "Test Location 1 - Safe" | ||
|  |         assert self.ctx.location_names["__TestGame1"][2**54+2] == "Test Location 2 - Duplicate" | ||
|  |         assert self.ctx.location_names["__TestGame1"][2**54+3] == f"Unknown location (ID: {2**54+3})" | ||
|  |         assert self.ctx.location_names["__TestGame1"][-1] == "Cheat Console" | ||
|  |         assert self.ctx.location_names["__TestGame2"][2**54+1] == f"Unknown location (ID: {2**54+1})" | ||
|  |         assert self.ctx.location_names["__TestGame2"][2**54+2] == "Test Location 3 - Duplicate" | ||
|  |         assert self.ctx.location_names["__TestGame2"][2**54+3] == f"Unknown location (ID: {2**54+3})" | ||
|  |         assert self.ctx.location_names["__TestGame2"][-1] == "Cheat Console" | ||
|  | 
 | ||
|  |     async def test_lookup_helper_functions(self): | ||
|  |         # Checking own slot. | ||
|  |         assert self.ctx.item_names.lookup_in_slot(2 ** 54 + 1) == "Test Item 1 - Safe" | ||
|  |         assert self.ctx.item_names.lookup_in_slot(2 ** 54 + 2) == "Test Item 2 - Duplicate" | ||
|  |         assert self.ctx.item_names.lookup_in_slot(2 ** 54 + 3) == f"Unknown item (ID: {2 ** 54 + 3})" | ||
|  |         assert self.ctx.item_names.lookup_in_slot(-1) == f"Nothing" | ||
|  | 
 | ||
|  |         # Checking others' slots. | ||
|  |         assert self.ctx.item_names.lookup_in_slot(2 ** 54 + 1, 2) == "Test Item 1 - Safe" | ||
|  |         assert self.ctx.item_names.lookup_in_slot(2 ** 54 + 2, 2) == "Test Item 2 - Duplicate" | ||
|  |         assert self.ctx.item_names.lookup_in_slot(2 ** 54 + 1, 3) == f"Unknown item (ID: {2 ** 54 + 1})" | ||
|  |         assert self.ctx.item_names.lookup_in_slot(2 ** 54 + 2, 3) == "Test Item 3 - Duplicate" | ||
|  | 
 | ||
|  |         # Checking by game. | ||
|  |         assert self.ctx.item_names.lookup_in_game(2 ** 54 + 1, "__TestGame1") == "Test Item 1 - Safe" | ||
|  |         assert self.ctx.item_names.lookup_in_game(2 ** 54 + 2, "__TestGame1") == "Test Item 2 - Duplicate" | ||
|  |         assert self.ctx.item_names.lookup_in_game(2 ** 54 + 3, "__TestGame1") == f"Unknown item (ID: {2 ** 54 + 3})" | ||
|  |         assert self.ctx.item_names.lookup_in_game(2 ** 54 + 1, "__TestGame2") == f"Unknown item (ID: {2 ** 54 + 1})" | ||
|  |         assert self.ctx.item_names.lookup_in_game(2 ** 54 + 2, "__TestGame2") == "Test Item 3 - Duplicate" | ||
|  | 
 | ||
|  |         # Checking with Archipelago ids are valid in any game package. | ||
|  |         assert self.ctx.item_names.lookup_in_slot(-1, 2) == "Nothing" | ||
|  |         assert self.ctx.item_names.lookup_in_slot(-1, 3) == "Nothing" | ||
|  |         assert self.ctx.item_names.lookup_in_game(-1, "__TestGame1") == "Nothing" | ||
|  |         assert self.ctx.item_names.lookup_in_game(-1, "__TestGame2") == "Nothing" |