The Messenger: Make modules and tests PEP8 (#2276)
* The Messenger: PEP8 module and test names * fix dumb * whitespace
This commit is contained in:
		
							parent
							
								
									cc2247bfa0
								
							
						
					
					
						commit
						6f9484f375
					
				| 
						 | 
					@ -1,14 +1,14 @@
 | 
				
			||||||
import logging
 | 
					import logging
 | 
				
			||||||
from typing import Dict, Any, List, Optional
 | 
					from typing import Any, Dict, List, Optional
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from BaseClasses import Tutorial, ItemClassification, CollectionState, Item, MultiWorld
 | 
					from BaseClasses import CollectionState, Item, ItemClassification, Tutorial
 | 
				
			||||||
from worlds.AutoWorld import World, WebWorld
 | 
					from worlds.AutoWorld import WebWorld, World
 | 
				
			||||||
from .Constants import NOTES, PHOBEKINS, ALL_ITEMS, ALWAYS_LOCATIONS, BOSS_LOCATIONS, FILLER
 | 
					from .constants import ALL_ITEMS, ALWAYS_LOCATIONS, BOSS_LOCATIONS, FILLER, NOTES, PHOBEKINS
 | 
				
			||||||
from .Options import messenger_options, NotesNeeded, Goal, PowerSeals, Logic
 | 
					from .options import Goal, Logic, NotesNeeded, PowerSeals, messenger_options
 | 
				
			||||||
from .Regions import REGIONS, REGION_CONNECTIONS, SEALS, MEGA_SHARDS
 | 
					from .regions import MEGA_SHARDS, REGIONS, REGION_CONNECTIONS, SEALS
 | 
				
			||||||
from .Shop import SHOP_ITEMS, shuffle_shop_prices, FIGURINES
 | 
					from .rules import MessengerHardRules, MessengerOOBRules, MessengerRules
 | 
				
			||||||
from .SubClasses import MessengerRegion, MessengerItem
 | 
					from .shop import FIGURINES, SHOP_ITEMS, shuffle_shop_prices
 | 
				
			||||||
from . import Rules
 | 
					from .subclasses import MessengerItem, MessengerRegion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class MessengerWeb(WebWorld):
 | 
					class MessengerWeb(WebWorld):
 | 
				
			||||||
| 
						 | 
					@ -68,15 +68,11 @@ class MessengerWorld(World):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    total_seals: int = 0
 | 
					    total_seals: int = 0
 | 
				
			||||||
    required_seals: int = 0
 | 
					    required_seals: int = 0
 | 
				
			||||||
    total_shards: int
 | 
					    total_shards: int = 0
 | 
				
			||||||
    shop_prices: Dict[str, int]
 | 
					    shop_prices: Dict[str, int]
 | 
				
			||||||
    figurine_prices: Dict[str, int]
 | 
					    figurine_prices: Dict[str, int]
 | 
				
			||||||
    _filler_items: List[str]
 | 
					    _filler_items: List[str]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def __init__(self, multiworld: MultiWorld, player: int):
 | 
					 | 
				
			||||||
        super().__init__(multiworld, player)
 | 
					 | 
				
			||||||
        self.total_shards = 0
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def generate_early(self) -> None:
 | 
					    def generate_early(self) -> None:
 | 
				
			||||||
        if self.multiworld.goal[self.player] == Goal.option_power_seal_hunt:
 | 
					        if self.multiworld.goal[self.player] == Goal.option_power_seal_hunt:
 | 
				
			||||||
            self.multiworld.shuffle_seals[self.player].value = PowerSeals.option_true
 | 
					            self.multiworld.shuffle_seals[self.player].value = PowerSeals.option_true
 | 
				
			||||||
| 
						 | 
					@ -144,11 +140,11 @@ class MessengerWorld(World):
 | 
				
			||||||
    def set_rules(self) -> None:
 | 
					    def set_rules(self) -> None:
 | 
				
			||||||
        logic = self.multiworld.logic_level[self.player]
 | 
					        logic = self.multiworld.logic_level[self.player]
 | 
				
			||||||
        if logic == Logic.option_normal:
 | 
					        if logic == Logic.option_normal:
 | 
				
			||||||
            Rules.MessengerRules(self).set_messenger_rules()
 | 
					            MessengerRules(self).set_messenger_rules()
 | 
				
			||||||
        elif logic == Logic.option_hard:
 | 
					        elif logic == Logic.option_hard:
 | 
				
			||||||
            Rules.MessengerHardRules(self).set_messenger_rules()
 | 
					            MessengerHardRules(self).set_messenger_rules()
 | 
				
			||||||
        else:
 | 
					        else:
 | 
				
			||||||
            Rules.MessengerOOBRules(self).set_messenger_rules()
 | 
					            MessengerOOBRules(self).set_messenger_rules()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def fill_slot_data(self) -> Dict[str, Any]:
 | 
					    def fill_slot_data(self) -> Dict[str, Any]:
 | 
				
			||||||
        shop_prices = {SHOP_ITEMS[item].internal_name: price for item, price in self.shop_prices.items()}
 | 
					        shop_prices = {SHOP_ITEMS[item].internal_name: price for item, price in self.shop_prices.items()}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,6 @@
 | 
				
			||||||
# items
 | 
					# items
 | 
				
			||||||
# listing individual groups first for easy lookup
 | 
					# listing individual groups first for easy lookup
 | 
				
			||||||
from .Shop import SHOP_ITEMS, FIGURINES
 | 
					from .shop import SHOP_ITEMS, FIGURINES
 | 
				
			||||||
 | 
					
 | 
				
			||||||
NOTES = [
 | 
					NOTES = [
 | 
				
			||||||
    "Key of Hope",
 | 
					    "Key of Hope",
 | 
				
			||||||
| 
						 | 
					@ -2,9 +2,9 @@ from typing import Dict, Callable, TYPE_CHECKING
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from BaseClasses import CollectionState, MultiWorld
 | 
					from BaseClasses import CollectionState, MultiWorld
 | 
				
			||||||
from worlds.generic.Rules import set_rule, allow_self_locking_items, add_rule
 | 
					from worlds.generic.Rules import set_rule, allow_self_locking_items, add_rule
 | 
				
			||||||
from .Options import MessengerAccessibility, Goal
 | 
					from .options import MessengerAccessibility, Goal
 | 
				
			||||||
from .Constants import NOTES, PHOBEKINS
 | 
					from .constants import NOTES, PHOBEKINS
 | 
				
			||||||
from .SubClasses import MessengerShopLocation
 | 
					from .subclasses import MessengerShopLocation
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if TYPE_CHECKING:
 | 
					if TYPE_CHECKING:
 | 
				
			||||||
    from . import MessengerWorld
 | 
					    from . import MessengerWorld
 | 
				
			||||||
| 
						 | 
					@ -119,7 +119,7 @@ class MessengerRules:
 | 
				
			||||||
    def can_dboost(self, state: CollectionState) -> bool:
 | 
					    def can_dboost(self, state: CollectionState) -> bool:
 | 
				
			||||||
        return state.has_any({"Path of Resilience", "Meditation"}, self.player) and \
 | 
					        return state.has_any({"Path of Resilience", "Meditation"}, self.player) and \
 | 
				
			||||||
            state.has("Second Wind", self.player)
 | 
					            state.has("Second Wind", self.player)
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
    def is_aerobatic(self, state: CollectionState) -> bool:
 | 
					    def is_aerobatic(self, state: CollectionState) -> bool:
 | 
				
			||||||
        return self.has_wingsuit(state) and state.has("Aerobatics Warrior", self.player)
 | 
					        return self.has_wingsuit(state) and state.has("Aerobatics Warrior", self.player)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,10 +2,10 @@ from functools import cached_property
 | 
				
			||||||
from typing import Optional, TYPE_CHECKING, cast
 | 
					from typing import Optional, TYPE_CHECKING, cast
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from BaseClasses import CollectionState, Item, ItemClassification, Location, Region
 | 
					from BaseClasses import CollectionState, Item, ItemClassification, Location, Region
 | 
				
			||||||
from .Constants import NOTES, PHOBEKINS, PROG_ITEMS, USEFUL_ITEMS
 | 
					from .constants import NOTES, PHOBEKINS, PROG_ITEMS, USEFUL_ITEMS
 | 
				
			||||||
from .Options import Goal
 | 
					from .options import Goal
 | 
				
			||||||
from .Regions import MEGA_SHARDS, REGIONS, SEALS
 | 
					from .regions import MEGA_SHARDS, REGIONS, SEALS
 | 
				
			||||||
from .Shop import FIGURINES, PROG_SHOP_ITEMS, SHOP_ITEMS, USEFUL_SHOP_ITEMS
 | 
					from .shop import FIGURINES, PROG_SHOP_ITEMS, SHOP_ITEMS, USEFUL_SHOP_ITEMS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if TYPE_CHECKING:
 | 
					if TYPE_CHECKING:
 | 
				
			||||||
    from . import MessengerWorld
 | 
					    from . import MessengerWorld
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
from . import MessengerTestBase
 | 
					from . import MessengerTestBase
 | 
				
			||||||
from ..Constants import NOTES, PHOBEKINS
 | 
					from ..constants import NOTES, PHOBEKINS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class AccessTest(MessengerTestBase):
 | 
					class AccessTest(MessengerTestBase):
 | 
				
			||||||
| 
						 | 
					@ -7,7 +7,7 @@ class AccessTest(MessengerTestBase):
 | 
				
			||||||
        "shuffle_shards": "true",
 | 
					        "shuffle_shards": "true",
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def testTabi(self) -> None:
 | 
					    def test_tabi(self) -> None:
 | 
				
			||||||
        """locations that hard require the Lightfoot Tabi"""
 | 
					        """locations that hard require the Lightfoot Tabi"""
 | 
				
			||||||
        locations = [
 | 
					        locations = [
 | 
				
			||||||
            "Searing Crags - Pyro", "Underworld - Key of Chaos", "Underworld Seal - Sharp and Windy Climb",
 | 
					            "Searing Crags - Pyro", "Underworld - Key of Chaos", "Underworld Seal - Sharp and Windy Climb",
 | 
				
			||||||
| 
						 | 
					@ -19,7 +19,7 @@ class AccessTest(MessengerTestBase):
 | 
				
			||||||
        items = [["Lightfoot Tabi"]]
 | 
					        items = [["Lightfoot Tabi"]]
 | 
				
			||||||
        self.assertAccessDependency(locations, items)
 | 
					        self.assertAccessDependency(locations, items)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def testDart(self) -> None:
 | 
					    def test_dart(self) -> None:
 | 
				
			||||||
        """locations that hard require the Rope Dart"""
 | 
					        """locations that hard require the Rope Dart"""
 | 
				
			||||||
        locations = [
 | 
					        locations = [
 | 
				
			||||||
            "Ninja Village Seal - Tree House", "Autumn Hills - Key of Hope", "Howling Grotto Seal - Crushing Pits",
 | 
					            "Ninja Village Seal - Tree House", "Autumn Hills - Key of Hope", "Howling Grotto Seal - Crushing Pits",
 | 
				
			||||||
| 
						 | 
					@ -31,7 +31,7 @@ class AccessTest(MessengerTestBase):
 | 
				
			||||||
        items = [["Rope Dart"]]
 | 
					        items = [["Rope Dart"]]
 | 
				
			||||||
        self.assertAccessDependency(locations, items)
 | 
					        self.assertAccessDependency(locations, items)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def testWingsuit(self) -> None:
 | 
					    def test_wingsuit(self) -> None:
 | 
				
			||||||
        """locations that hard require the Wingsuit"""
 | 
					        """locations that hard require the Wingsuit"""
 | 
				
			||||||
        locations = [
 | 
					        locations = [
 | 
				
			||||||
            "Ninja Village - Candle", "Ninja Village Seal - Tree House", "Autumn Hills - Climbing Claws",
 | 
					            "Ninja Village - Candle", "Ninja Village Seal - Tree House", "Autumn Hills - Climbing Claws",
 | 
				
			||||||
| 
						 | 
					@ -57,7 +57,7 @@ class AccessTest(MessengerTestBase):
 | 
				
			||||||
        items = [["Wingsuit"]]
 | 
					        items = [["Wingsuit"]]
 | 
				
			||||||
        self.assertAccessDependency(locations, items)
 | 
					        self.assertAccessDependency(locations, items)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def testVertical(self) -> None:
 | 
					    def test_vertical(self) -> None:
 | 
				
			||||||
        """locations that require either the Rope Dart or the Wingsuit"""
 | 
					        """locations that require either the Rope Dart or the Wingsuit"""
 | 
				
			||||||
        locations = [
 | 
					        locations = [
 | 
				
			||||||
            "Ninja Village Seal - Tree House", "Howling Grotto Seal - Crushing Pits",
 | 
					            "Ninja Village Seal - Tree House", "Howling Grotto Seal - Crushing Pits",
 | 
				
			||||||
| 
						 | 
					@ -92,7 +92,7 @@ class AccessTest(MessengerTestBase):
 | 
				
			||||||
        items = [["Wingsuit", "Rope Dart"]]
 | 
					        items = [["Wingsuit", "Rope Dart"]]
 | 
				
			||||||
        self.assertAccessDependency(locations, items)
 | 
					        self.assertAccessDependency(locations, items)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def testAmulet(self) -> None:
 | 
					    def test_amulet(self) -> None:
 | 
				
			||||||
        """Locations that require Ruxxtin's Amulet"""
 | 
					        """Locations that require Ruxxtin's Amulet"""
 | 
				
			||||||
        locations = [
 | 
					        locations = [
 | 
				
			||||||
            "Cloud Ruins - Acro", "Cloud Ruins Seal - Ghost Pit", "Cloud Ruins Seal - Toothbrush Alley",
 | 
					            "Cloud Ruins - Acro", "Cloud Ruins Seal - Ghost Pit", "Cloud Ruins Seal - Toothbrush Alley",
 | 
				
			||||||
| 
						 | 
					@ -103,7 +103,7 @@ class AccessTest(MessengerTestBase):
 | 
				
			||||||
        items = [["Ruxxtin's Amulet"]]
 | 
					        items = [["Ruxxtin's Amulet"]]
 | 
				
			||||||
        self.assertAccessDependency(locations, items)
 | 
					        self.assertAccessDependency(locations, items)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def testFirefly(self) -> None:
 | 
					    def test_firefly(self) -> None:
 | 
				
			||||||
        """Elemental Skylands and Corrupted Future require the Magic Firefly"""
 | 
					        """Elemental Skylands and Corrupted Future require the Magic Firefly"""
 | 
				
			||||||
        locations = [
 | 
					        locations = [
 | 
				
			||||||
            "Elemental Skylands - Key of Symbiosis", "Elemental Skylands Seal - Air", "Elemental Skylands Seal - Fire",
 | 
					            "Elemental Skylands - Key of Symbiosis", "Elemental Skylands Seal - Air", "Elemental Skylands Seal - Fire",
 | 
				
			||||||
| 
						 | 
					@ -113,7 +113,7 @@ class AccessTest(MessengerTestBase):
 | 
				
			||||||
        items = [["Magic Firefly"]]
 | 
					        items = [["Magic Firefly"]]
 | 
				
			||||||
        self.assertAccessDependency(locations, items)
 | 
					        self.assertAccessDependency(locations, items)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def testCrests(self) -> None:
 | 
					    def test_crests(self) -> None:
 | 
				
			||||||
        """Test Key of Love nonsense"""
 | 
					        """Test Key of Love nonsense"""
 | 
				
			||||||
        locations = ["Sunken Shrine - Key of Love"]
 | 
					        locations = ["Sunken Shrine - Key of Love"]
 | 
				
			||||||
        items = [["Sun Crest", "Moon Crest"]]
 | 
					        items = [["Sun Crest", "Moon Crest"]]
 | 
				
			||||||
| 
						 | 
					@ -124,19 +124,19 @@ class AccessTest(MessengerTestBase):
 | 
				
			||||||
        self.collect_by_name("Sun Crest")
 | 
					        self.collect_by_name("Sun Crest")
 | 
				
			||||||
        self.assertEqual(self.can_reach_location("Sunken Shrine - Key of Love"), False)
 | 
					        self.assertEqual(self.can_reach_location("Sunken Shrine - Key of Love"), False)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def testThistle(self) -> None:
 | 
					    def test_thistle(self) -> None:
 | 
				
			||||||
        """I'm a chuckster!"""
 | 
					        """I'm a chuckster!"""
 | 
				
			||||||
        locations = ["Searing Crags - Key of Strength"]
 | 
					        locations = ["Searing Crags - Key of Strength"]
 | 
				
			||||||
        items = [["Power Thistle"]]
 | 
					        items = [["Power Thistle"]]
 | 
				
			||||||
        self.assertAccessDependency(locations, items)
 | 
					        self.assertAccessDependency(locations, items)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def testCrown(self) -> None:
 | 
					    def test_crown(self) -> None:
 | 
				
			||||||
        """Crocomire but not"""
 | 
					        """Crocomire but not"""
 | 
				
			||||||
        locations = ["Corrupted Future - Key of Courage"]
 | 
					        locations = ["Corrupted Future - Key of Courage"]
 | 
				
			||||||
        items = [["Demon King Crown"]]
 | 
					        items = [["Demon King Crown"]]
 | 
				
			||||||
        self.assertAccessDependency(locations, items)
 | 
					        self.assertAccessDependency(locations, items)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def testGoal(self) -> None:
 | 
					    def test_goal(self) -> None:
 | 
				
			||||||
        """Test some different states to verify goal requires the correct items"""
 | 
					        """Test some different states to verify goal requires the correct items"""
 | 
				
			||||||
        self.collect_all_but([*NOTES, "Rescue Phantom"])
 | 
					        self.collect_all_but([*NOTES, "Rescue Phantom"])
 | 
				
			||||||
        self.assertEqual(self.can_reach_location("Rescue Phantom"), False)
 | 
					        self.assertEqual(self.can_reach_location("Rescue Phantom"), False)
 | 
				
			||||||
| 
						 | 
					@ -153,7 +153,7 @@ class ItemsAccessTest(MessengerTestBase):
 | 
				
			||||||
        "accessibility": "items",
 | 
					        "accessibility": "items",
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def testSelfLockingItems(self) -> None:
 | 
					    def test_self_locking_items(self) -> None:
 | 
				
			||||||
        """Force items that can be self locked to ensure it's valid placement."""
 | 
					        """Force items that can be self locked to ensure it's valid placement."""
 | 
				
			||||||
        location_lock_pairs = {
 | 
					        location_lock_pairs = {
 | 
				
			||||||
            "Searing Crags - Key of Strength": ["Power Thistle"],
 | 
					            "Searing Crags - Key of Strength": ["Power Thistle"],
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
from . import MessengerTestBase
 | 
					from . import MessengerTestBase
 | 
				
			||||||
from ..SubClasses import MessengerLocation
 | 
					from ..subclasses import MessengerLocation
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class LocationsTest(MessengerTestBase):
 | 
					class LocationsTest(MessengerTestBase):
 | 
				
			||||||
| 
						 | 
					@ -10,7 +10,7 @@ class LocationsTest(MessengerTestBase):
 | 
				
			||||||
    @property
 | 
					    @property
 | 
				
			||||||
    def run_default_tests(self) -> bool:
 | 
					    def run_default_tests(self) -> bool:
 | 
				
			||||||
        return False
 | 
					        return False
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
    def testLocationsExist(self):
 | 
					    def test_locations_exist(self) -> None:
 | 
				
			||||||
        for location in self.multiworld.worlds[1].location_name_to_id:
 | 
					        for location in self.multiworld.worlds[1].location_name_to_id:
 | 
				
			||||||
            self.assertIsInstance(self.multiworld.get_location(location, self.player), MessengerLocation)
 | 
					            self.assertIsInstance(self.multiworld.get_location(location, self.player), MessengerLocation)
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,3 @@
 | 
				
			||||||
from typing import Iterable, List
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
from BaseClasses import ItemClassification
 | 
					from BaseClasses import ItemClassification
 | 
				
			||||||
from . import MessengerTestBase
 | 
					from . import MessengerTestBase
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -10,7 +8,7 @@ class HardLogicTest(MessengerTestBase):
 | 
				
			||||||
        "shuffle_shards": "true",
 | 
					        "shuffle_shards": "true",
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def testVertical(self) -> None:
 | 
					    def test_vertical(self) -> None:
 | 
				
			||||||
        """Test the locations that still require wingsuit or rope dart."""
 | 
					        """Test the locations that still require wingsuit or rope dart."""
 | 
				
			||||||
        locations = [
 | 
					        locations = [
 | 
				
			||||||
            # tower of time
 | 
					            # tower of time
 | 
				
			||||||
| 
						 | 
					@ -54,7 +52,7 @@ class HardLogicTest(MessengerTestBase):
 | 
				
			||||||
        items = [["Wingsuit", "Rope Dart"]]
 | 
					        items = [["Wingsuit", "Rope Dart"]]
 | 
				
			||||||
        self.assertAccessDependency(locations, items)
 | 
					        self.assertAccessDependency(locations, items)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def testWindmill(self) -> None:
 | 
					    def test_windmill(self) -> None:
 | 
				
			||||||
        """Windmill Shuriken isn't progression on normal difficulty, so test it's marked correctly and required."""
 | 
					        """Windmill Shuriken isn't progression on normal difficulty, so test it's marked correctly and required."""
 | 
				
			||||||
        self.assertEqual(ItemClassification.progression, self.get_item_by_name("Windmill Shuriken").classification)
 | 
					        self.assertEqual(ItemClassification.progression, self.get_item_by_name("Windmill Shuriken").classification)
 | 
				
			||||||
        windmill_locs = [
 | 
					        windmill_locs = [
 | 
				
			||||||
| 
						 | 
					@ -81,8 +79,8 @@ class HardLogicTest(MessengerTestBase):
 | 
				
			||||||
        item = self.get_item_by_name("Rope Dart")
 | 
					        item = self.get_item_by_name("Rope Dart")
 | 
				
			||||||
        self.collect(item)
 | 
					        self.collect(item)
 | 
				
			||||||
        self.assertTrue(self.can_reach_location(special_loc))
 | 
					        self.assertTrue(self.can_reach_location(special_loc))
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
    def testGlacial(self) -> None:
 | 
					    def test_glacial(self) -> None:
 | 
				
			||||||
        """Test Glacial Peak locations."""
 | 
					        """Test Glacial Peak locations."""
 | 
				
			||||||
        self.assertAccessDependency(["Glacial Peak Seal - Ice Climbers"],
 | 
					        self.assertAccessDependency(["Glacial Peak Seal - Ice Climbers"],
 | 
				
			||||||
                                    [["Second Wind", "Meditation"], ["Rope Dart"], ["Wingsuit"]],
 | 
					                                    [["Second Wind", "Meditation"], ["Rope Dart"], ["Wingsuit"]],
 | 
				
			||||||
| 
						 | 
					@ -100,7 +98,7 @@ class NoLogicTest(MessengerTestBase):
 | 
				
			||||||
        "logic_level": "oob",
 | 
					        "logic_level": "oob",
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def testAccess(self) -> None:
 | 
					    def test_access(self) -> None:
 | 
				
			||||||
        """Test the locations with rules still require things."""
 | 
					        """Test the locations with rules still require things."""
 | 
				
			||||||
        all_locations = [
 | 
					        all_locations = [
 | 
				
			||||||
            "Bamboo Creek - Claustro", "Searing Crags - Key of Strength", "Elemental Skylands - Key of Symbiosis",
 | 
					            "Bamboo Creek - Claustro", "Searing Crags - Key of Strength", "Elemental Skylands - Key of Symbiosis",
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
from . import MessengerTestBase
 | 
					from . import MessengerTestBase
 | 
				
			||||||
from ..Constants import NOTES
 | 
					from ..constants import NOTES
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class TwoNoteGoalTest(MessengerTestBase):
 | 
					class TwoNoteGoalTest(MessengerTestBase):
 | 
				
			||||||
| 
						 | 
					@ -7,7 +7,7 @@ class TwoNoteGoalTest(MessengerTestBase):
 | 
				
			||||||
        "notes_needed": 2,
 | 
					        "notes_needed": 2,
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def testPrecollectedNotes(self) -> None:
 | 
					    def test_precollected_notes(self) -> None:
 | 
				
			||||||
        self.assertEqual(self.multiworld.state.count_group("Notes", self.player), 4)
 | 
					        self.assertEqual(self.multiworld.state.count_group("Notes", self.player), 4)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -16,15 +16,15 @@ class FourNoteGoalTest(MessengerTestBase):
 | 
				
			||||||
        "notes_needed": 4,
 | 
					        "notes_needed": 4,
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def testPrecollectedNotes(self) -> None:
 | 
					    def test_precollected_notes(self) -> None:
 | 
				
			||||||
        self.assertEqual(self.multiworld.state.count_group("Notes", self.player), 2)
 | 
					        self.assertEqual(self.multiworld.state.count_group("Notes", self.player), 2)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class DefaultGoalTest(MessengerTestBase):
 | 
					class DefaultGoalTest(MessengerTestBase):
 | 
				
			||||||
    def testPrecollectedNotes(self) -> None:
 | 
					    def test_precollected_notes(self) -> None:
 | 
				
			||||||
        self.assertEqual(self.multiworld.state.count_group("Notes", self.player), 0)
 | 
					        self.assertEqual(self.multiworld.state.count_group("Notes", self.player), 0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def testGoal(self) -> None:
 | 
					    def test_goal(self) -> None:
 | 
				
			||||||
        self.assertBeatable(False)
 | 
					        self.assertBeatable(False)
 | 
				
			||||||
        self.collect_by_name(NOTES)
 | 
					        self.collect_by_name(NOTES)
 | 
				
			||||||
        rope_dart = self.get_item_by_name("Rope Dart")
 | 
					        rope_dart = self.get_item_by_name("Rope Dart")
 | 
				
			||||||
| 
						 | 
					@ -1,7 +1,7 @@
 | 
				
			||||||
from typing import Dict
 | 
					from typing import Dict
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from . import MessengerTestBase
 | 
					from . import MessengerTestBase
 | 
				
			||||||
from ..Shop import SHOP_ITEMS, FIGURINES
 | 
					from ..shop import SHOP_ITEMS, FIGURINES
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class ShopCostTest(MessengerTestBase):
 | 
					class ShopCostTest(MessengerTestBase):
 | 
				
			||||||
| 
						 | 
					@ -10,13 +10,13 @@ class ShopCostTest(MessengerTestBase):
 | 
				
			||||||
        "shuffle_shards": "true",
 | 
					        "shuffle_shards": "true",
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def testShopRules(self) -> None:
 | 
					    def test_shop_rules(self) -> None:
 | 
				
			||||||
        for loc in SHOP_ITEMS:
 | 
					        for loc in SHOP_ITEMS:
 | 
				
			||||||
            loc = f"The Shop - {loc}"
 | 
					            loc = f"The Shop - {loc}"
 | 
				
			||||||
            with self.subTest("has cost", loc=loc):
 | 
					            with self.subTest("has cost", loc=loc):
 | 
				
			||||||
                self.assertFalse(self.can_reach_location(loc))
 | 
					                self.assertFalse(self.can_reach_location(loc))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def testShopPrices(self) -> None:
 | 
					    def test_shop_prices(self) -> None:
 | 
				
			||||||
        prices: Dict[str, int] = self.multiworld.worlds[self.player].shop_prices
 | 
					        prices: Dict[str, int] = self.multiworld.worlds[self.player].shop_prices
 | 
				
			||||||
        for loc, price in prices.items():
 | 
					        for loc, price in prices.items():
 | 
				
			||||||
            with self.subTest("prices", loc=loc):
 | 
					            with self.subTest("prices", loc=loc):
 | 
				
			||||||
| 
						 | 
					@ -24,7 +24,7 @@ class ShopCostTest(MessengerTestBase):
 | 
				
			||||||
                self.assertTrue(loc in SHOP_ITEMS)
 | 
					                self.assertTrue(loc in SHOP_ITEMS)
 | 
				
			||||||
        self.assertEqual(len(prices), len(SHOP_ITEMS))
 | 
					        self.assertEqual(len(prices), len(SHOP_ITEMS))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def testDBoost(self) -> None:
 | 
					    def test_dboost(self) -> None:
 | 
				
			||||||
        locations = [
 | 
					        locations = [
 | 
				
			||||||
            "Riviere Turquoise Seal - Bounces and Balls",
 | 
					            "Riviere Turquoise Seal - Bounces and Balls",
 | 
				
			||||||
            "Forlorn Temple - Demon King", "Forlorn Temple Seal - Rocket Maze", "Forlorn Temple Seal - Rocket Sunset",
 | 
					            "Forlorn Temple - Demon King", "Forlorn Temple Seal - Rocket Maze", "Forlorn Temple Seal - Rocket Sunset",
 | 
				
			||||||
| 
						 | 
					@ -33,10 +33,10 @@ class ShopCostTest(MessengerTestBase):
 | 
				
			||||||
        items = [["Path of Resilience", "Meditation", "Second Wind"]]
 | 
					        items = [["Path of Resilience", "Meditation", "Second Wind"]]
 | 
				
			||||||
        self.assertAccessDependency(locations, items)
 | 
					        self.assertAccessDependency(locations, items)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def testCurrents(self) -> None:
 | 
					    def test_currents(self) -> None:
 | 
				
			||||||
        self.assertAccessDependency(["Elemental Skylands Seal - Water"], [["Currents Master"]])
 | 
					        self.assertAccessDependency(["Elemental Skylands Seal - Water"], [["Currents Master"]])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def testStrike(self) -> None:
 | 
					    def test_strike(self) -> None:
 | 
				
			||||||
        locations = [
 | 
					        locations = [
 | 
				
			||||||
            "Glacial Peak Seal - Projectile Spike Pit", "Elemental Skylands Seal - Fire",
 | 
					            "Glacial Peak Seal - Projectile Spike Pit", "Elemental Skylands Seal - Fire",
 | 
				
			||||||
        ]
 | 
					        ]
 | 
				
			||||||
| 
						 | 
					@ -50,22 +50,22 @@ class ShopCostMinTest(ShopCostTest):
 | 
				
			||||||
        "shuffle_seals": "false",
 | 
					        "shuffle_seals": "false",
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def testShopRules(self) -> None:
 | 
					    def test_shop_rules(self) -> None:
 | 
				
			||||||
        if self.multiworld.worlds[self.player].total_shards:
 | 
					        if self.multiworld.worlds[self.player].total_shards:
 | 
				
			||||||
            super().testShopRules()
 | 
					            super().test_shop_rules()
 | 
				
			||||||
        else:
 | 
					        else:
 | 
				
			||||||
            for loc in SHOP_ITEMS:
 | 
					            for loc in SHOP_ITEMS:
 | 
				
			||||||
                loc = f"The Shop - {loc}"
 | 
					                loc = f"The Shop - {loc}"
 | 
				
			||||||
                with self.subTest("has cost", loc=loc):
 | 
					                with self.subTest("has cost", loc=loc):
 | 
				
			||||||
                    self.assertTrue(self.can_reach_location(loc))
 | 
					                    self.assertTrue(self.can_reach_location(loc))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def testDBoost(self) -> None:
 | 
					    def test_dboost(self) -> None:
 | 
				
			||||||
        pass
 | 
					        pass
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def testCurrents(self) -> None:
 | 
					    def test_currents(self) -> None:
 | 
				
			||||||
        pass
 | 
					        pass
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def testStrike(self) -> None:
 | 
					    def test_strike(self) -> None:
 | 
				
			||||||
        pass
 | 
					        pass
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -79,7 +79,7 @@ class PlandoTest(MessengerTestBase):
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def testCosts(self) -> None:
 | 
					    def test_costs(self) -> None:
 | 
				
			||||||
        for loc in SHOP_ITEMS:
 | 
					        for loc in SHOP_ITEMS:
 | 
				
			||||||
            loc = f"The Shop - {loc}"
 | 
					            loc = f"The Shop - {loc}"
 | 
				
			||||||
            with self.subTest("has cost", loc=loc):
 | 
					            with self.subTest("has cost", loc=loc):
 | 
				
			||||||
| 
						 | 
					@ -8,11 +8,11 @@ class AllSealsRequired(MessengerTestBase):
 | 
				
			||||||
        "goal": "power_seal_hunt",
 | 
					        "goal": "power_seal_hunt",
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def testSealsShuffled(self) -> None:
 | 
					    def test_seals_shuffled(self) -> None:
 | 
				
			||||||
        """Shuffle seals should be forced on when shop chest is the goal so test it."""
 | 
					        """Shuffle seals should be forced on when shop chest is the goal so test it."""
 | 
				
			||||||
        self.assertTrue(self.multiworld.shuffle_seals[self.player])
 | 
					        self.assertTrue(self.multiworld.shuffle_seals[self.player])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def testChestAccess(self) -> None:
 | 
					    def test_chest_access(self) -> None:
 | 
				
			||||||
        """Defaults to a total of 45 power seals in the pool and required."""
 | 
					        """Defaults to a total of 45 power seals in the pool and required."""
 | 
				
			||||||
        with self.subTest("Access Dependency"):
 | 
					        with self.subTest("Access Dependency"):
 | 
				
			||||||
            self.assertEqual(len([seal for seal in self.multiworld.itempool if seal.name == "Power Seal"]),
 | 
					            self.assertEqual(len([seal for seal in self.multiworld.itempool if seal.name == "Power Seal"]),
 | 
				
			||||||
| 
						 | 
					@ -38,7 +38,7 @@ class HalfSealsRequired(MessengerTestBase):
 | 
				
			||||||
        "percent_seals_required": 50,
 | 
					        "percent_seals_required": 50,
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def testSealsAmount(self) -> None:
 | 
					    def test_seals_amount(self) -> None:
 | 
				
			||||||
        """Should have 45 power seals in the item pool and half that required"""
 | 
					        """Should have 45 power seals in the item pool and half that required"""
 | 
				
			||||||
        self.assertEqual(self.multiworld.total_seals[self.player], 45)
 | 
					        self.assertEqual(self.multiworld.total_seals[self.player], 45)
 | 
				
			||||||
        self.assertEqual(self.multiworld.worlds[self.player].total_seals, 45)
 | 
					        self.assertEqual(self.multiworld.worlds[self.player].total_seals, 45)
 | 
				
			||||||
| 
						 | 
					@ -57,7 +57,7 @@ class ThirtyThirtySeals(MessengerTestBase):
 | 
				
			||||||
        "percent_seals_required": 34,
 | 
					        "percent_seals_required": 34,
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def testSealsAmount(self) -> None:
 | 
					    def test_seals_amount(self) -> None:
 | 
				
			||||||
        """Should have 30 power seals in the pool and 33 percent of that required."""
 | 
					        """Should have 30 power seals in the pool and 33 percent of that required."""
 | 
				
			||||||
        self.assertEqual(self.multiworld.total_seals[self.player], 30)
 | 
					        self.assertEqual(self.multiworld.total_seals[self.player], 30)
 | 
				
			||||||
        self.assertEqual(self.multiworld.worlds[self.player].total_seals, 30)
 | 
					        self.assertEqual(self.multiworld.worlds[self.player].total_seals, 30)
 | 
				
			||||||
| 
						 | 
					@ -75,7 +75,7 @@ class MaxSealsNoShards(MessengerTestBase):
 | 
				
			||||||
        "total_seals": 85,
 | 
					        "total_seals": 85,
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def testSealsAmount(self) -> None:
 | 
					    def test_seals_amount(self) -> None:
 | 
				
			||||||
        """Should set total seals to 70 since shards aren't shuffled."""
 | 
					        """Should set total seals to 70 since shards aren't shuffled."""
 | 
				
			||||||
        self.assertEqual(self.multiworld.total_seals[self.player], 85)
 | 
					        self.assertEqual(self.multiworld.total_seals[self.player], 85)
 | 
				
			||||||
        self.assertEqual(self.multiworld.worlds[self.player].total_seals, 70)
 | 
					        self.assertEqual(self.multiworld.worlds[self.player].total_seals, 70)
 | 
				
			||||||
| 
						 | 
					@ -88,7 +88,7 @@ class MaxSealsWithShards(MessengerTestBase):
 | 
				
			||||||
        "shuffle_shards": "true",
 | 
					        "shuffle_shards": "true",
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def testSealsAmount(self) -> None:
 | 
					    def test_seals_amount(self) -> None:
 | 
				
			||||||
        """Should have 85 seals in the pool with all required and be a valid seed."""
 | 
					        """Should have 85 seals in the pool with all required and be a valid seed."""
 | 
				
			||||||
        self.assertEqual(self.multiworld.total_seals[self.player], 85)
 | 
					        self.assertEqual(self.multiworld.total_seals[self.player], 85)
 | 
				
			||||||
        self.assertEqual(self.multiworld.worlds[self.player].total_seals, 85)
 | 
					        self.assertEqual(self.multiworld.worlds[self.player].total_seals, 85)
 | 
				
			||||||
		Loading…
	
		Reference in New Issue