mirror of
https://github.com/MarioSpore/Grinch-AP.git
synced 2025-10-21 12:11:33 -06:00
Core: Fix Template Yamls for games with colon in name (#4106)
* add quotes around strings containing {{ game }} * do the actually correct thing instead of a hack thanks berserker66 for pointing out to me that I was doing this the completly wrong way, so I fixed it up * Clean up filenames to prevent illegal chars * Use %s substitution instead of concatenation * whoops somehow i removed a space from the comment for the regex, so this adds it back * Use pre-existing function in Utils.py * Test: add test for option yaml with colon --------- Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
This commit is contained in:
55
test/options/test_generate_templates.py
Normal file
55
test/options/test_generate_templates.py
Normal file
@@ -0,0 +1,55 @@
|
||||
import unittest
|
||||
|
||||
from pathlib import Path
|
||||
from tempfile import TemporaryDirectory
|
||||
from typing import TYPE_CHECKING, Dict, Type
|
||||
from Utils import parse_yaml
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from worlds.AutoWorld import World
|
||||
|
||||
|
||||
class TestGenerateYamlTemplates(unittest.TestCase):
|
||||
old_world_types: Dict[str, Type["World"]]
|
||||
|
||||
def setUp(self) -> None:
|
||||
import worlds.AutoWorld
|
||||
|
||||
self.old_world_types = worlds.AutoWorld.AutoWorldRegister.world_types
|
||||
|
||||
def tearDown(self) -> None:
|
||||
import worlds.AutoWorld
|
||||
|
||||
worlds.AutoWorld.AutoWorldRegister.world_types = self.old_world_types
|
||||
|
||||
if "World: with colon" in worlds.AutoWorld.AutoWorldRegister.world_types:
|
||||
del worlds.AutoWorld.AutoWorldRegister.world_types["World: with colon"]
|
||||
|
||||
def test_name_with_colon(self) -> None:
|
||||
from Options import generate_yaml_templates
|
||||
from worlds.AutoWorld import AutoWorldRegister
|
||||
from worlds.AutoWorld import World
|
||||
|
||||
class WorldWithColon(World):
|
||||
game = "World: with colon"
|
||||
item_name_to_id = {}
|
||||
location_name_to_id = {}
|
||||
|
||||
AutoWorldRegister.world_types = {WorldWithColon.game: WorldWithColon}
|
||||
with TemporaryDirectory(f"archipelago_{__name__}") as temp_dir:
|
||||
generate_yaml_templates(temp_dir)
|
||||
path: Path
|
||||
for path in Path(temp_dir).iterdir():
|
||||
self.assertTrue(path.is_file())
|
||||
self.assertTrue(path.suffix == ".yaml")
|
||||
with path.open(encoding="utf-8") as f:
|
||||
try:
|
||||
data = parse_yaml(f)
|
||||
except:
|
||||
f.seek(0)
|
||||
print(f"Error in {path.name}:\n{f.read()}")
|
||||
raise
|
||||
self.assertIn("game", data)
|
||||
self.assertIn(":", data["game"])
|
||||
self.assertIn(data["game"], data)
|
||||
self.assertIsInstance(data[data["game"]], dict)
|
Reference in New Issue
Block a user