From 6407cf22def09de43ec2ec02692c0e4ea3b17742 Mon Sep 17 00:00:00 2001 From: pommicket Date: Tue, 23 Sep 2025 11:38:46 -0400 Subject: Add interpretation tests, fix some interpretation issues --- tests/__init__.py | 11 ++++++++++- tests/interpretation.py | 39 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 tests/interpretation.py (limited to 'tests') diff --git a/tests/__init__.py b/tests/__init__.py index 5616c23..8bfbe38 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -1,6 +1,7 @@ import unittest import os -from tests import parsing, errors, location +from tests import parsing, errors, location, interpretation +import sys class TestParsing(unittest.TestCase): def test_all(self) -> None: @@ -26,6 +27,14 @@ class TestLocation(unittest.TestCase): with self.subTest(file): location.test_path(self, f'{test_dir}/{file}') +class TestInterpretation(unittest.TestCase): + def test_all(self) -> None: + test_dir = '../tests/interpretation' + for file in os.listdir(test_dir): + if not file.endswith('.pom'): continue + with self.subTest(file): + interpretation.test_path(self, f'{test_dir}/{file}') + if __name__ == '__main__': unittest.main() diff --git a/tests/interpretation.py b/tests/interpretation.py new file mode 100644 index 0000000..6841a49 --- /dev/null +++ b/tests/interpretation.py @@ -0,0 +1,39 @@ +import pom_parser +import unittest + +def test_list(tester: unittest.TestCase, path: str) -> None: + conf = pom_parser.load_path(path) + for key in conf.keys(): + section = conf.section(key) + sep = section.get('sep') + list_ = section.get_list('list') + assert sep is not None + sep_list = sep.split(';') + sep_list.pop() + tester.assertEqual(sep_list, list_, f'List values for {key} disagree.') + +def test_path(tester: unittest.TestCase, path: str) -> None: + if 'list' in path: + test_list(tester, path) + return + conf = pom_parser.load_path(path) + getters = [ + ('uint', pom_parser.Configuration.get_uint), + ('int', pom_parser.Configuration.get_int), + ('float', pom_parser.Configuration.get_float), + ('bool', pom_parser.Configuration.get_bool), + ] + (name, getter) = next((name, g) for (name, g) in getters if path.endswith(f'{name}.pom')) + good = conf.section('good') + bad = conf.section('bad') + for key in good.keys(): + section = good.section(key) + value_a = getter(section, 'a') + value_b = getter(section, 'b') + tester.assertEqual(value_a, value_b, f'Values for {key} disagree.') + for key in bad.keys(): + try: + getter(bad, key) + tester.fail(f'Parsing {key} as a {name} should have failed.') + except pom_parser.Error: + pass -- cgit v1.2.3