summaryrefslogtreecommitdiff
path: root/tools/tests
diff options
context:
space:
mode:
authorDragorn421 <Dragorn421@users.noreply.github.com>2024-08-14 19:53:55 +0200
committerGitHub <noreply@github.com>2024-08-14 19:53:55 +0200
commit137e0d2a10fa5ff4d115d1105846e4da1dc58d56 (patch)
tree787335c8f2fa0a7e479eece016c58a2ab7e723f4 /tools/tests
parentab1701b57ad9beac0e43b46250e909665f658924 (diff)
fix preprocess_pragmas and add tests (#2038)
Diffstat (limited to 'tools/tests')
-rw-r--r--tools/tests/README1
-rw-r--r--tools/tests/test_preprocess_pragmas.py107
2 files changed, 108 insertions, 0 deletions
diff --git a/tools/tests/README b/tools/tests/README
new file mode 100644
index 000000000..843622e41
--- /dev/null
+++ b/tools/tests/README
@@ -0,0 +1 @@
+This folder contains tests for the tools living in this repo.
diff --git a/tools/tests/test_preprocess_pragmas.py b/tools/tests/test_preprocess_pragmas.py
new file mode 100644
index 000000000..16caf3fd6
--- /dev/null
+++ b/tools/tests/test_preprocess_pragmas.py
@@ -0,0 +1,107 @@
+import difflib
+from pathlib import Path
+import subprocess
+
+
+# change to True to print output source on failed tests
+PRINT_FAILED_OUTPUT = False
+
+PREPROCESS_PRAGMAS_P = Path("tools/preprocess_pragmas")
+
+
+def fake_struct(pragma_line, i):
+ return f"struct increment_block_number_{pragma_line:05}_{i:03};"
+
+
+def fake_structs(pragma_line, amount):
+ return "\n".join(fake_struct(pragma_line, i) for i in range(amount))
+
+
+data = {
+ "test_noarg": (
+ "gc-us",
+ "source.c",
+ """\
+abc
+#pragma increment_block_number
+def
+""",
+ f"""\
+abc
+{fake_structs(2, 256)}
+#line 3 "source.c"
+def
+""",
+ ),
+ "test_one_arg_match": (
+ "gc-us",
+ "source.c",
+ """\
+abc
+#pragma increment_block_number "gc-us:17"
+def
+""",
+ f"""\
+abc
+{fake_structs(2, 17)}
+#line 3 "source.c"
+def
+""",
+ ),
+ "test_one_arg_no_match": (
+ "gc-us",
+ "source.c",
+ """\
+abc
+#pragma increment_block_number "gc-us-mq:17"
+def
+""",
+ f"""\
+abc
+{fake_structs(2, 256)}
+#line 3 "source.c"
+def
+""",
+ ),
+ "test_several_args": (
+ "gc-us",
+ "source.c",
+ """\
+abc
+#pragma increment_block_number "gc-us-mq:200 gc-us:250"
+def
+""",
+ f"""\
+abc
+{fake_structs(2, 250)}
+#line 3 "source.c"
+def
+""",
+ ),
+}
+
+for test_name, (version, filename, source_in, expected_source_out) in data.items():
+ p = subprocess.Popen(
+ [str(PREPROCESS_PRAGMAS_P), version, filename],
+ stdin=subprocess.PIPE,
+ stdout=subprocess.PIPE,
+ encoding="UTF-8",
+ )
+ source_out, _ = p.communicate(input=source_in)
+ if p.returncode != 0:
+ print(f"{PREPROCESS_PRAGMAS_P} ended with {p.returncode} on {test_name}")
+ exit(1)
+ if source_out != expected_source_out:
+ print(f"failed test {test_name}")
+ if PRINT_FAILED_OUTPUT:
+ print(source_out)
+ for l in difflib.unified_diff(
+ expected_source_out.splitlines(),
+ source_out.splitlines(),
+ "expected output",
+ "actual output",
+ ):
+ print(l)
+ exit(1)
+
+print("all tests ok")