mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	
		
			
	
	
		
			65 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			65 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|   | # SPDX-License-Identifier: MIT | ||
|  | # SPDX-FileCopyrightText: 2021 Taneli Hukkinen | ||
|  | # Licensed to PSF under a Contributor Agreement. | ||
|  | 
 | ||
|  | import json | ||
|  | from pathlib import Path | ||
|  | import unittest | ||
|  | 
 | ||
|  | from . import burntsushi, tomllib | ||
|  | 
 | ||
|  | 
 | ||
|  | class MissingFile: | ||
|  |     def __init__(self, path: Path): | ||
|  |         self.path = path | ||
|  | 
 | ||
|  | 
 | ||
|  | DATA_DIR = Path(__file__).parent / "data" | ||
|  | 
 | ||
|  | VALID_FILES = tuple((DATA_DIR / "valid").glob("**/*.toml")) | ||
|  | assert VALID_FILES, "Valid TOML test files not found" | ||
|  | 
 | ||
|  | _expected_files = [] | ||
|  | for p in VALID_FILES: | ||
|  |     json_path = p.with_suffix(".json") | ||
|  |     try: | ||
|  |         text = json.loads(json_path.read_bytes().decode()) | ||
|  |     except FileNotFoundError: | ||
|  |         text = MissingFile(json_path) | ||
|  |     _expected_files.append(text) | ||
|  | VALID_FILES_EXPECTED = tuple(_expected_files) | ||
|  | 
 | ||
|  | INVALID_FILES = tuple((DATA_DIR / "invalid").glob("**/*.toml")) | ||
|  | assert INVALID_FILES, "Invalid TOML test files not found" | ||
|  | 
 | ||
|  | 
 | ||
|  | class TestData(unittest.TestCase): | ||
|  |     def test_invalid(self): | ||
|  |         for invalid in INVALID_FILES: | ||
|  |             with self.subTest(msg=invalid.stem): | ||
|  |                 toml_bytes = invalid.read_bytes() | ||
|  |                 try: | ||
|  |                     toml_str = toml_bytes.decode() | ||
|  |                 except UnicodeDecodeError: | ||
|  |                     # Some BurntSushi tests are not valid UTF-8. Skip those. | ||
|  |                     continue | ||
|  |                 with self.assertRaises(tomllib.TOMLDecodeError): | ||
|  |                     tomllib.loads(toml_str) | ||
|  | 
 | ||
|  |     def test_valid(self): | ||
|  |         for valid, expected in zip(VALID_FILES, VALID_FILES_EXPECTED): | ||
|  |             with self.subTest(msg=valid.stem): | ||
|  |                 if isinstance(expected, MissingFile): | ||
|  |                     # For a poor man's xfail, assert that this is one of the | ||
|  |                     # test cases where expected data is known to be missing. | ||
|  |                     assert valid.stem in { | ||
|  |                         "qa-array-inline-nested-1000", | ||
|  |                         "qa-table-inline-nested-1000", | ||
|  |                     } | ||
|  |                     continue | ||
|  |                 toml_str = valid.read_bytes().decode() | ||
|  |                 actual = tomllib.loads(toml_str) | ||
|  |                 actual = burntsushi.convert(actual) | ||
|  |                 expected = burntsushi.normalize(expected) | ||
|  |                 self.assertEqual(actual, expected) |