53 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			53 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|   | import unittest | ||
|  | from unittest.mock import Mock | ||
|  | 
 | ||
|  | from .. import SVTestBase, create_args, allsanity_mods_6_x_x | ||
|  | from ... import STARDEW_VALLEY, FarmType, BundleRandomization, EntranceRandomization | ||
|  | 
 | ||
|  | 
 | ||
|  | class TestUniversalTrackerGenerationIsStable(SVTestBase): | ||
|  |     options = allsanity_mods_6_x_x() | ||
|  |     options.update({ | ||
|  |         EntranceRandomization.internal_name: EntranceRandomization.option_buildings, | ||
|  |         BundleRandomization.internal_name: BundleRandomization.option_shuffled, | ||
|  |         FarmType.internal_name: FarmType.option_standard,  # Need to choose one  otherwise it's random | ||
|  |     }) | ||
|  | 
 | ||
|  |     def test_all_locations_and_items_are_the_same_between_two_generations(self): | ||
|  |         # This might open a kivy window temporarily, but it's the only way to test this... | ||
|  |         if self.skip_long_tests: | ||
|  |             raise unittest.SkipTest("Long tests disabled") | ||
|  | 
 | ||
|  |         try: | ||
|  |             # This test only run if UT is present, so no risk of running in the CI. | ||
|  |             from worlds.tracker.TrackerClient import TrackerGameContext  # noqa | ||
|  |         except ImportError: | ||
|  |             raise unittest.SkipTest("UT not loaded, skipping test") | ||
|  | 
 | ||
|  |         slot_data = self.world.fill_slot_data() | ||
|  |         ut_data = self.world.interpret_slot_data(slot_data) | ||
|  | 
 | ||
|  |         fake_context = Mock() | ||
|  |         fake_context.re_gen_passthrough = {STARDEW_VALLEY: ut_data} | ||
|  |         args = create_args({0: self.options}) | ||
|  |         args.outputpath = None | ||
|  |         args.outputname = None | ||
|  |         args.multi = 1 | ||
|  |         args.race = None | ||
|  |         args.plando_options = self.multiworld.plando_options | ||
|  |         args.plando_items = self.multiworld.plando_items | ||
|  |         args.plando_texts = self.multiworld.plando_texts | ||
|  |         args.plando_connections = self.multiworld.plando_connections | ||
|  |         args.game = self.multiworld.game | ||
|  |         args.name = self.multiworld.player_name | ||
|  |         args.sprite = {} | ||
|  |         args.sprite_pool = {} | ||
|  |         args.skip_output = True | ||
|  | 
 | ||
|  |         generated_multi_world = TrackerGameContext.TMain(fake_context, args, self.multiworld.seed) | ||
|  |         generated_slot_data = generated_multi_world.worlds[1].fill_slot_data() | ||
|  | 
 | ||
|  |         # Just checking slot data should prove that UT generates the same result as AP generation. | ||
|  |         self.maxDiff = None | ||
|  |         self.assertEqual(slot_data, generated_slot_data) |