fixturize_test_cases.py (47 lines of code) (raw):
import os
import re
TEST_CASE_RE = re.compile(r'("""|#|)\s*C(\d+)')
for root, _, files in os.walk("tests"):
for file in files:
if file.startswith("test") and file.endswith(".py"):
case_num = None
filepath = os.path.join(root, file)
script = open(filepath).readlines()
for line in script:
if "def test_case" in line:
break
m = TEST_CASE_RE.match(line.strip())
if not m:
continue
if case_num and case_num != m[2]:
print(filepath)
print(f"Found multiple case_nums: {case_num} and {m[2]}")
case_num = m[2]
if case_num:
with open(filepath, "w") as fh:
lines = "\n".join(
[
"",
"@pytest.fixture()",
"def test_case():",
f' return "{case_num}"\n',
"",
]
)
fh.write("import pytest\n")
imports = True
for i in range(len(script)):
line = script[i]
if (
not (
len(line.strip()) == 0
or line.strip().startswith("import")
or line.strip().startswith("from")
)
and imports
):
fh.write(lines)
imports = False
fh.write(f"{line}")
# print(filepath)
# print(lines)
# print("-=----=-")
else:
print(f"Case not found for {filepath}")