183 lines
7.4 KiB
Python
183 lines
7.4 KiB
Python
from Fill import distribute_items_restrictive
|
|
from ..Data import get_boosts_data
|
|
from . import CivVITestBase
|
|
|
|
|
|
class TestBoostsanityIncluded(CivVITestBase):
|
|
auto_construct = False
|
|
options = {
|
|
"progressive_eras": "true",
|
|
"boostsanity": "true",
|
|
"progression_style": "none",
|
|
"shuffle_goody_hut_rewards": "false",
|
|
}
|
|
|
|
def test_boosts_get_included(self) -> None:
|
|
self.world_setup()
|
|
distribute_items_restrictive(self.multiworld)
|
|
locations = self.multiworld.get_locations(self.player)
|
|
found_locations = 0
|
|
for location in locations:
|
|
if "BOOST" in location.name:
|
|
found_locations += 1
|
|
num_boost_locations = len(get_boosts_data())
|
|
self.assertEqual(found_locations, num_boost_locations)
|
|
|
|
def test_boosts_require_prereqs_no_progressives(self) -> None:
|
|
self.world_setup()
|
|
location = "BOOST_TECH_ADVANCED_BALLISTICS"
|
|
items_to_give = ["Refining", "Electricity", "Apprenticeship", "Industrialization"]
|
|
self.assertFalse(self.can_reach_location(location))
|
|
|
|
for prereq in items_to_give:
|
|
self.collect_by_name(prereq)
|
|
is_last_prereq = prereq == items_to_give[-1]
|
|
self.assertEqual(self.can_reach_location(location), is_last_prereq)
|
|
|
|
|
|
class TestBoostsanityIncludedNoProgressiveDistricts(CivVITestBase):
|
|
auto_construct = False
|
|
options = {
|
|
"progressive_eras": "true",
|
|
"boostsanity": "true",
|
|
"progression_style": "districts_only",
|
|
"shuffle_goody_hut_rewards": "false",
|
|
}
|
|
|
|
def test_boosts_get_included(self) -> None:
|
|
self.world_setup()
|
|
distribute_items_restrictive(self.multiworld)
|
|
locations = self.multiworld.get_locations(self.player)
|
|
found_locations = 0
|
|
for location in locations:
|
|
if "BOOST" in location.name:
|
|
found_locations += 1
|
|
num_boost_locations = len(get_boosts_data())
|
|
self.assertEqual(found_locations, num_boost_locations)
|
|
|
|
|
|
class TestBoostsanityPrereqsWithProgressiveDistricts(CivVITestBase):
|
|
options = {
|
|
"progressive_eras": "true",
|
|
"boostsanity": "true",
|
|
"progression_style": "districts_only",
|
|
"shuffle_goody_hut_rewards": "false",
|
|
}
|
|
|
|
def test_boosts_require_progressive_prereqs_optional(self) -> None:
|
|
location = "BOOST_TECH_NUCLEAR_FUSION"
|
|
items_to_give = ["Progressive Industrial Zone", "Progressive Industrial Zone"]
|
|
|
|
self.assertFalse(self.can_reach_location(location))
|
|
for prereq in items_to_give:
|
|
self.collect_by_name(prereq)
|
|
is_last_prereq = prereq == items_to_give[-1]
|
|
self.assertEqual(self.can_reach_location(location), is_last_prereq)
|
|
|
|
def tests_boosts_require_correct_progressive_district_count(self) -> None:
|
|
location = "BOOST_TECH_RIFLING"
|
|
items_to_give = ["Mining", "Progressive Encampment", "Progressive Encampment"]
|
|
|
|
self.assertFalse(self.can_reach_location(location))
|
|
for prereq in items_to_give:
|
|
self.collect_by_name(prereq)
|
|
is_last_prereq = prereq == items_to_give[-1]
|
|
self.assertEqual(self.can_reach_location(location), is_last_prereq)
|
|
|
|
|
|
class TestBoostsanityExcluded(CivVITestBase):
|
|
auto_construct = False
|
|
options = {
|
|
"progressive_eras": "true",
|
|
"death_link": "true",
|
|
"boostsanity": "false",
|
|
"death_link_effect": "unit_killed",
|
|
"progressive_districts": "true",
|
|
"shuffle_goody_hut_rewards": "false",
|
|
}
|
|
|
|
def test_boosts_are_not_included(self) -> None:
|
|
self.world_setup()
|
|
distribute_items_restrictive(self.multiworld)
|
|
locations = self.multiworld.get_locations(self.player)
|
|
found_locations = 0
|
|
for location in locations:
|
|
if "BOOST" in location.name:
|
|
found_locations += 1
|
|
self.assertEqual(found_locations, 0)
|
|
|
|
|
|
class TestBoostsanityEraRequired(CivVITestBase):
|
|
options = {
|
|
"boostsanity": "true",
|
|
"progression_style": "none",
|
|
"shuffle_goody_hut_rewards": "false",
|
|
}
|
|
|
|
def test_era_required_boosts_not_accessible_early(self) -> None:
|
|
# BOOST_CIVIC_FEUDALISM has EraRequired=True and ERA_CLASSICAL
|
|
# It should NOT be accessible in Ancient era
|
|
self.assertFalse(self.can_reach_location("BOOST_CIVIC_FEUDALISM"))
|
|
|
|
# BOOST_CIVIC_URBANIZATION has EraRequired=True and ERA_INDUSTRIAL
|
|
# It should NOT be accessible in Ancient era
|
|
self.assertFalse(self.can_reach_location("BOOST_CIVIC_URBANIZATION"))
|
|
|
|
# BOOST_CIVIC_SPACE_RACE has EraRequired=True and ERA_ATOMIC
|
|
# It should NOT be accessible in Ancient era
|
|
self.assertFalse(self.can_reach_location("BOOST_CIVIC_SPACE_RACE"))
|
|
|
|
# Regular boosts without EraRequired should be accessible
|
|
self.assertTrue(self.can_reach_location("BOOST_TECH_SAILING"))
|
|
self.assertTrue(self.can_reach_location("BOOST_CIVIC_MILITARY_TRADITION"))
|
|
|
|
def test_era_required_boosts_accessible_in_correct_era(self) -> None:
|
|
# Collect items to reach Classical era
|
|
self.collect_by_name(["Mining", "Bronze Working", "Astrology", "Writing",
|
|
"Irrigation", "Sailing", "Animal Husbandry",
|
|
"State Workforce", "Foreign Trade"])
|
|
|
|
# BOOST_CIVIC_FEUDALISM should now be accessible in Classical era
|
|
self.assertTrue(self.can_reach_location("BOOST_CIVIC_FEUDALISM"))
|
|
|
|
# BOOST_CIVIC_URBANIZATION still not accessible (requires Industrial)
|
|
self.assertFalse(self.can_reach_location("BOOST_CIVIC_URBANIZATION"))
|
|
|
|
# Collect more items to reach Industrial era
|
|
self.collect_all_but(["TECH_ROCKETRY"])
|
|
|
|
# Now BOOST_CIVIC_URBANIZATION should be accessible
|
|
self.assertTrue(self.can_reach_location("BOOST_CIVIC_URBANIZATION"))
|
|
|
|
|
|
class TestBoostsanityEraRequiredWithProgression(CivVITestBase):
|
|
options = {
|
|
"boostsanity": "true",
|
|
"progression_style": "eras_and_districts",
|
|
"shuffle_goody_hut_rewards": "false",
|
|
}
|
|
|
|
def test_era_required_with_progressive_eras(self) -> None:
|
|
# Collect all items except Progressive Era
|
|
self.collect_all_but(["Progressive Era"])
|
|
|
|
# Even with all other items, era-required boosts should not be accessible
|
|
self.assertFalse(self.can_reach_location("BOOST_CIVIC_FEUDALISM"))
|
|
self.assertFalse(self.can_reach_location("BOOST_CIVIC_URBANIZATION"))
|
|
|
|
# Collect enough Progressive Era items to reach Classical (needs 2)
|
|
self.collect(self.get_item_by_name("Progressive Era"))
|
|
self.collect(self.get_item_by_name("Progressive Era"))
|
|
|
|
# BOOST_CIVIC_FEUDALISM should now be accessible
|
|
self.assertTrue(self.can_reach_location("BOOST_CIVIC_FEUDALISM"))
|
|
|
|
# But BOOST_CIVIC_URBANIZATION still requires Industrial era (needs 5 total)
|
|
self.assertFalse(self.can_reach_location("BOOST_CIVIC_URBANIZATION"))
|
|
|
|
# Collect 3 more Progressive Era items to reach Industrial
|
|
self.collect_by_name(["Progressive Era", "Progressive Era", "Progressive Era"])
|
|
|
|
# Now BOOST_CIVIC_URBANIZATION should be accessible
|
|
self.assertTrue(self.can_reach_location("BOOST_CIVIC_URBANIZATION"))
|