diff options
Diffstat (limited to 'tests/test_data.py')
-rw-r--r-- | tests/test_data.py | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/tests/test_data.py b/tests/test_data.py new file mode 100644 index 0000000..d73ff7c --- /dev/null +++ b/tests/test_data.py @@ -0,0 +1,60 @@ +# 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")) +# VALID_FILES_EXPECTED = tuple( +# json.loads(p.with_suffix(".json").read_bytes().decode()) for p in VALID_FILES +# ) +_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")) + + +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): + # Would be nice to xfail here, but unittest doesn't seem + # to allow that in a nice way. + continue + toml_str = valid.read_bytes().decode() + actual = tomllib.loads(toml_str) + actual = burntsushi.convert(actual) + expected = burntsushi.normalize(expected) + self.assertEqual(actual, expected) |