summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorpommicket <pommicket@gmail.com>2025-09-23 11:38:46 -0400
committerpommicket <pommicket@gmail.com>2025-09-23 11:38:46 -0400
commit6407cf22def09de43ec2ec02692c0e4ea3b17742 (patch)
treeb8c98998cd0c2e86f66dd93c44fb6818fe24e0f6 /tests
parentec02e362365ee199f734cb9e76fc812dd92d3113 (diff)
Add interpretation tests, fix some interpretation issues
Diffstat (limited to 'tests')
-rw-r--r--tests/__init__.py11
-rw-r--r--tests/interpretation.py39
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