Stardew Valley: Add walnutsanity prefix to locations (#4934)

This commit is contained in:
Jérémie Bolduc
2025-07-16 11:57:06 -04:00
committed by GitHub
parent 4a43a6ae13
commit 604ab79af9
3 changed files with 231 additions and 206 deletions

View File

@@ -1,26 +1,46 @@
import unittest
from .bases import SVTestBase
from ..options import ExcludeGingerIsland, Walnutsanity, ToolProgression, SkillProgression
from ..strings.ap_names.ap_option_names import WalnutsanityOptionName
class TestWalnutsanityNone(SVTestBase):
class SVWalnutsanityTestBase(SVTestBase):
expected_walnut_locations: set[str] = set()
unexpected_walnut_locations: set[str] = set()
@classmethod
def setUpClass(cls) -> None:
if cls is SVWalnutsanityTestBase:
raise unittest.SkipTest("Base tests disabled")
super().setUpClass()
def test_walnut_locations(self):
location_names = {location.name for location in self.multiworld.get_locations()}
for location in self.expected_walnut_locations:
self.assertIn(location, location_names, f"{location} should be in the location names")
for location in self.unexpected_walnut_locations:
self.assertNotIn(location, location_names, f"{location} should not be in the location names")
class TestWalnutsanityNone(SVWalnutsanityTestBase):
options = {
ExcludeGingerIsland: ExcludeGingerIsland.option_false,
Walnutsanity: Walnutsanity.preset_none,
SkillProgression: ToolProgression.option_progressive,
ToolProgression: ToolProgression.option_progressive,
}
def test_no_walnut_locations(self):
location_names = {location.name for location in self.multiworld.get_locations()}
self.assertNotIn("Open Golden Coconut", location_names)
self.assertNotIn("Fishing Walnut 4", location_names)
self.assertNotIn("Journal Scrap #6", location_names)
self.assertNotIn("Starfish Triangle", location_names)
self.assertNotIn("Bush Behind Coconut Tree", location_names)
self.assertNotIn("Purple Starfish Island Survey", location_names)
self.assertNotIn("Volcano Monsters Walnut 3", location_names)
self.assertNotIn("Cliff Over Island South Bush", location_names)
unexpected_walnut_locations = {
"Walnutsanity: Open Golden Coconut",
"Walnutsanity: Fishing Walnut 4",
"Walnutsanity: Journal Scrap #6",
"Walnutsanity: Starfish Triangle",
"Walnutsanity: Bush Behind Coconut Tree",
"Walnutsanity: Purple Starfish Island Survey",
"Walnutsanity: Volcano Monsters Walnut 3",
"Walnutsanity: Cliff Over Island South Bush",
}
def test_logic_received_walnuts(self):
# You need to receive 0, and collect 40
@@ -48,28 +68,30 @@ class TestWalnutsanityNone(SVTestBase):
self.assertTrue(self.multiworld.state.can_reach_location("Parrot Express", self.player))
class TestWalnutsanityPuzzles(SVTestBase):
class TestWalnutsanityPuzzles(SVWalnutsanityTestBase):
options = {
ExcludeGingerIsland: ExcludeGingerIsland.option_false,
Walnutsanity: frozenset({WalnutsanityOptionName.puzzles}),
SkillProgression: ToolProgression.option_progressive,
ToolProgression: ToolProgression.option_progressive,
}
def test_only_puzzle_walnut_locations(self):
location_names = {location.name for location in self.multiworld.get_locations()}
self.assertIn("Open Golden Coconut", location_names)
self.assertNotIn("Fishing Walnut 4", location_names)
self.assertNotIn("Journal Scrap #6", location_names)
self.assertNotIn("Starfish Triangle", location_names)
self.assertNotIn("Bush Behind Coconut Tree", location_names)
self.assertIn("Purple Starfish Island Survey", location_names)
self.assertNotIn("Volcano Monsters Walnut 3", location_names)
self.assertNotIn("Cliff Over Island South Bush", location_names)
expected_walnut_locations = {
"Walnutsanity: Open Golden Coconut",
"Walnutsanity: Purple Starfish Island Survey",
}
unexpected_walnut_locations = {
"Walnutsanity: Fishing Walnut 4",
"Walnutsanity: Journal Scrap #6",
"Walnutsanity: Starfish Triangle",
"Walnutsanity: Bush Behind Coconut Tree",
"Walnutsanity: Volcano Monsters Walnut 3",
"Walnutsanity: Cliff Over Island South Bush",
}
def test_field_office_locations_require_professor_snail(self):
location_names = ["Complete Large Animal Collection", "Complete Snake Collection", "Complete Mummified Frog Collection",
"Complete Mummified Bat Collection", "Purple Flowers Island Survey", "Purple Starfish Island Survey", ]
location_names = ["Walnutsanity: Complete Large Animal Collection", "Walnutsanity: Complete Snake Collection",
"Walnutsanity: Complete Mummified Frog Collection", "Walnutsanity: Complete Mummified Bat Collection",
"Walnutsanity: Purple Flowers Island Survey", "Walnutsanity: Purple Starfish Island Survey", ]
self.collect("Island Obelisk")
self.collect("Island North Turtle")
self.collect("Island West Turtle")
@@ -90,40 +112,42 @@ class TestWalnutsanityPuzzles(SVTestBase):
self.assert_can_reach_location(location)
class TestWalnutsanityBushes(SVTestBase):
class TestWalnutsanityBushes(SVWalnutsanityTestBase):
options = {
ExcludeGingerIsland: ExcludeGingerIsland.option_false,
Walnutsanity: frozenset({WalnutsanityOptionName.bushes}),
}
def test_only_bush_walnut_locations(self):
location_names = {location.name for location in self.multiworld.get_locations()}
self.assertNotIn("Open Golden Coconut", location_names)
self.assertNotIn("Fishing Walnut 4", location_names)
self.assertNotIn("Journal Scrap #6", location_names)
self.assertNotIn("Starfish Triangle", location_names)
self.assertIn("Bush Behind Coconut Tree", location_names)
self.assertNotIn("Purple Starfish Island Survey", location_names)
self.assertNotIn("Volcano Monsters Walnut 3", location_names)
self.assertIn("Cliff Over Island South Bush", location_names)
expected_walnut_locations = {
"Walnutsanity: Bush Behind Coconut Tree",
"Walnutsanity: Cliff Over Island South Bush",
}
unexpected_walnut_locations = {
"Walnutsanity: Open Golden Coconut",
"Walnutsanity: Fishing Walnut 4",
"Walnutsanity: Journal Scrap #6",
"Walnutsanity: Starfish Triangle",
"Walnutsanity: Purple Starfish Island Survey",
"Walnutsanity: Volcano Monsters Walnut 3",
}
class TestWalnutsanityPuzzlesAndBushes(SVTestBase):
class TestWalnutsanityPuzzlesAndBushes(SVWalnutsanityTestBase):
options = {
ExcludeGingerIsland: ExcludeGingerIsland.option_false,
Walnutsanity: frozenset({WalnutsanityOptionName.puzzles, WalnutsanityOptionName.bushes}),
}
def test_only_bush_walnut_locations(self):
location_names = {location.name for location in self.multiworld.get_locations()}
self.assertIn("Open Golden Coconut", location_names)
self.assertNotIn("Fishing Walnut 4", location_names)
self.assertNotIn("Journal Scrap #6", location_names)
self.assertNotIn("Starfish Triangle", location_names)
self.assertIn("Bush Behind Coconut Tree", location_names)
self.assertIn("Purple Starfish Island Survey", location_names)
self.assertNotIn("Volcano Monsters Walnut 3", location_names)
self.assertIn("Cliff Over Island South Bush", location_names)
expected_walnut_locations = {
"Walnutsanity: Open Golden Coconut",
"Walnutsanity: Bush Behind Coconut Tree",
"Walnutsanity: Purple Starfish Island Survey",
"Walnutsanity: Cliff Over Island South Bush",
}
unexpected_walnut_locations = {
"Walnutsanity: Fishing Walnut 4",
"Walnutsanity: Journal Scrap #6",
"Walnutsanity: Starfish Triangle",
"Walnutsanity: Volcano Monsters Walnut 3",
}
def test_logic_received_walnuts(self):
# You need to receive 25, and collect 15
@@ -136,58 +160,59 @@ class TestWalnutsanityPuzzlesAndBushes(SVTestBase):
self.assertTrue(self.multiworld.state.can_reach_location("Parrot Express", self.player))
class TestWalnutsanityDigSpots(SVTestBase):
class TestWalnutsanityDigSpots(SVWalnutsanityTestBase):
options = {
ExcludeGingerIsland: ExcludeGingerIsland.option_false,
Walnutsanity: frozenset({WalnutsanityOptionName.dig_spots}),
}
def test_only_dig_spots_walnut_locations(self):
location_names = {location.name for location in self.multiworld.get_locations()}
self.assertNotIn("Open Golden Coconut", location_names)
self.assertNotIn("Fishing Walnut 4", location_names)
self.assertIn("Journal Scrap #6", location_names)
self.assertIn("Starfish Triangle", location_names)
self.assertNotIn("Bush Behind Coconut Tree", location_names)
self.assertNotIn("Purple Starfish Island Survey", location_names)
self.assertNotIn("Volcano Monsters Walnut 3", location_names)
self.assertNotIn("Cliff Over Island South Bush", location_names)
expected_walnut_locations = {
"Walnutsanity: Journal Scrap #6",
"Walnutsanity: Starfish Triangle",
}
unexpected_walnut_locations = {
"Walnutsanity: Open Golden Coconut",
"Walnutsanity: Fishing Walnut 4",
"Walnutsanity: Bush Behind Coconut Tree",
"Walnutsanity: Purple Starfish Island Survey",
"Walnutsanity: Volcano Monsters Walnut 3",
"Walnutsanity: Cliff Over Island South Bush",
}
class TestWalnutsanityRepeatables(SVTestBase):
class TestWalnutsanityRepeatables(SVWalnutsanityTestBase):
options = {
ExcludeGingerIsland: ExcludeGingerIsland.option_false,
Walnutsanity: frozenset({WalnutsanityOptionName.repeatables}),
}
def test_only_repeatable_walnut_locations(self):
location_names = {location.name for location in self.multiworld.get_locations()}
self.assertNotIn("Open Golden Coconut", location_names)
self.assertIn("Fishing Walnut 4", location_names)
self.assertNotIn("Journal Scrap #6", location_names)
self.assertNotIn("Starfish Triangle", location_names)
self.assertNotIn("Bush Behind Coconut Tree", location_names)
self.assertNotIn("Purple Starfish Island Survey", location_names)
self.assertIn("Volcano Monsters Walnut 3", location_names)
self.assertNotIn("Cliff Over Island South Bush", location_names)
expected_walnut_locations = {
"Walnutsanity: Fishing Walnut 4",
"Walnutsanity: Volcano Monsters Walnut 3",
}
unexpected_walnut_locations = {
"Walnutsanity: Open Golden Coconut",
"Walnutsanity: Journal Scrap #6",
"Walnutsanity: Starfish Triangle",
"Walnutsanity: Bush Behind Coconut Tree",
"Walnutsanity: Purple Starfish Island Survey",
"Walnutsanity: Cliff Over Island South Bush",
}
class TestWalnutsanityAll(SVTestBase):
class TestWalnutsanityAll(SVWalnutsanityTestBase):
options = {
ExcludeGingerIsland: ExcludeGingerIsland.option_false,
Walnutsanity: Walnutsanity.preset_all,
}
def test_all_walnut_locations(self):
location_names = {location.name for location in self.multiworld.get_locations()}
self.assertIn("Open Golden Coconut", location_names)
self.assertIn("Fishing Walnut 4", location_names)
self.assertIn("Journal Scrap #6", location_names)
self.assertIn("Starfish Triangle", location_names)
self.assertIn("Bush Behind Coconut Tree", location_names)
self.assertIn("Purple Starfish Island Survey", location_names)
self.assertIn("Volcano Monsters Walnut 3", location_names)
self.assertIn("Cliff Over Island South Bush", location_names)
expected_walnut_locations = {
"Walnutsanity: Open Golden Coconut",
"Walnutsanity: Fishing Walnut 4",
"Walnutsanity: Journal Scrap #6",
"Walnutsanity: Starfish Triangle",
"Walnutsanity: Bush Behind Coconut Tree",
"Walnutsanity: Purple Starfish Island Survey",
"Walnutsanity: Volcano Monsters Walnut 3",
"Walnutsanity: Cliff Over Island South Bush",
}
def test_logic_received_walnuts(self):
# You need to receive 40, and collect 4