126 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			126 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 
								 | 
							
								from BaseClasses import ItemClassification
							 | 
						||
| 
								 | 
							
								from Fill import distribute_items_restrictive
							 | 
						||
| 
								 | 
							
								from ..Enum import CivVICheckType
							 | 
						||
| 
								 | 
							
								from . import CivVITestBase
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class TestStartingHints(CivVITestBase):
							 | 
						||
| 
								 | 
							
								    run_default_tests = False  # type: ignore
							 | 
						||
| 
								 | 
							
								    auto_construct = False
							 | 
						||
| 
								 | 
							
								    options = {
							 | 
						||
| 
								 | 
							
								        "progressive_eras": "true",
							 | 
						||
| 
								 | 
							
								        "death_link": "true",
							 | 
						||
| 
								 | 
							
								        "death_link_effect": "unit_killed",
							 | 
						||
| 
								 | 
							
								        "progressive_districts": "true",
							 | 
						||
| 
								 | 
							
								        "pre_hint_items": set({"Progression", "Useful", "Filler"}),
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def test_all_tech_civic_items_are_hinted_default(self) -> None:
							 | 
						||
| 
								 | 
							
								        self.world_setup()
							 | 
						||
| 
								 | 
							
								        distribute_items_restrictive(self.multiworld)
							 | 
						||
| 
								 | 
							
								        self.world.post_fill()
							 | 
						||
| 
								 | 
							
								        start_location_hints = self.world.options.start_location_hints.value
							 | 
						||
| 
								 | 
							
								        for location_name, location_data in self.world.location_table.items():
							 | 
						||
| 
								 | 
							
								            if location_data.location_type == CivVICheckType.CIVIC or location_data.location_type == CivVICheckType.TECH:
							 | 
						||
| 
								 | 
							
								                self.assertIn(location_name, start_location_hints)
							 | 
						||
| 
								 | 
							
								            else:
							 | 
						||
| 
								 | 
							
								                self.assertNotIn(location_name, start_location_hints)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class TestOnlyProgressionItemsHinted(CivVITestBase):
							 | 
						||
| 
								 | 
							
								    run_default_tests = False  # type: ignore
							 | 
						||
| 
								 | 
							
								    auto_construct = False
							 | 
						||
| 
								 | 
							
								    options = {
							 | 
						||
| 
								 | 
							
								        "progressive_eras": "true",
							 | 
						||
| 
								 | 
							
								        "death_link": "true",
							 | 
						||
| 
								 | 
							
								        "death_link_effect": "unit_killed",
							 | 
						||
| 
								 | 
							
								        "progressive_districts": "true",
							 | 
						||
| 
								 | 
							
								        "pre_hint_items": set({"Progression"}),
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def test_only_progression_items_are_hinted(self) -> None:
							 | 
						||
| 
								 | 
							
								        self.world_setup()
							 | 
						||
| 
								 | 
							
								        distribute_items_restrictive(self.multiworld)
							 | 
						||
| 
								 | 
							
								        self.world.post_fill()
							 | 
						||
| 
								 | 
							
								        start_location_hints = self.world.options.start_location_hints.value
							 | 
						||
| 
								 | 
							
								        self.assertTrue(len(start_location_hints) > 0)
							 | 
						||
| 
								 | 
							
								        for hint in start_location_hints:
							 | 
						||
| 
								 | 
							
								            location_data = self.world.get_location(hint)
							 | 
						||
| 
								 | 
							
								            if location_data.item:
							 | 
						||
| 
								 | 
							
								                self.assertTrue(location_data.item.classification == ItemClassification.progression)
							 | 
						||
| 
								 | 
							
								            else:
							 | 
						||
| 
								 | 
							
								                self.assertTrue(False, "Location has no item")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class TestNoJunkItemsHinted(CivVITestBase):
							 | 
						||
| 
								 | 
							
								    run_default_tests = False  # type: ignore
							 | 
						||
| 
								 | 
							
								    auto_construct = False
							 | 
						||
| 
								 | 
							
								    options = {
							 | 
						||
| 
								 | 
							
								        "progressive_eras": "true",
							 | 
						||
| 
								 | 
							
								        "death_link": "true",
							 | 
						||
| 
								 | 
							
								        "death_link_effect": "unit_killed",
							 | 
						||
| 
								 | 
							
								        "progressive_districts": "true",
							 | 
						||
| 
								 | 
							
								        "pre_hint_items": set({"Progression", "Useful"}),
							 | 
						||
| 
								 | 
							
								        "boostsanity": "true",
							 | 
						||
| 
								 | 
							
								        "shuffle_goody_hut_rewards": "true",
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def test_no_junk_items_are_hinted(self) -> None:
							 | 
						||
| 
								 | 
							
								        self.world_setup()
							 | 
						||
| 
								 | 
							
								        distribute_items_restrictive(self.multiworld)
							 | 
						||
| 
								 | 
							
								        item = self.multiworld.get_location("TECH_AP_ANCIENT_01", self.player).item
							 | 
						||
| 
								 | 
							
								        self.assertIsNotNone(item)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if item:
							 | 
						||
| 
								 | 
							
								            item.classification = ItemClassification.filler
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.world.post_fill()
							 | 
						||
| 
								 | 
							
								        start_location_hints = self.world.options.start_location_hints.value
							 | 
						||
| 
								 | 
							
								        self.assertTrue(len(start_location_hints) > 0)
							 | 
						||
| 
								 | 
							
								        self.assertNotIn("TECH_AP_ANCIENT_01", start_location_hints)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class TestOnlyJunkItemsHinted(CivVITestBase):
							 | 
						||
| 
								 | 
							
								    run_default_tests = False  # type: ignore
							 | 
						||
| 
								 | 
							
								    auto_construct = False
							 | 
						||
| 
								 | 
							
								    options = {
							 | 
						||
| 
								 | 
							
								        "progressive_eras": "true",
							 | 
						||
| 
								 | 
							
								        "death_link": "true",
							 | 
						||
| 
								 | 
							
								        "death_link_effect": "unit_killed",
							 | 
						||
| 
								 | 
							
								        "progressive_districts": "true",
							 | 
						||
| 
								 | 
							
								        "pre_hint_items": set({"Filler"}),
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def test_only_junk_items_are_hinted(self) -> None:
							 | 
						||
| 
								 | 
							
								        self.world_setup()
							 | 
						||
| 
								 | 
							
								        distribute_items_restrictive(self.multiworld)
							 | 
						||
| 
								 | 
							
								        item = self.multiworld.get_location("TECH_AP_ANCIENT_01", self.player).item
							 | 
						||
| 
								 | 
							
								        self.assertIsNotNone(item)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if item:
							 | 
						||
| 
								 | 
							
								            item.classification = ItemClassification.filler
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.world.post_fill()
							 | 
						||
| 
								 | 
							
								        start_location_hints = self.world.options.start_location_hints.value
							 | 
						||
| 
								 | 
							
								        self.assertEqual(len(start_location_hints), 1)
							 | 
						||
| 
								 | 
							
								        self.assertIn("TECH_AP_ANCIENT_01", start_location_hints)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class TestNoItemsHinted(CivVITestBase):
							 | 
						||
| 
								 | 
							
								    run_default_tests = False  # type: ignore
							 | 
						||
| 
								 | 
							
								    auto_construct = False
							 | 
						||
| 
								 | 
							
								    options = {
							 | 
						||
| 
								 | 
							
								        "progressive_eras": "true",
							 | 
						||
| 
								 | 
							
								        "death_link": "true",
							 | 
						||
| 
								 | 
							
								        "death_link_effect": "unit_killed",
							 | 
						||
| 
								 | 
							
								        "progressive_districts": "true",
							 | 
						||
| 
								 | 
							
								        "pre_hint_items": set({}),
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def test_no_items_are_hinted(self) -> None:
							 | 
						||
| 
								 | 
							
								        self.world_setup()
							 | 
						||
| 
								 | 
							
								        distribute_items_restrictive(self.multiworld)
							 | 
						||
| 
								 | 
							
								        self.world.post_fill()
							 | 
						||
| 
								 | 
							
								        start_location_hints = self.world.options.start_location_hints.value
							 | 
						||
| 
								 | 
							
								        self.assertEqual(len(start_location_hints), 0)
							 |