mirror of
https://github.com/zeldaret/oot
synced 2026-07-07 05:55:16 -04:00
fix preprocess_pragmas and add tests (#2038)
This commit is contained in:
@@ -0,0 +1 @@
|
||||
This folder contains tests for the tools living in this repo.
|
||||
@@ -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")
|
||||
Reference in New Issue
Block a user