/
sapertlt
/
layout_switcher
Обзор
Документация
Войти
/
sapertlt
/
layout_switcher
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
develop
tests/test_buffer.py
122 строки
5 KB
Andrey Nikolaev
Initial commit: project setup
14 июн 2026, 23:24
14 июн 2026, 23:24
7085ffc
Код
Авторство
О чём код?
""" Тесты буфера клавиш (KeystrokeBuffer). """ import pytest import time from layout_switcher.core.buffer import KeystrokeBuffer, KeystrokeEntry class TestKeystrokeBuffer: """Тесты для KeystrokeBuffer — циклический буфер нажатий""" @pytest.fixture def buffer(self): return KeystrokeBuffer(max_size=256) def _add_word(self, buffer: KeystrokeBuffer, en_word: str, ru_word: str = ""): """Вспомогательный метод: добавить слово в буфер""" for i, char in enumerate(en_word): ru_char = ru_word[i] if i < len(ru_word) else char buffer.add_keystroke(KeystrokeEntry( keycode=0, en_char=char, ru_char=ru_char, timestamp=time.time(), shift_state=False, )) def _add_space(self, buffer: KeystrokeBuffer): """Добавить пробел (разделитель слов)""" buffer.add_keystroke(KeystrokeEntry( keycode=57, # KEY_SPACE en_char=" ", ru_char=" ", timestamp=time.time(), shift_state=False, )) def test_empty_buffer(self, buffer): """Пустой буфер возвращает пустые строки""" assert buffer.get_last_word() == "" assert buffer.get_last_n_words(1) == "" def test_single_word(self, buffer): """Одно слово без пробелов""" self._add_word(buffer, "hello", "руддщ") result = buffer.get_last_word() assert result == "hello" def test_two_words_get_last(self, buffer): """Два слова — get_last_word возвращает последнее""" self._add_word(buffer, "hello", "руддщ") self._add_space(buffer) self._add_word(buffer, "world", "цщкдв") result = buffer.get_last_word() assert result == "world" def test_get_last_n_words(self, buffer): """Получить последние N слов""" self._add_word(buffer, "one", "щту") self._add_space(buffer) self._add_word(buffer, "two", "ецщ") self._add_space(buffer) self._add_word(buffer, "three", "ерку") result = buffer.get_last_n_words(2) # Должно содержать "two" и "three" (два последних слова) assert "two" in result assert "three" in result def test_clear(self, buffer): """Очистка буфера""" self._add_word(buffer, "test", "еуые") buffer.clear() assert buffer.get_last_word() == "" def test_backspace(self, buffer): """Удаление последнего символа""" self._add_word(buffer, "helo", "рулд") buffer.handle_backspace() result = buffer.get_last_word() assert result == "hel" def test_backspace_on_empty(self, buffer): """Backspace на пустом буфере не вызывает ошибку""" buffer.handle_backspace() assert buffer.get_last_word() == "" def test_circular_buffer(self): """Циклический буфер не переполняется""" small_buffer = KeystrokeBuffer(max_size=5) for i in range(10): small_buffer.add_keystroke(KeystrokeEntry( keycode=0, en_char=chr(ord('a') + i % 26), ru_char=chr(ord('а') + i % 32), timestamp=time.time(), shift_state=False, )) # Буфер не должен упасть, размер ограничен assert len(small_buffer) <= 5 def test_get_last_phrase(self, buffer): """Получить текст до разделителя фразы""" self._add_word(buffer, "hello", "руддщ") # Добавляем точку buffer.add_keystroke(KeystrokeEntry( keycode=0, en_char=".", ru_char=".", timestamp=time.time(), shift_state=False, )) self._add_word(buffer, "world", "цщкдв") result = buffer.get_last_phrase() assert result == "world" def test_entries_for_word(self, buffer): """get_entries_for_word возвращает KeystrokeEntry объекты""" self._add_word(buffer, "abc", "фыв") entries = buffer.get_entries_for_word() assert len(entries) == 3 assert entries[0].en_char == "a" assert entries[0].ru_char == "ф" assert entries[2].en_char == "c"