mirror of
https://github.com/chidiwilliams/buzz.git
synced 2026-03-14 22:55:46 +01:00
117 lines
4.6 KiB
Python
117 lines
4.6 KiB
Python
from PyQt6.QtCore import Qt
|
|
from PyQt6.QtGui import QKeyEvent
|
|
from PyQt6.QtWidgets import QPushButton, QLabel
|
|
from pytestqt.qtbot import QtBot
|
|
|
|
from buzz.locale import _
|
|
from buzz.widgets.preferences_dialog.shortcuts_editor_preferences_widget import (
|
|
ShortcutsEditorPreferencesWidget,
|
|
)
|
|
from buzz.widgets.sequence_edit import SequenceEdit
|
|
|
|
|
|
class TestShortcutsEditorWidget:
|
|
def test_should_update_shortcuts(self, qtbot: QtBot, shortcuts):
|
|
widget = ShortcutsEditorPreferencesWidget(shortcuts=shortcuts)
|
|
qtbot.add_widget(widget)
|
|
|
|
sequence_edit = widget.findChild(SequenceEdit)
|
|
assert sequence_edit.keySequence().toString() == "Ctrl+R"
|
|
with qtbot.wait_signal(widget.shortcuts_changed, timeout=1000):
|
|
sequence_edit.setKeySequence("Ctrl+Shift+R")
|
|
|
|
def test_should_reset_to_defaults(self, qtbot, shortcuts):
|
|
widget = ShortcutsEditorPreferencesWidget(shortcuts=shortcuts)
|
|
qtbot.add_widget(widget)
|
|
|
|
reset_button = widget.findChild(QPushButton)
|
|
assert isinstance(reset_button, QPushButton)
|
|
reset_button.click()
|
|
|
|
labels = widget.findChildren(QLabel)
|
|
sequence_edits = widget.findChildren(SequenceEdit)
|
|
|
|
expected = (
|
|
(_("Open Record Window"), "Ctrl+R"),
|
|
(_("Import File"), "Ctrl+O"),
|
|
(_("Import URL"), "Ctrl+U"),
|
|
(_("Open Preferences Window"), "Ctrl+,"),
|
|
(_("View Transcript Text"), "Ctrl+E"),
|
|
(_("View Transcript Translation"), "Ctrl+L"),
|
|
(_("View Transcript Timestamps"), "Ctrl+T"),
|
|
(_("Search Transcript"), "Ctrl+F"),
|
|
(_("Go to Next Transcript Search Result"), "Ctrl+Return"),
|
|
(_("Go to Previous Transcript Search Result"), "Shift+Return"),
|
|
(_("Scroll to Current Text"), "Ctrl+G"),
|
|
(_("Play/Pause Audio"), "Ctrl+P"),
|
|
(_("Replay Current Segment"), "Ctrl+Shift+P"),
|
|
(_("Toggle Playback Controls"), "Ctrl+Alt+P"),
|
|
(_("Decrease Segment Start Time"), "Ctrl+Left"),
|
|
(_("Increase Segment Start Time"), "Ctrl+Right"),
|
|
(_("Decrease Segment End Time"), "Ctrl+Shift+Left"),
|
|
(_("Increase Segment End Time"), "Ctrl+Shift+Right"),
|
|
(_("Clear History"), "Ctrl+S"),
|
|
(_("Cancel Transcription"), "Ctrl+X"),
|
|
)
|
|
|
|
for i, (label, sequence_edit) in enumerate(zip(labels, sequence_edits)):
|
|
assert isinstance(label, QLabel)
|
|
assert isinstance(sequence_edit, SequenceEdit)
|
|
assert label.text() == expected[i][0]
|
|
assert sequence_edit.keySequence().toString() == expected[i][1]
|
|
|
|
|
|
class TestSequenceEdit:
|
|
def test_should_ignore_modifier_only_keys(self, qtbot: QtBot):
|
|
sequence_edit = SequenceEdit("")
|
|
qtbot.add_widget(sequence_edit)
|
|
|
|
# Test that pressing only modifier keys doesn't record anything
|
|
modifier_keys = [
|
|
Qt.Key.Key_Control,
|
|
Qt.Key.Key_Shift,
|
|
Qt.Key.Key_Alt,
|
|
Qt.Key.Key_Meta,
|
|
]
|
|
|
|
for key in modifier_keys:
|
|
event = QKeyEvent(QKeyEvent.Type.KeyPress, key, Qt.KeyboardModifier.NoModifier)
|
|
sequence_edit.keyPressEvent(event)
|
|
assert sequence_edit.keySequence().toString() == ""
|
|
|
|
def test_should_record_key_combination(self, qtbot: QtBot):
|
|
sequence_edit = SequenceEdit("")
|
|
qtbot.add_widget(sequence_edit)
|
|
|
|
# Test that pressing a key combination is recorded
|
|
event = QKeyEvent(
|
|
QKeyEvent.Type.KeyPress,
|
|
Qt.Key.Key_A,
|
|
Qt.KeyboardModifier.ControlModifier,
|
|
)
|
|
sequence_edit.keyPressEvent(event)
|
|
assert sequence_edit.keySequence().toString() == "Ctrl+A"
|
|
|
|
def test_should_propagate_escape_to_parent(self, qtbot: QtBot):
|
|
from PyQt6.QtWidgets import QWidget
|
|
|
|
class ParentWidget(QWidget):
|
|
def __init__(self):
|
|
super().__init__()
|
|
self.escape_pressed = False
|
|
|
|
def keyPressEvent(self, event: QKeyEvent) -> None:
|
|
if event.key() == Qt.Key.Key_Escape:
|
|
self.escape_pressed = True
|
|
|
|
parent = ParentWidget()
|
|
qtbot.add_widget(parent)
|
|
sequence_edit = SequenceEdit("", parent)
|
|
|
|
# Test that Escape key is propagated to parent
|
|
event = QKeyEvent(QKeyEvent.Type.KeyPress, Qt.Key.Key_Escape, Qt.KeyboardModifier.NoModifier)
|
|
sequence_edit.keyPressEvent(event)
|
|
|
|
assert parent.escape_pressed
|
|
# Escape key should not be recorded in the sequence
|
|
assert sequence_edit.keySequence().toString() == ""
|