tests: закрыты три дыры в покрытии, найденные мутационным анализом

This commit is contained in:
2026-10-02 03:06:40 +03:00
parent dc8d9bc598
commit 2c7bca0d82
9 changed files with 183 additions and 19 deletions
+17 -2
View File
@@ -42,19 +42,31 @@ def main() -> int:
if not line or line.startswith("#"):
continue
f, old, new, must_fail = line.split("\t")
rows.append((f, old.replace("\\n", "\n"), new.replace("\\n", "\n"), must_fail))
old = old.replace("\\n", "\n")
new = new.replace("\\n", "\n")
# no-op мутация ничего не проверяет — это ошибка таблицы, а не дыра в покрытии.
if old == new:
print(f"ОШИБКА ТАБЛИЦЫ: no-op мутация для {must_fail} (old == new)")
return 2
rows.append((f, old, new, must_fail))
print("=== базовая линия (без мутаций) ===")
base = run_tests(a.gradle)
print(f"тестов найдено: {len(base)}; упавших: {[k for k, v in base.items() if v == 'FAIL']}")
survivors = []
misapplied = 0
for f, old, new, must_fail in rows:
backup = f + ".bak"
shutil.copy2(f, backup)
try:
src = open(f, encoding="utf-8").read()
assert old in src, f"МУТАЦИЯ НЕ ПРИМЕНИЛАСЬ (нет фрагмента) в {f}: {old[:60]!r}"
if old not in src:
# Мутация не применилась: фрагмента нет в файле. Это ошибка таблицы,
# а не доказательство покрытия — такой прогон ничего не значит.
print(f"ОШИБКА ТАБЛИЦЫ | мутация не применилась в {f}: {old[:70]!r}")
misapplied += 1
continue
open(f, "w", encoding="utf-8").write(src.replace(old, new, 1))
st = run_tests(a.gradle)
got = st.get(must_fail, "НЕ НАЙДЕН")
@@ -74,6 +86,9 @@ def main() -> int:
for t, f, old, new in survivors:
print(f" - {t}: {f} `{old[:60]}` -> `{new[:40]}`")
return 1
if misapplied:
print(f"\nПРОВАЛ: {misapplied} мутаций не применились — прогон недействителен")
return 2
print("\nВСЕ МУТАЦИИ УБИТЫ")
return 0