69 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			69 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 
								 | 
							
								# Tests that yaml wrappers in Utils.py do what they should
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import unittest
							 | 
						||
| 
								 | 
							
								from typing import cast, Any, ClassVar, Dict
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								from Utils import dump, Dumper  # type: ignore[attr-defined]
							 | 
						||
| 
								 | 
							
								from Utils import parse_yaml, parse_yamls, unsafe_parse_yaml
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class AClass:
							 | 
						||
| 
								 | 
							
								    def __eq__(self, other: Any) -> bool:
							 | 
						||
| 
								 | 
							
								        return isinstance(other, self.__class__)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class TestYaml(unittest.TestCase):
							 | 
						||
| 
								 | 
							
								    safe_data: ClassVar[Dict[str, Any]] = {
							 | 
						||
| 
								 | 
							
								        "a": [1, 2, 3],
							 | 
						||
| 
								 | 
							
								        "b": None,
							 | 
						||
| 
								 | 
							
								        "c": True,
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    unsafe_data: ClassVar[Dict[str, Any]] = {
							 | 
						||
| 
								 | 
							
								        "a": AClass()
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    @property
							 | 
						||
| 
								 | 
							
								    def safe_str(self) -> str:
							 | 
						||
| 
								 | 
							
								        return cast(str, dump(self.safe_data, Dumper=Dumper))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    @property
							 | 
						||
| 
								 | 
							
								    def unsafe_str(self) -> str:
							 | 
						||
| 
								 | 
							
								        return cast(str, dump(self.unsafe_data, Dumper=Dumper))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def assertIsNonEmptyString(self, string: str) -> None:
							 | 
						||
| 
								 | 
							
								        self.assertTrue(string)
							 | 
						||
| 
								 | 
							
								        self.assertIsInstance(string, str)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def test_dump(self) -> None:
							 | 
						||
| 
								 | 
							
								        self.assertIsNonEmptyString(self.safe_str)
							 | 
						||
| 
								 | 
							
								        self.assertIsNonEmptyString(self.unsafe_str)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def test_safe_parse(self) -> None:
							 | 
						||
| 
								 | 
							
								        self.assertEqual(self.safe_data, parse_yaml(self.safe_str))
							 | 
						||
| 
								 | 
							
								        with self.assertRaises(Exception):
							 | 
						||
| 
								 | 
							
								            parse_yaml(self.unsafe_str)
							 | 
						||
| 
								 | 
							
								        with self.assertRaises(Exception):
							 | 
						||
| 
								 | 
							
								            parse_yaml("1\n---\n2\n")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def test_unsafe_parse(self) -> None:
							 | 
						||
| 
								 | 
							
								        self.assertEqual(self.safe_data, unsafe_parse_yaml(self.safe_str))
							 | 
						||
| 
								 | 
							
								        self.assertEqual(self.unsafe_data, unsafe_parse_yaml(self.unsafe_str))
							 | 
						||
| 
								 | 
							
								        with self.assertRaises(Exception):
							 | 
						||
| 
								 | 
							
								            unsafe_parse_yaml("1\n---\n2\n")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def test_multi_parse(self) -> None:
							 | 
						||
| 
								 | 
							
								        self.assertEqual(self.safe_data, next(parse_yamls(self.safe_str)))
							 | 
						||
| 
								 | 
							
								        with self.assertRaises(Exception):
							 | 
						||
| 
								 | 
							
								            next(parse_yamls(self.unsafe_str))
							 | 
						||
| 
								 | 
							
								        self.assertEqual(2, len(list(parse_yamls("1\n---\n2\n"))))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def test_unique_key(self) -> None:
							 | 
						||
| 
								 | 
							
								        s = """
							 | 
						||
| 
								 | 
							
								        a: 1
							 | 
						||
| 
								 | 
							
								        a: 2
							 | 
						||
| 
								 | 
							
								        """
							 | 
						||
| 
								 | 
							
								        with self.assertRaises(Exception):
							 | 
						||
| 
								 | 
							
								            parse_yaml(s)
							 | 
						||
| 
								 | 
							
								        with self.assertRaises(Exception):
							 | 
						||
| 
								 | 
							
								            next(parse_yamls(s))
							 |