summaryrefslogtreecommitdiffstats
path: root/tests/test_data.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_data.py')
-rw-r--r--tests/test_data.py60
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)