47 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			47 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|   | import random | ||
|  | import sys | ||
|  | import unittest | ||
|  | 
 | ||
|  | from .. import StardewOptions, options | ||
|  | from ..regions import stardew_valley_regions, mandatory_connections, randomize_connections, RandomizationFlag | ||
|  | 
 | ||
|  | connections_by_name = {connection.name for connection in mandatory_connections} | ||
|  | regions_by_name = {region.name for region in stardew_valley_regions} | ||
|  | 
 | ||
|  | 
 | ||
|  | class TestRegions(unittest.TestCase): | ||
|  |     def test_region_exits_lead_somewhere(self): | ||
|  |         for region in stardew_valley_regions: | ||
|  |             with self.subTest(region=region): | ||
|  |                 for exit in region.exits: | ||
|  |                     assert exit in connections_by_name, f"{region.name} is leading to {exit} but it does not exist." | ||
|  | 
 | ||
|  |     def test_connection_lead_somewhere(self): | ||
|  |         for connection in mandatory_connections: | ||
|  |             with self.subTest(connection=connection): | ||
|  |                 assert connection.destination in regions_by_name, \ | ||
|  |                     f"{connection.name} is leading to {connection.destination} but it does not exist." | ||
|  | 
 | ||
|  | 
 | ||
|  | class TestEntranceRando(unittest.TestCase): | ||
|  | 
 | ||
|  |     def test_pelican_town_entrance_randomization(self): | ||
|  |         for option, flag in [(options.EntranceRandomization.option_pelican_town, RandomizationFlag.PELICAN_TOWN), | ||
|  |                              (options.EntranceRandomization.option_non_progression, RandomizationFlag.NON_PROGRESSION)]: | ||
|  |             with self.subTest(option=option, flag=flag): | ||
|  |                 seed = random.randrange(sys.maxsize) | ||
|  |                 rand = random.Random(seed) | ||
|  |                 world_options = StardewOptions({options.EntranceRandomization.internal_name: option}) | ||
|  | 
 | ||
|  |                 _, randomized_connections = randomize_connections(rand, world_options) | ||
|  | 
 | ||
|  |                 for connection in mandatory_connections: | ||
|  |                     if flag in connection.flag: | ||
|  |                         assert connection.name in randomized_connections, \ | ||
|  |                             f"Connection {connection.name} should be randomized but it is not in the output. Seed = {seed}" | ||
|  |                         assert connection.reverse in randomized_connections, \ | ||
|  |                             f"Connection {connection.reverse} should be randomized but it is not in the output. Seed = {seed}" | ||
|  | 
 | ||
|  |                 assert len(set(randomized_connections.values())) == len( | ||
|  |                     randomized_connections.values()), f"Connections are duplicated in randomization. Seed = {seed}" |