diff options
-rw-r--r-- | tests/meson.build | 5 | ||||
-rwxr-xr-x | tests/test_case.py | 45 |
2 files changed, 50 insertions, 0 deletions
diff --git a/tests/meson.build b/tests/meson.build index 7ee6559c..a3d00c7a 100644 --- a/tests/meson.build +++ b/tests/meson.build @@ -37,6 +37,11 @@ test('No duplicate mime-types', args: freedesktop_org_xml, ) +test('Single spelling case', + find_program('test_case.py'), + args: freedesktop_org_xml, +) + test('Sanity check sub-class-of', find_program('test_sub_class_ofs.py'), args: freedesktop_org_xml, diff --git a/tests/test_case.py b/tests/test_case.py new file mode 100755 index 00000000..3235476b --- /dev/null +++ b/tests/test_case.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python3 + +from collections import defaultdict +import itertools +import sys +import xml.etree.ElementTree as ET + +FDO_XMLNS = "{http://www.freedesktop.org/standards/shared-mime-info}" + + +def test_case(fdo_xml: str) -> int: + + with open(fdo_xml, "rb") as f: + tree = ET.parse(f) + + errors = 0 + + types = defaultdict(set) + for elem in itertools.chain( + tree.findall(f"{FDO_XMLNS}mime-type"), + tree.findall(f"{FDO_XMLNS}mime-type/{FDO_XMLNS}alias"), + tree.findall(f"{FDO_XMLNS}mime-type/{FDO_XMLNS}sub-class-of"), + ): + type_ = elem.attrib["type"] + types[type_.lower()].add(type_) + assert types + + for type_, spellings in types.items(): + if len(spellings) != 1: + print( + f"{fdo_xml}: multiple spellings differing only by case " + f"for {', '.join(sorted(spellings))}", + file=sys.stderr, + ) + errors += 1 + + return errors + + +if __name__ == "__main__": + if len(sys.argv) != 2: + print(f"Usage: {__file__} FREEDESKTOP_ORG_XML", file=sys.stderr) + sys.exit(2) + + sys.exit(test_case(sys.argv[1]) and 1 or 0) |