summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVille Skyttä <ville.skytta@iki.fi>2020-12-26 18:01:29 +0200
committerVille Skyttä <ville.skytta@iki.fi>2020-12-26 18:36:12 +0200
commit27e67372b298a4db69e3f4f4daf15bf66b70a091 (patch)
treea61aacfc8058e86a21afb0c7b4006755c47b2cc7
parentc5384a728eaf0d6b2e7955bc00587c04fe71ffbd (diff)
downloadshared-mime-info-27e67372b298a4db69e3f4f4daf15bf66b70a091.tar.gz
tests/test_sub_class_ofs.py: new sub-class-of sanity check test
-rw-r--r--tests/meson.build5
-rwxr-xr-xtests/test_sub_class_ofs.py46
2 files changed, 51 insertions, 0 deletions
diff --git a/tests/meson.build b/tests/meson.build
index 3b01da17..7ee6559c 100644
--- a/tests/meson.build
+++ b/tests/meson.build
@@ -37,6 +37,11 @@ test('No duplicate mime-types',
args: freedesktop_org_xml,
)
+test('Sanity check sub-class-of',
+ find_program('test_sub_class_ofs.py'),
+ args: freedesktop_org_xml,
+)
+
test('xmllint freedesktop.org.xml',
xmllint,
args: [ '--noout', '--valid', freedesktop_org_xml, ],
diff --git a/tests/test_sub_class_ofs.py b/tests/test_sub_class_ofs.py
new file mode 100755
index 00000000..2a48aec1
--- /dev/null
+++ b/tests/test_sub_class_ofs.py
@@ -0,0 +1,46 @@
+#!/usr/bin/env python3
+
+import sys
+import xml.etree.ElementTree as ET
+
+FDO_XMLNS = "{http://www.freedesktop.org/standards/shared-mime-info}"
+
+
+def test_sub_class_ofs(fdo_xml: str) -> int:
+
+ with open(fdo_xml, "rb") as f:
+ tree = ET.parse(f)
+
+ errors = 0
+
+ mime_types = set()
+ sub_class_ofs = set()
+ for elem in tree.findall(f"{FDO_XMLNS}mime-type"):
+ mime_type = elem.attrib["type"]
+ mime_types.add(mime_type)
+ for elem in elem.findall(f"{FDO_XMLNS}sub-class-of"):
+ sub_class_of = elem.attrib["type"]
+
+ if mime_type == sub_class_of:
+ print(f"{fdo_xml}: type {mime_type} is sub-class-of itself",
+ file=sys.stderr)
+ errors += 1
+
+ sub_class_ofs.add(sub_class_of)
+
+ assert mime_types and sub_class_ofs
+
+ for not_found in sub_class_ofs - mime_types:
+ print(f"{fdo_xml}: parent sub-class-of type {not_found} not found",
+ 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_sub_class_ofs(sys.argv[1]) and 1 or 0)