/
sapertlt
/
layout_switcher
Обзор
Документация
Войти
/
sapertlt
/
layout_switcher
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
develop
tests/test_daemon.py
105 строк
4 KB
Andrey Nikolaev
Приостановка автокоррекции при навигации (клавиша Left)
16 июн 2026, 22:44
16 июн 2026, 22:44
83dd1a7
Код
Авторство
О чём код?
""" Тесты логики приостановки авто-коррекции в демоне при навигации (клавиша Left). """ import pytest from unittest.mock import MagicMock import time from layout_switcher.daemon import LayoutSwitcherDaemon from layout_switcher.core.buffer import KeystrokeBuffer from layout_switcher.layout.mappings.en_ru import EnRuMapping from layout_switcher.input.base import KeyEvent, KeyState class TestDaemonAutoCorrectionSuspension: """Тестирование логики приостановки авто-коррекции в демоне.""" @pytest.fixture def mock_controller(self): controller = MagicMock() settings = MagicMock() settings.auto_mode.enabled = True settings.auto_mode.min_word_length = 3 controller.get_settings.return_value = settings return controller @pytest.fixture def daemon(self, mock_controller): daemon = LayoutSwitcherDaemon(settings_controller=mock_controller, enable_gui=False) daemon._buffer = KeystrokeBuffer() daemon._mappings = [EnRuMapping()] daemon._execute_auto_correction = MagicMock() return daemon def _press_key(self, daemon, keycode, keyname, shift=False): event = KeyEvent( keycode=keycode, keyname=keyname, state=KeyState.DOWN, timestamp=time.time(), shift_pressed=shift ) daemon._on_key_event(event) def _press_chars(self, daemon, word): char_map = { 'h': (35, "KEY_H"), 'e': (18, "KEY_E"), 'l': (38, "KEY_L"), 'o': (24, "KEY_O"), 'g': (34, "KEY_G"), 'r': (19, "KEY_R"), 'b': (48, "KEY_B"), 'd': (32, "KEY_D"), 't': (20, "KEY_T"), 'n': (49, "KEY_N"), } for char in word: if char in char_map: kc, kn = char_map[char] self._press_key(daemon, kc, kn) elif char == ' ': self._press_key(daemon, 57, "KEY_SPACE") elif char == '\n': self._press_key(daemon, 28, "KEY_ENTER") def test_left_key_suspends_auto_correction(self, daemon): """Проверка, что нажатие Left приостанавливает автокоррекцию до Enter.""" # 1. Обычный ввод без Left — автокоррекция должна вызываться self._press_chars(daemon, "hel") self._press_key(daemon, 57, "KEY_SPACE") time.sleep(0.05) assert daemon._execute_auto_correction.call_count == 1 daemon._execute_auto_correction.reset_mock() daemon._buffer.clear() # 2. Нажимаем Left self._press_key(daemon, 105, "KEY_LEFT") assert daemon._auto_correction_suspended is True # 3. Вводим слово на той же строке — автокоррекция не должна вызываться self._press_chars(daemon, "hel") self._press_key(daemon, 57, "KEY_SPACE") time.sleep(0.05) assert daemon._execute_auto_correction.call_count == 0 # 4. Вводим следующее слово на той же строке — автокоррекция все еще не вызывается self._press_chars(daemon, "rbt") self._press_key(daemon, 57, "KEY_SPACE") time.sleep(0.05) assert daemon._execute_auto_correction.call_count == 0 # 5. Нажимаем Enter — автокоррекция слова перед Enter НЕ срабатывает, но флаг сбрасывается self._press_chars(daemon, "hel") self._press_key(daemon, 28, "KEY_ENTER") time.sleep(0.05) assert daemon._execute_auto_correction.call_count == 0 assert daemon._auto_correction_suspended is False # 6. Вводим слово после Enter — автокоррекция снова работает self._press_chars(daemon, "hel") self._press_key(daemon, 57, "KEY_SPACE") time.sleep(0.05) assert daemon._execute_auto_correction.call_count == 1