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)
							 |