| # 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 |
| |
| 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") |
| text = json.loads(json_path.read_bytes().decode()) |
| _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): |
| toml_str = valid.read_bytes().decode() |
| actual = tomllib.loads(toml_str) |
| actual = burntsushi.convert(actual) |
| expected = burntsushi.normalize(expected) |
| self.assertEqual(actual, expected) |