diff options
author | pommicket <pommicket@gmail.com> | 2025-09-23 11:38:46 -0400 |
---|---|---|
committer | pommicket <pommicket@gmail.com> | 2025-09-23 11:38:46 -0400 |
commit | 6407cf22def09de43ec2ec02692c0e4ea3b17742 (patch) | |
tree | b8c98998cd0c2e86f66dd93c44fb6818fe24e0f6 /tests | |
parent | ec02e362365ee199f734cb9e76fc812dd92d3113 (diff) |
Add interpretation tests, fix some interpretation issues
Diffstat (limited to 'tests')
-rw-r--r-- | tests/__init__.py | 11 | ||||
-rw-r--r-- | tests/interpretation.py | 39 |
2 files changed, 49 insertions, 1 deletions
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 |