* 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>
		
	
		
			
				
	
	
		
			56 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			56 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
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)
 |