diff --git a/tests/test_watchdog.py b/tests/test_watchdog.py index 44694e6..494e5dc 100644 --- a/tests/test_watchdog.py +++ b/tests/test_watchdog.py @@ -416,14 +416,26 @@ def test_watchdog_source_has_no_sqlite3_connect(): def test_watchdog_source_has_no_explicit_process_lookup_error(): - """Регрессия: watchdog не должен явно упоминать ProcessLookupError (decision #357). + """Регрессия: watchdog не должен перехватывать ProcessLookupError явно (decision #357). Обработка мёртвых процессов унифицирована через OSError + errno.ESRCH. + Проверяем через AST: в except-обработчиках не должно быть ProcessLookupError. """ + import ast import core.watchdog as wd source = inspect.getsource(wd) - assert "ProcessLookupError" not in source, ( - "REGRESSION: core/watchdog.py явно использует ProcessLookupError — " + tree = ast.parse(source) + + process_lookup_in_except = False + for node in ast.walk(tree): + if isinstance(node, ast.ExceptHandler) and node.type is not None: + for name_node in ast.walk(node.type): + if isinstance(name_node, ast.Name) and name_node.id == "ProcessLookupError": + process_lookup_in_except = True + break + + assert not process_lookup_in_except, ( + "REGRESSION: core/watchdog.py перехватывает ProcessLookupError явно — " "должен использовать OSError + errno.ESRCH" )