zapret-kvn/tests/test_console_interrupt.py
loop-uh a4e5735c96
Some checks failed
Windows project source guards / test (push) Failing after 25s
Запуск: Ctrl+C в консоли собранного приложения не срывает старт
Приложение консольное и прячет окно консоли только после старта. Пока окно
на экране, оно получает фокус, и нажатое в этот момент Ctrl+C приходит как
SIGINT. Так 9 октября сорвалась установка v0.8.18: KeyboardInterrupt посреди
импорта qfluentwidgets, код 1, установщик вернул прежнюю версию.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 16:38:39 +03:00

36 lines
1.2 KiB
Python

"""Ctrl+C в консоли собранного приложения не должен срывать запуск."""
from __future__ import annotations
import signal
import unittest
from unittest.mock import patch
import main
class ConsoleInterruptTests(unittest.TestCase):
def setUp(self) -> None:
previous = signal.getsignal(signal.SIGINT)
self.addCleanup(signal.signal, signal.SIGINT, previous)
signal.signal(signal.SIGINT, signal.default_int_handler)
def test_frozen_app_ignores_ctrl_c(self) -> None:
with patch.object(main.sys, "frozen", True, create=True):
main._ignore_console_interrupt()
self.assertIs(signal.getsignal(signal.SIGINT), signal.SIG_IGN)
def test_source_run_keeps_ctrl_c(self) -> None:
with patch.object(main.sys, "frozen", False, create=True):
main._ignore_console_interrupt()
self.assertIs(signal.getsignal(signal.SIGINT), signal.default_int_handler)
def test_startup_ignores_ctrl_c_before_anything_else(self) -> None:
import inspect
body = inspect.getsource(main.main)
self.assertLess(body.index("_ignore_console_interrupt()"), body.index("_update_plan_argument()"))
if __name__ == "__main__":
unittest.main()