beeref/tests/widgets/controls/test_mouse.py

1258 lines
36 KiB
Python
Raw Permalink Normal View History

from unittest.mock import patch, MagicMock
from PyQt6 import QtWidgets, QtCore
from PyQt6.QtCore import Qt
from beeref.config.controls import MouseConfig
from beeref.widgets.controls.mouse import (
MouseDelegate,
MouseControlsEditor,
MouseModel,
MouseProxy,
)
from beeref.utils import ActionList
def test_mouse_editor_inits_buttons_and_modifiers_when_not_configured(view):
action = MouseConfig(
id='foo1',
group='foo',
text='Foo',
button='Not Configured',
modifiers=[],
invertible=True)
with patch('beeref.config.controls.KeyboardSettings.MOUSE_ACTIONS',
ActionList([action])):
editor = MouseControlsEditor(
view, index=MagicMock(row=MagicMock(return_value=0)))
assert editor.button_input.count() == 3
assert editor.button_input.currentIndex() == 0
assert len(editor.checkboxes) == 6
for checkbox in editor.checkboxes.values():
assert checkbox.isChecked() is False
def test_mouse_editor_inits_buttons_and_modifiers_when_configured(view):
action = MouseConfig(
id='foo1',
group='foo',
text='Foo',
button='Left',
modifiers=['Alt', 'Ctrl'],
invertible=True)
with patch('beeref.config.controls.KeyboardSettings.MOUSE_ACTIONS',
ActionList([action])):
editor = MouseControlsEditor(
view, index=MagicMock(row=MagicMock(return_value=0)))
assert editor.button_input.count() == 3
assert editor.button_input.currentIndex() == 1
assert len(editor.checkboxes) == 6
for key, checkbox in editor.checkboxes.items():
if key in ('Alt', 'Ctrl'):
assert checkbox.isChecked() is True
else:
assert checkbox.isChecked() is False
def test_mouse_editor_set_modifiers_no_modifier(view):
action = MouseConfig(
id='foo1',
group='foo',
text='Foo',
button='Left',
modifiers=['Alt', 'Ctrl'],
invertible=True)
with patch('beeref.config.controls.KeyboardSettings.MOUSE_ACTIONS',
ActionList([action])):
editor = MouseControlsEditor(
view, index=MagicMock(row=MagicMock(return_value=0)))
editor.set_modifiers_no_modifier()
for key, checkbox in editor.checkboxes.items():
if key == 'No Modifier':
assert checkbox.isChecked() is True
else:
assert checkbox.isChecked() is False
def test_mouse_editor_on_modifiers_changed_when_no_modifiers_checked(view):
action = MouseConfig(
id='foo1',
group='foo',
text='Foo',
button='Left',
modifiers=['Alt', 'Ctrl'],
invertible=True)
with patch('beeref.config.controls.KeyboardSettings.MOUSE_ACTIONS',
ActionList([action])):
editor = MouseControlsEditor(
view, index=MagicMock(row=MagicMock(return_value=0)))
editor.on_modifiers_changed('No Modifier', Qt.CheckState.Checked.value)
for key, checkbox in editor.checkboxes.items():
if key == 'No Modifier':
assert checkbox.isChecked() is True
else:
assert checkbox.isChecked() is False
def test_mouse_editor_on_modifiers_changed_when_a_modifier_checked(view):
action = MouseConfig(
id='foo1',
group='foo',
text='Foo',
button='Left',
modifiers=['No Modifier'],
invertible=True)
with patch('beeref.config.controls.KeyboardSettings.MOUSE_ACTIONS',
ActionList([action])):
editor = MouseControlsEditor(
view, index=MagicMock(row=MagicMock(return_value=0)))
editor.on_modifiers_changed('Alt', Qt.CheckState.Checked.value)
for key, checkbox in editor.checkboxes.items():
if key == 'No Modifier':
assert checkbox.isChecked() is False
def test_mouse_editor_on_modifiers_changed_when_everything_unchecked(view):
action = MouseConfig(
id='foo1',
group='foo',
text='Foo',
button='Left',
modifiers=[],
invertible=True)
with patch('beeref.config.controls.KeyboardSettings.MOUSE_ACTIONS',
ActionList([action])):
editor = MouseControlsEditor(
view, index=MagicMock(row=MagicMock(return_value=0)))
editor.on_modifiers_changed('Alt', Qt.CheckState.Unchecked.value)
for key, checkbox in editor.checkboxes.items():
if key == 'No Modifier':
assert checkbox.isChecked() is True
else:
assert checkbox.isChecked() is False
def test_mouse_editor_get_modifiers(view):
action = MouseConfig(
id='foo1',
group='foo',
text='Foo',
button='Left',
modifiers=[],
invertible=True)
with patch('beeref.config.controls.KeyboardSettings.MOUSE_ACTIONS',
ActionList([action])):
editor = MouseControlsEditor(
view, index=MagicMock(row=MagicMock(return_value=0)))
editor.checkboxes['Alt'].setChecked(True)
editor.get_modifiers() == ['Alt']
def test_mouse_editor_get_modifiers_when_no_modifiers(view):
action = MouseConfig(
id='foo1',
group='foo',
text='Foo',
button='Left',
modifiers=[],
invertible=True)
with patch('beeref.config.controls.KeyboardSettings.MOUSE_ACTIONS',
ActionList([action])):
editor = MouseControlsEditor(
view, index=MagicMock(row=MagicMock(return_value=0)))
editor.ignore_on_changed = True
editor.checkboxes['No Modifier'].setChecked(True)
editor.checkboxes['Alt'].setChecked(True)
editor.get_modifiers() == ['No Modifier']
def test_mouse_editor_get_modifiers_when_not_configured_cleaned(view):
action = MouseConfig(
id='foo1',
group='foo',
text='Foo',
button='Not Configured',
modifiers=[],
invertible=True)
with patch('beeref.config.controls.KeyboardSettings.MOUSE_ACTIONS',
ActionList([action])):
editor = MouseControlsEditor(
view, index=MagicMock(row=MagicMock(return_value=0)))
editor.ignore_on_changed = True
editor.checkboxes['No Modifier'].setChecked(True)
editor.checkboxes['Alt'].setChecked(True)
editor.ignore_on_changed = False
assert editor.get_modifiers(cleaned=True) == []
def test_mouse_editor_get_modifiers_when_not_configured_cleaned_false(view):
action = MouseConfig(
id='foo1',
group='foo',
text='Foo',
button='Not Configured',
modifiers=[],
invertible=True)
with patch('beeref.config.controls.KeyboardSettings.MOUSE_ACTIONS',
ActionList([action])):
editor = MouseControlsEditor(
view, index=MagicMock(row=MagicMock(return_value=0)))
editor.ignore_on_changed = True
editor.checkboxes['Shift'].setChecked(True)
editor.checkboxes['Alt'].setChecked(True)
editor.ignore_on_changed = False
assert editor.get_modifiers(cleaned=False) == ['Shift', 'Alt']
def test_mouse_editor_set_modifiers(view):
action = MouseConfig(
id='foo1',
group='foo',
text='Foo',
button='Left',
modifiers=[],
invertible=True)
with patch('beeref.config.controls.KeyboardSettings.MOUSE_ACTIONS',
ActionList([action])):
editor = MouseControlsEditor(
view, index=MagicMock(row=MagicMock(return_value=0)))
editor.set_modifiers(['Alt', 'Shift'])
for key, checkbox in editor.checkboxes.items():
if key in ['Alt', 'Shift']:
assert checkbox.isChecked() is True
else:
assert checkbox.isChecked() is False
def test_mouse_editor_on_button_changed_when_button(view):
action = MouseConfig(
id='foo1',
group='foo',
text='Foo',
button='Left',
modifiers=['No Modifier'],
invertible=True)
with patch('beeref.config.controls.KeyboardSettings.MOUSE_ACTIONS',
ActionList([action])):
editor = MouseControlsEditor(
view, index=MagicMock(row=MagicMock(return_value=0)))
editor.ignore_on_changed = True
for checkbox in editor.checkboxes.values():
checkbox.setChecked(False)
checkbox.setEnabled(False)
editor.ignore_on_changed = False
editor.on_button_changed()
for key, checkbox in editor.checkboxes.items():
assert checkbox.isEnabled() is True
if key == 'No Modifier':
assert checkbox.isChecked() is True
else:
checkbox.isChecked() is False
def test_mouse_editor_on_button_changed_when_no_button(view):
action = MouseConfig(
id='foo1',
group='foo',
text='Foo',
button='Not Configured',
modifiers=['No Modifier'],
invertible=True)
with patch('beeref.config.controls.KeyboardSettings.MOUSE_ACTIONS',
ActionList([action])):
editor = MouseControlsEditor(
view, index=MagicMock(row=MagicMock(return_value=0)))
editor.ignore_on_changed = True
for checkbox in editor.checkboxes.values():
checkbox.setChecked(True)
checkbox.setEnabled(True)
editor.ignore_on_changed = False
editor.on_button_changed()
for checkbox in editor.checkboxes.values():
assert checkbox.isEnabled() is False
assert checkbox.isChecked() is False
def test_mouse_editor_set_modifiers_enabled_true(view):
action = MouseConfig(
id='foo1',
group='foo',
text='Foo',
button='Not Configured',
modifiers=[],
invertible=True)
with patch('beeref.config.controls.KeyboardSettings.MOUSE_ACTIONS',
ActionList([action])):
editor = MouseControlsEditor(
view, index=MagicMock(row=MagicMock(return_value=0)))
for checkbox in editor.checkboxes.values():
checkbox.setEnabled(False)
editor.set_modifiers_enabled(True)
for checkbox in editor.checkboxes.values():
assert checkbox.isEnabled() is True
def test_mouse_editor_set_modifiers_enabled_false(view):
action = MouseConfig(
id='foo1',
group='foo',
text='Foo',
button='Not Configured',
modifiers=[],
invertible=True)
with patch('beeref.config.controls.KeyboardSettings.MOUSE_ACTIONS',
ActionList([action])):
editor = MouseControlsEditor(
view, index=MagicMock(row=MagicMock(return_value=0)))
for checkbox in editor.checkboxes.values():
checkbox.setEnabled(True)
editor.set_modifiers_enabled(False)
for checkbox in editor.checkboxes.values():
assert checkbox.isEnabled() is False
def test_mouse_editor_get_button(view):
action = MouseConfig(
id='foo1',
group='foo',
text='Foo',
button='Not Configured',
modifiers=[],
invertible=True)
with patch('beeref.config.controls.KeyboardSettings.MOUSE_ACTIONS',
ActionList([action])):
editor = MouseControlsEditor(
view, index=MagicMock(row=MagicMock(return_value=0)))
editor.button_input.setCurrentIndex(1)
assert editor.get_button() == 'Left'
def test_mouse_editor_set_button(view):
action = MouseConfig(
id='foo1',
group='foo',
text='Foo',
button='Not Configured',
modifiers=[],
invertible=True)
with patch('beeref.config.controls.KeyboardSettings.MOUSE_ACTIONS',
ActionList([action])):
editor = MouseControlsEditor(
view, index=MagicMock(row=MagicMock(return_value=0)))
editor.set_button('Left')
assert editor.button_input.currentIndex() == 1
def test_mouse_editor_get_temp_action(view):
action = MouseConfig(
id='foo1',
group='foo',
text='Foo',
button='Left',
modifiers=['Alt'],
invertible=True)
with patch('beeref.config.controls.KeyboardSettings.MOUSE_ACTIONS',
ActionList([action])):
editor = MouseControlsEditor(
view, index=MagicMock(row=MagicMock(return_value=0)))
tmp = editor.get_temp_action()
assert tmp.get_button() == 'Left'
assert tmp.get_modifiers() == ['Alt']
def test_mouse_editor_reset_inputs(view):
action = MouseConfig(
id='foo1',
group='foo',
text='Foo',
button='Left',
modifiers=['Alt'],
invertible=True)
with patch('beeref.config.controls.KeyboardSettings.MOUSE_ACTIONS',
ActionList([action])):
editor = MouseControlsEditor(
view, index=MagicMock(row=MagicMock(return_value=0)))
editor.set_button('Middle')
editor.set_modifiers(['Ctrl'])
editor.reset_inputs()
assert editor.get_button() == 'Left'
assert editor.get_modifiers() == ['Alt']
@patch('beeref.widgets.controls.mouse.MouseControlsEditor.accept')
def test_mouse_editor_on_save_no_conflicts(accept_mock, view):
a1 = MouseConfig(
id='foo1',
group='foo',
text='Foo',
button='Left',
modifiers=['Alt'],
invertible=True)
a2 = MouseConfig(
id='bar1',
group='bar',
text='Bar',
button='Middle',
modifiers=['Ctrl'],
invertible=True)
with patch('beeref.config.controls.KeyboardSettings.MOUSE_ACTIONS',
ActionList([a1, a2])):
editor = MouseControlsEditor(
view, index=MagicMock(row=MagicMock(return_value=0)))
editor.set_button('Middle')
editor.set_modifiers(['Shift'])
editor.on_save()
assert editor.get_button() == 'Middle'
assert editor.get_modifiers() == ['Shift']
assert editor.remove_from_other is None
accept_mock.assert_called_once_with()
@patch('beeref.widgets.controls.mouse.MouseControlsEditor.accept')
def test_mouse_editor_on_save_reenter_existing_shortcut(accept_mock, view):
a1 = MouseConfig(
id='foo1',
group='foo',
text='Foo',
button='Left',
modifiers=['Alt'],
invertible=True)
a2 = MouseConfig(
id='bar1',
group='bar',
text='Bar',
button='Middle',
modifiers=['Ctrl'],
invertible=True)
with patch('beeref.config.controls.KeyboardSettings.MOUSE_ACTIONS',
ActionList([a1, a2])):
editor = MouseControlsEditor(
view, index=MagicMock(row=MagicMock(return_value=0)))
editor.on_save()
assert editor.get_button() == 'Left'
assert editor.get_modifiers() == ['Alt']
assert editor.remove_from_other is None
accept_mock.assert_called_once_with()
@patch('PyQt6.QtWidgets.QMessageBox.question',
return_value=QtWidgets.QMessageBox.StandardButton.No)
@patch('beeref.widgets.controls.mouse.MouseControlsEditor.accept')
def test_mouse_editor_on_save_conflicts_cancel(accept_mock, msg_mock, view):
a1 = MouseConfig(
id='foo1',
group='foo',
text='Foo',
button='Left',
modifiers=['Alt'],
invertible=True)
a2 = MouseConfig(
id='bar1',
group='bar',
text='Bar',
button='Middle',
modifiers=['Ctrl'],
invertible=True)
with patch('beeref.config.controls.KeyboardSettings.MOUSE_ACTIONS',
ActionList([a1, a2])):
editor = MouseControlsEditor(
view, index=MagicMock(row=MagicMock(return_value=0)))
editor.set_button('Middle')
editor.set_modifiers(['Ctrl'])
editor.on_save()
assert editor.get_button() == 'Left'
assert editor.get_modifiers() == ['Alt']
assert editor.remove_from_other is None
accept_mock.assert_not_called()
@patch('PyQt6.QtWidgets.QMessageBox.question',
return_value=QtWidgets.QMessageBox.StandardButton.Yes)
@patch('beeref.widgets.controls.mouse.MouseControlsEditor.accept')
def test_mouse_editor_on_save_conflicts_confirm(accept_mock, msg_mock, view):
a1 = MouseConfig(
id='foo1',
group='foo',
text='Foo',
button='Left',
modifiers=['Alt'],
invertible=True)
a2 = MouseConfig(
id='bar1',
group='bar',
text='Bar',
button='Middle',
modifiers=['Ctrl'],
invertible=True)
with patch('beeref.config.controls.KeyboardSettings.MOUSE_ACTIONS',
ActionList([a1, a2])):
editor = MouseControlsEditor(
view, index=MagicMock(row=MagicMock(return_value=0)))
editor.set_button('Middle')
editor.set_modifiers(['Ctrl'])
editor.on_save()
assert editor.get_button() == 'Middle'
assert editor.get_modifiers() == ['Ctrl']
assert editor.remove_from_other == a2
accept_mock.assert_called_once_with()
def test_mouse_delegate_create_editor(view):
delegate = MouseDelegate()
model = MouseModel()
widget = delegate.createEditor(
view, QtWidgets.QStyleOptionViewItem(), index=model.index(0, 3))
assert isinstance(widget.editor, MouseControlsEditor)
def test_mouse_delegate_setmodeldata(view):
action = MouseConfig(
id='foo1',
group='foo',
text='Foo',
button='Left',
modifiers=['Alt'],
invertible=True)
with patch('beeref.config.controls.KeyboardSettings.MOUSE_ACTIONS',
ActionList([action])):
delegate = MouseDelegate()
model = MouseModel()
widget = delegate.createEditor(
view, QtWidgets.QStyleOptionViewItem(), index=model.index(0, 3))
widget.editor.set_button('Middle')
widget.editor.set_modifiers(['Ctrl', 'Shift'])
with patch.object(widget.editor, 'result',
return_value=QtWidgets.QDialog.DialogCode.Accepted):
delegate.setModelData(widget, model, index=model.index(0, 3))
assert action.get_button() == 'Middle'
assert action.get_modifiers() == ['Shift', 'Ctrl']
def test_mouse_model_columncount():
model = MouseModel()
model.columnCount(None) == 4
def test_mouse_model_rowcount():
a1 = MouseConfig(
id='foo1',
group='foo',
text='Foo',
button='Left',
modifiers=['Alt'],
invertible=True)
a2 = MouseConfig(
id='bar1',
group='bar',
text='Bar',
button='Middle',
modifiers=['Ctrl'],
invertible=True)
with patch('beeref.config.controls.KeyboardSettings.MOUSE_ACTIONS',
ActionList([a1, a2])):
model = MouseModel()
model.rowCount(None) == 2
def test_mouse_model_headerdata():
model = MouseModel()
header = model.headerData(
0,
QtCore.Qt.Orientation.Horizontal,
QtCore.Qt.ItemDataRole.DisplayRole)
assert header == 'Action'
def test_flags_first_column():
model = MouseModel()
flags = model.flags(model.index(0, 0))
assert flags == (QtCore.Qt.ItemFlag.ItemIsEnabled
| QtCore.Qt.ItemFlag.ItemNeverHasChildren)
def test_flags_modifiers_column():
model = MouseModel()
flags = model.flags(model.index(0, 2))
assert flags == (QtCore.Qt.ItemFlag.ItemIsEnabled
| QtCore.Qt.ItemFlag.ItemNeverHasChildren
| QtCore.Qt.ItemFlag.ItemIsEditable)
def test_flags_inverted_column_when_invertible():
action = MouseConfig(
id='foo1',
group='foo',
text='Foo',
button='Left',
modifiers=['Alt'],
invertible=True)
with patch('beeref.config.controls.KeyboardSettings.MOUSE_ACTIONS',
ActionList([action])):
model = MouseModel()
flags = model.flags(model.index(0, 4))
assert flags == (QtCore.Qt.ItemFlag.ItemIsEnabled
| QtCore.Qt.ItemFlag.ItemNeverHasChildren
| QtCore.Qt.ItemFlag.ItemIsEditable
| QtCore.Qt.ItemFlag.ItemIsUserCheckable)
def test_flags_inverted_column_when_not_invertible():
action = MouseConfig(
id='foo1',
group='foo',
text='Foo',
button='Left',
modifiers=['Alt'],
invertible=False)
with patch('beeref.config.controls.KeyboardSettings.MOUSE_ACTIONS',
ActionList([action])):
model = MouseModel()
flags = model.flags(model.index(0, 4))
assert flags == (QtCore.Qt.ItemFlag.ItemIsEnabled
| QtCore.Qt.ItemFlag.ItemNeverHasChildren)
def test_mouse_model_data_gets_text():
action = MouseConfig(
id='foo1',
group='foo',
text='Foo',
button='Left',
modifiers=['Alt'],
invertible=False)
with patch('beeref.config.controls.KeyboardSettings.MOUSE_ACTIONS',
ActionList([action])):
model = MouseModel()
value = model.data(
index=MagicMock(
column=MagicMock(return_value=0),
row=MagicMock(return_value=0)),
role=QtCore.Qt.ItemDataRole.DisplayRole)
assert value == 'Foo'
def test_mouse_model_data_gets_changed_when_not_changed():
action = MouseConfig(
id='foo1',
group='foo',
text='Foo',
button='Left',
modifiers=['Alt'],
invertible=False)
with patch('beeref.config.controls.KeyboardSettings.MOUSE_ACTIONS',
ActionList([action])):
model = MouseModel()
value = model.data(
index=MagicMock(
column=MagicMock(return_value=1),
row=MagicMock(return_value=0)),
role=QtCore.Qt.ItemDataRole.DisplayRole)
assert value is None
def test_mouse_model_data_gets_changed_when_changed():
action = MouseConfig(
id='foo1',
group='foo',
text='Foo',
button='Left',
modifiers=['Alt'],
invertible=False)
with patch('beeref.config.controls.KeyboardSettings.MOUSE_ACTIONS',
ActionList([action])):
model = MouseModel()
action.set_button('Middle')
value = model.data(
index=MagicMock(
column=MagicMock(return_value=1),
row=MagicMock(return_value=0)),
role=QtCore.Qt.ItemDataRole.DisplayRole)
assert value == ''
def test_mouse_model_data_gets_button():
action = MouseConfig(
id='foo1',
group='foo',
text='Foo',
button='Left',
modifiers=['Alt'],
invertible=False)
with patch('beeref.config.controls.KeyboardSettings.MOUSE_ACTIONS',
ActionList([action])):
model = MouseModel()
value = model.data(
index=MagicMock(
column=MagicMock(return_value=2),
row=MagicMock(return_value=0)),
role=QtCore.Qt.ItemDataRole.DisplayRole)
assert value == 'Left'
def test_mouse_model_data_gets_modifiers():
action = MouseConfig(
id='foo1',
group='foo',
text='Foo',
button='Left',
modifiers=['Ctrl', 'Alt'],
invertible=False)
with patch('beeref.config.controls.KeyboardSettings.MOUSE_ACTIONS',
ActionList([action])):
model = MouseModel()
value = model.data(
index=MagicMock(
column=MagicMock(return_value=3),
row=MagicMock(return_value=0)),
role=QtCore.Qt.ItemDataRole.DisplayRole)
assert value == 'Ctrl + Alt'
def test_mouse_model_data_gets_inverted_when_invertible():
action = MouseConfig(
id='foo1',
group='foo',
text='Foo',
button='Left',
modifiers=['Ctrl', 'Alt'],
invertible=True)
with patch('beeref.config.controls.KeyboardSettings.MOUSE_ACTIONS',
ActionList([action])):
model = MouseModel()
value = model.data(
index=MagicMock(
column=MagicMock(return_value=4),
row=MagicMock(return_value=0)),
role=QtCore.Qt.ItemDataRole.DisplayRole)
assert value == 'No'
def test_mouse_model_data_gets_inverted_when_not_invertible():
action = MouseConfig(
id='foo1',
group='foo',
text='Foo',
button='Left',
modifiers=['Ctrl', 'Alt'],
invertible=False)
with patch('beeref.config.controls.KeyboardSettings.MOUSE_ACTIONS',
ActionList([action])):
model = MouseModel()
value = model.data(
index=MagicMock(
column=MagicMock(return_value=4),
row=MagicMock(return_value=0)),
role=QtCore.Qt.ItemDataRole.DisplayRole)
assert value is None
def test_mouse_model_data_tooltip_changed_when_not_changed():
action = MouseConfig(
id='foo1',
group='foo',
text='Foo',
button='Left',
modifiers=['Ctrl', 'Alt'],
invertible=False)
with patch('beeref.config.controls.KeyboardSettings.MOUSE_ACTIONS',
ActionList([action])):
model = MouseModel()
value = model.data(
index=MagicMock(
column=MagicMock(return_value=1),
row=MagicMock(return_value=0)),
role=QtCore.Qt.ItemDataRole.ToolTipRole)
assert value is None
def test_mouse_model_data_tooltip_changed_when_changed():
action = MouseConfig(
id='foo1',
group='foo',
text='Foo',
button='Left',
modifiers=['Alt'],
invertible=False)
with patch('beeref.config.controls.KeyboardSettings.MOUSE_ACTIONS',
ActionList([action])):
model = MouseModel()
action.set_button('Middle')
value = model.data(
index=MagicMock(
column=MagicMock(return_value=1),
row=MagicMock(return_value=0)),
role=QtCore.Qt.ItemDataRole.ToolTipRole)
assert value == 'Changed from default'
def test_mouse_model_data_tooltip_button_when_changed():
action = MouseConfig(
id='foo1',
group='foo',
text='Foo',
button='Left',
modifiers=['Ctrl', 'Alt'],
invertible=False)
with patch('beeref.config.controls.KeyboardSettings.MOUSE_ACTIONS',
ActionList([action])):
model = MouseModel()
action.set_button('Middle')
value = model.data(
index=MagicMock(
column=MagicMock(return_value=2),
row=MagicMock(return_value=0)),
role=QtCore.Qt.ItemDataRole.ToolTipRole)
assert value == 'Default: Left'
def test_mouse_model_data_tooltip_button_when_changed_from_not_configured():
action = MouseConfig(
id='foo1',
group='foo',
text='Foo',
button='Not Configured',
modifiers=[],
invertible=False)
with patch('beeref.config.controls.KeyboardSettings.MOUSE_ACTIONS',
ActionList([action])):
model = MouseModel()
action.set_button('Middle')
value = model.data(
index=MagicMock(
column=MagicMock(return_value=2),
row=MagicMock(return_value=0)),
role=QtCore.Qt.ItemDataRole.ToolTipRole)
assert value == 'Default: Not configured'
def test_mouse_model_data_tooltip_modifiers_when_changed_from_not_configured():
action = MouseConfig(
id='foo1',
group='foo',
text='Foo',
button='Not Configured',
modifiers=[],
invertible=False)
with patch('beeref.config.controls.KeyboardSettings.MOUSE_ACTIONS',
ActionList([action])):
model = MouseModel()
action.set_modifiers(['Shift'])
value = model.data(
index=MagicMock(
column=MagicMock(return_value=3),
row=MagicMock(return_value=0)),
role=QtCore.Qt.ItemDataRole.ToolTipRole)
assert value == 'Default: Not configured'
def test_mouse_model_data_tooltip_modifiers_when_changed():
action = MouseConfig(
id='foo1',
group='foo',
text='Foo',
button='Left',
modifiers=['Ctrl', 'Alt'],
invertible=False)
with patch('beeref.config.controls.KeyboardSettings.MOUSE_ACTIONS',
ActionList([action])):
model = MouseModel()
action.set_modifiers(['Shift'])
value = model.data(
index=MagicMock(
column=MagicMock(return_value=3),
row=MagicMock(return_value=0)),
role=QtCore.Qt.ItemDataRole.ToolTipRole)
assert value == 'Default: Ctrl + Alt'
def test_mouse_model_data_tooltip_inverted_when_changed_and_invertible():
action = MouseConfig(
id='foo1',
group='foo',
text='Foo',
button='Left',
modifiers=['Alt'],
invertible=True)
with patch('beeref.config.controls.KeyboardSettings.MOUSE_ACTIONS',
ActionList([action])):
model = MouseModel()
action.set_inverted(True)
value = model.data(
index=MagicMock(
column=MagicMock(return_value=4),
row=MagicMock(return_value=0)),
role=QtCore.Qt.ItemDataRole.ToolTipRole)
assert value == 'Default: No'
def test_mouse_model_data_tooltip_inverted_when_changed_and_not_invertible():
action = MouseConfig(
id='foo1',
group='foo',
text='Foo',
button='Left',
modifiers=['Alt'],
invertible=False)
with patch('beeref.config.controls.KeyboardSettings.MOUSE_ACTIONS',
ActionList([action])):
model = MouseModel()
action.set_button('Middle')
value = model.data(
index=MagicMock(
column=MagicMock(return_value=4),
row=MagicMock(return_value=0)),
role=QtCore.Qt.ItemDataRole.ToolTipRole)
assert value is None
def test_mouse_model_data_checkstaterole_invertible_invertedcol_inverted():
action = MouseConfig(
id='foo1',
group='foo',
text='Foo',
button='Left',
modifiers=['Alt'],
invertible=True)
with patch('beeref.config.controls.KeyboardSettings.MOUSE_ACTIONS',
ActionList([action])):
model = MouseModel()
action.set_inverted(True)
value = model.data(
index=MagicMock(
column=MagicMock(return_value=4),
row=MagicMock(return_value=0)),
role=QtCore.Qt.ItemDataRole.CheckStateRole)
assert value == Qt.CheckState.Checked
def test_mouse_model_data_checkstaterole_invertible_invertedcol_not_inverted():
action = MouseConfig(
id='foo1',
group='foo',
text='Foo',
button='Left',
modifiers=['Alt'],
invertible=True)
with patch('beeref.config.controls.KeyboardSettings.MOUSE_ACTIONS',
ActionList([action])):
model = MouseModel()
value = model.data(
index=MagicMock(
column=MagicMock(return_value=4),
row=MagicMock(return_value=0)),
role=QtCore.Qt.ItemDataRole.CheckStateRole)
assert value == Qt.CheckState.Unchecked
def test_mouse_model_data_checkstaterole_other_column():
action = MouseConfig(
id='foo1',
group='foo',
text='Foo',
button='Left',
modifiers=['Alt'],
invertible=True)
with patch('beeref.config.controls.KeyboardSettings.MOUSE_ACTIONS',
ActionList([action])):
model = MouseModel()
value = model.data(
index=MagicMock(
column=MagicMock(return_value=3),
row=MagicMock(return_value=0)),
role=QtCore.Qt.ItemDataRole.CheckStateRole)
assert value is None
def test_mouse_model_setdate_saves_inverted():
action = MouseConfig(
id='foo1',
group='foo',
text='Foo',
button='Left',
modifiers=['Alt'],
invertible=True)
with patch('beeref.config.controls.KeyboardSettings.MOUSE_ACTIONS',
ActionList([action])):
model = MouseModel()
model.setData(
index=MagicMock(
column=MagicMock(return_value=4),
row=MagicMock(return_value=0)),
value=Qt.CheckState.Checked.value,
role=None)
assert action.get_inverted() is True
def test_mouse_model_setdata_saves_controls():
action = MouseConfig(
id='foo1',
group='foo',
text='Foo',
button='Left',
modifiers=['Alt'],
invertible=True)
with patch('beeref.config.controls.KeyboardSettings.MOUSE_ACTIONS',
ActionList([action])):
model = MouseModel()
model.setData(
index=MagicMock(
column=MagicMock(return_value=3),
row=MagicMock(return_value=0)),
value={'button': 'Middle', 'modifiers': ['Ctrl']},
role=None)
assert action.get_button() == 'Middle'
assert action.get_modifiers() == ['Ctrl']
def test_mouse_model_setdata_saves_controls_and_removes_from_other():
a1 = MouseConfig(
id='foo1',
group='foo',
text='Foo',
button='Left',
modifiers=['Alt'],
invertible=True)
a2 = MouseConfig(
id='bar1',
group='bar',
text='Bar',
button='Middle',
modifiers=['Ctrl'],
invertible=True)
with patch('beeref.config.controls.KeyboardSettings.MOUSE_ACTIONS',
ActionList([a1, a2])):
model = MouseModel()
model.setData(
index=MagicMock(
column=MagicMock(return_value=3),
row=MagicMock(return_value=0)),
value={'button': 'Middle', 'modifiers': ['Ctrl']},
role=None,
remove_from_other=a2)
assert a1.get_button() == 'Middle'
assert a1.get_modifiers() == ['Ctrl']
assert a2.get_button() == 'Not Configured'
assert a2.get_modifiers() == []
def test_mouse_proxy_data_unfiltered():
a1 = MouseConfig(
id='foo1',
group='foo',
text='Foo',
button='Left',
modifiers=['Alt'],
invertible=True)
a2 = MouseConfig(
id='bar1',
group='bar',
text='Bar',
button='Middle',
modifiers=['Ctrl'],
invertible=True)
a3 = MouseConfig(
id='baz1',
group='baz',
text='Baz',
button='Middle',
modifiers=['Shift'],
invertible=True)
with patch('beeref.config.controls.KeyboardSettings.MOUSE_ACTIONS',
ActionList([a2, a1, a3])):
proxy = MouseProxy()
assert proxy.data(
proxy.index(0, 0), QtCore.Qt.ItemDataRole.DisplayRole) == 'Bar'
assert proxy.data(
proxy.index(1, 0), QtCore.Qt.ItemDataRole.DisplayRole) == 'Foo'
assert proxy.data(
proxy.index(2, 0), QtCore.Qt.ItemDataRole.DisplayRole) == 'Baz'
def test_mouse_proxy_data_filtered():
a1 = MouseConfig(
id='foo1',
group='foo',
text='Foo',
button='Left',
modifiers=['Alt'],
invertible=True)
a2 = MouseConfig(
id='bar1',
group='bar',
text='Bar',
button='Middle',
modifiers=['Ctrl'],
invertible=True)
a3 = MouseConfig(
id='baz1',
group='baz',
text='Baz',
button='Middle',
modifiers=['Shift'],
invertible=True)
with patch('beeref.config.controls.KeyboardSettings.MOUSE_ACTIONS',
ActionList([a2, a1, a3])):
proxy = MouseProxy()
proxy.setFilterFixedString('b')
assert proxy.data(
proxy.index(0, 0), QtCore.Qt.ItemDataRole.DisplayRole) == 'Bar'
assert proxy.data(
proxy.index(1, 0), QtCore.Qt.ItemDataRole.DisplayRole) == 'Baz'
def test_mouse_proxy_setdata_saves_correct_filtered_index():
a1 = MouseConfig(
id='foo1',
group='foo',
text='Foo',
button='Left',
modifiers=['Alt'],
invertible=True)
a2 = MouseConfig(
id='bar1',
group='bar',
text='Bar',
button='Middle',
modifiers=['Ctrl'],
invertible=True)
a3 = MouseConfig(
id='baz1',
group='baz',
text='Baz',
button='Middle',
modifiers=['Shift'],
invertible=True)
with patch('beeref.config.controls.KeyboardSettings.MOUSE_ACTIONS',
ActionList([a2, a1, a3])):
proxy = MouseProxy()
proxy.setFilterFixedString('b')
proxy.setData(
index=proxy.index(1, 3),
value={'button': 'Left', 'modifiers': ['Ctrl', 'Alt']},
role=None)
a3.get_button() == 'Left'
a3.get_modifiers() == ['Ctrl', 'Alt']
def test_mouse_proxy_setdata_remove_from_other():
a1 = MouseConfig(
id='foo1',
group='foo',
text='Foo',
button='Left',
modifiers=['Alt'],
invertible=True)
a2 = MouseConfig(
id='bar1',
group='bar',
text='Bar',
button='Middle',
modifiers=['Ctrl'],
invertible=True)
with patch('beeref.config.controls.KeyboardSettings.MOUSE_ACTIONS',
ActionList([a2, a1])):
proxy = MouseProxy()
proxy.setData(
index=proxy.index(0, 3),
value={'button': 'Left', 'modifiers': ['Ctrl', 'Alt']},
role=None,
remove_from_other=a2)
a1.get_button() == 'Left'
a1.get_modifiers() == ['Ctrl', 'Alt']
a2.get_button() == 'Not Configured'
a2.get_modifiers() == []