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