mirror of
https://github.com/rbreu/beeref.git
synced 2026-03-11 08:54:28 +00:00
510 lines
18 KiB
Python
510 lines
18 KiB
Python
from unittest.mock import patch, MagicMock
|
|
|
|
from PyQt6.QtCore import Qt
|
|
|
|
from beeref.config.controls import (
|
|
KeyboardSettings,
|
|
MouseConfig,
|
|
MouseWheelConfig,
|
|
)
|
|
|
|
|
|
def test_mousewheelconfig_eq():
|
|
action1 = MouseWheelConfig(
|
|
id='foo', group='foobar', text='Foo', modifiers=[], invertible=False)
|
|
action2 = MouseWheelConfig(
|
|
id='foo', group='foobar', text='Baz', modifiers=[], invertible=False)
|
|
assert action1 == action2
|
|
|
|
|
|
def test_mousewheelconfig_str():
|
|
action = MouseWheelConfig(
|
|
id='foo', group='foobar', text='Foo', modifiers=[], invertible=False)
|
|
assert str(action) == 'foo'
|
|
|
|
|
|
def test_mousewheelconfig_kb_settings():
|
|
action = MouseWheelConfig(
|
|
id='foo', group='foobar', text='Foo', modifiers=[], invertible=False)
|
|
assert isinstance(action.kb_settings, KeyboardSettings)
|
|
|
|
|
|
def test_mousewheelconfig_get_modifiers(kbsettings):
|
|
kbsettings.set_list('MouseWheel', 'foo_modifiers', ['Ctrl', 'Shift'])
|
|
action = MouseWheelConfig(
|
|
id='foo', group='foobar', text='Foo', modifiers=[], invertible=False)
|
|
assert action.get_modifiers() == ['Ctrl', 'Shift']
|
|
|
|
|
|
def test_mousewheelconfig_get_modifiers_default(kbsettings):
|
|
action = MouseWheelConfig(
|
|
id='foo', group='foobar', text='Foo', modifiers=['Shift'],
|
|
invertible=False)
|
|
assert action.get_modifiers() == ['Shift']
|
|
|
|
|
|
def test_mousewheelconfig_set_modifiers(kbsettings):
|
|
action = MouseWheelConfig(
|
|
id='foo', group='foobar', text='Foo', modifiers=[], invertible=False)
|
|
action.set_modifiers(['Shift'])
|
|
assert kbsettings.get_list('MouseWheel', 'foo_modifiers') == ['Shift']
|
|
|
|
|
|
def test_mousewheelconfig_set_modifiers_default(kbsettings):
|
|
kbsettings.set_list('MouseWheel', 'foo_modifiers', ['Alt', 'Ctrl'])
|
|
action = MouseWheelConfig(
|
|
id='foo', group='foobar', text='Foo',
|
|
modifiers=['Shift'], invertible=False)
|
|
action.set_modifiers(['Shift'])
|
|
assert kbsettings.value('MouseWheel/foo_modifiers') is None
|
|
|
|
|
|
def test_mousewheelconfig_get_inverted(kbsettings):
|
|
kbsettings.set_value('MouseWheel', 'foo_inverted', True)
|
|
action = MouseWheelConfig(
|
|
id='foo', group='foobar', text='Foo', modifiers=[], invertible=True)
|
|
assert action.get_inverted() is True
|
|
|
|
|
|
def test_mousewheelconfig_get_inverted_default():
|
|
action = MouseWheelConfig(
|
|
id='foo', group='foobar', text='Foo', modifiers=[], invertible=True)
|
|
assert action.get_inverted() is False
|
|
|
|
|
|
def test_mousewheelconfig_set_inverted(kbsettings):
|
|
action = MouseWheelConfig(
|
|
id='foo', group='foobar', text='Foo', modifiers=[], invertible=True)
|
|
action.set_inverted(True)
|
|
assert kbsettings.get_value('MouseWheel', 'foo_inverted') is True
|
|
|
|
|
|
def test_mousewheelconfig_set_inverted_default(kbsettings):
|
|
kbsettings.set_value('MouseWheel', 'foo_inverted', True)
|
|
action = MouseWheelConfig(
|
|
id='foo', group='foobar', text='Foo', modifiers=[], invertible=True)
|
|
action.set_inverted(False)
|
|
assert kbsettings.value('MouseWheel/foo_inverted') is None
|
|
|
|
|
|
def test_mousewheelconfig_modifiers_to_qt_multiple():
|
|
assert MouseWheelConfig.modifiers_to_qt(['Shift', 'Ctrl']) == (
|
|
Qt.KeyboardModifier.ShiftModifier
|
|
| Qt.KeyboardModifier.ControlModifier)
|
|
|
|
|
|
def test_mousewheelconfig_modifiers_to_single():
|
|
assert MouseWheelConfig.modifiers_to_qt(['Alt']) ==\
|
|
Qt.KeyboardModifier.AltModifier
|
|
|
|
|
|
def test_mousewheelconfig_controls_changed_not_changed():
|
|
action = MouseWheelConfig(
|
|
id='foo', group='foobar', text='Foo', modifiers=['Shift'],
|
|
invertible=True)
|
|
assert action.controls_changed() is False
|
|
|
|
|
|
def test_mousewheelconfig_controls_changed_modifiers_changed():
|
|
action = MouseWheelConfig(
|
|
id='foo', group='foobar', text='Foo', modifiers=['Shift'],
|
|
invertible=True)
|
|
action.set_modifiers(['Alt'])
|
|
assert action.controls_changed() is True
|
|
|
|
|
|
def test_mousewheelconfig_controls_changed_inverted_changed():
|
|
action = MouseWheelConfig(
|
|
id='foo', group='foobar', text='Foo', modifiers=['Shift'],
|
|
invertible=True)
|
|
action.set_inverted(True)
|
|
assert action.controls_changed() is True
|
|
|
|
|
|
def test_mousewheelconfig_controls_is_configured_true():
|
|
action = MouseWheelConfig(
|
|
id='foo', group='foobar', text='Foo', modifiers=['No Modifiers'],
|
|
invertible=True)
|
|
assert action.is_configured() is True
|
|
|
|
|
|
def test_mousewheelconfig_controls_is_configured_false():
|
|
action = MouseWheelConfig(
|
|
id='foo', group='foobar', text='Foo', modifiers=[], invertible=True)
|
|
assert action.is_configured() is False
|
|
|
|
|
|
def test_mousewheelconfig_controls_remove_controls():
|
|
action = MouseWheelConfig(
|
|
id='foo', group='foobar', text='Foo', modifiers=['Shift'],
|
|
invertible=True)
|
|
action.set_inverted(True)
|
|
action.remove_controls()
|
|
assert action.get_modifiers() == []
|
|
assert action.get_inverted() is False
|
|
|
|
|
|
def test_mousewheelconfig_conflicts_with_true():
|
|
action1 = MouseWheelConfig(
|
|
id='foo', group='foobar', text='Foo', modifiers=['Shift'],
|
|
invertible=True)
|
|
action2 = MouseWheelConfig(
|
|
id='bar', group='foobar', text='Bar', modifiers=['Shift'],
|
|
invertible=True)
|
|
assert action1.conflicts_with(action2) is True
|
|
|
|
|
|
def test_mousewheelconfig_conflicts_with_false():
|
|
action1 = MouseWheelConfig(
|
|
id='foo', group='foobar', text='Foo', modifiers=['Shift'],
|
|
invertible=True)
|
|
action2 = MouseWheelConfig(
|
|
id='bar', group='foobar', text='Bar', modifiers=['Shift', 'Ctrl'],
|
|
invertible=True)
|
|
assert action1.conflicts_with(action2) is False
|
|
|
|
|
|
def test_mousewheelconfig_conflicts_false_when_both_not_configured():
|
|
action1 = MouseWheelConfig(
|
|
id='foo', group='foobar', text='Foo', modifiers=[],
|
|
invertible=True)
|
|
action2 = MouseWheelConfig(
|
|
id='bar', group='foobar', text='Bar', modifiers=[],
|
|
invertible=True)
|
|
assert action1.conflicts_with(action2) is False
|
|
|
|
|
|
def test_mousewheelconfig_matches_event_true():
|
|
event = MagicMock(
|
|
modifiers=MagicMock(return_value=Qt.KeyboardModifier.AltModifier))
|
|
action = MouseWheelConfig(
|
|
id='foo', group='foobar', text='Foo', modifiers=['Alt'],
|
|
invertible=True)
|
|
assert action.matches_event(event) is True
|
|
|
|
|
|
def test_mousewheelconfig_matches_event_false():
|
|
event = MagicMock(
|
|
modifiers=MagicMock(return_value=Qt.KeyboardModifier.AltModifier))
|
|
action = MouseWheelConfig(
|
|
id='foo', group='foobar', text='Foo', modifiers=['Ctrl'],
|
|
invertible=True)
|
|
assert action.matches_event(event) is False
|
|
|
|
|
|
def test_mousewheelconfig_matches_event_false_when_not_configured():
|
|
event = MagicMock(
|
|
modifiers=MagicMock(return_value=Qt.KeyboardModifier.AltModifier))
|
|
action = MouseWheelConfig(
|
|
id='foo', group='foobar', text='Foo', modifiers=[],
|
|
invertible=True)
|
|
assert action.matches_event(event) is False
|
|
|
|
|
|
def test_mouseconfig_get_button(kbsettings):
|
|
kbsettings.set_value('Mouse', 'foo_button', 'Left')
|
|
action = MouseConfig(
|
|
id='foo', group='foobar', text='Foo', button='Middle', modifiers=[],
|
|
invertible=False)
|
|
assert action.get_button() == 'Left'
|
|
|
|
|
|
def test_mouseconfig_get_button_default():
|
|
action = MouseConfig(
|
|
id='foo', group='foobar', text='Foo', button='Left', modifiers=[],
|
|
invertible=False)
|
|
assert action.get_button() == 'Left'
|
|
|
|
|
|
def test_mouseconfig_set_button(kbsettings):
|
|
action = MouseConfig(
|
|
id='foo', group='foobar', text='Foo', button='Left', modifiers=[],
|
|
invertible=False)
|
|
action.set_button('Middle')
|
|
assert kbsettings.get_value('Mouse', 'foo_button') == 'Middle'
|
|
|
|
|
|
def test_mouseconfig_set_button_default(kbsettings):
|
|
kbsettings.set_value('Mouse', 'foo_button', 'Middle')
|
|
action = MouseConfig(
|
|
id='foo', group='foobar', text='Foo', button='Middle', modifiers=[],
|
|
invertible=False)
|
|
action.set_button('Middle')
|
|
assert kbsettings.value('Mouse/foo_button') is None
|
|
|
|
|
|
def test_mouseconfig_conflicts_with_true():
|
|
action1 = MouseConfig(
|
|
id='foo', group='foobar', text='Foo', button='Left',
|
|
modifiers=['Shift'], invertible=True)
|
|
action2 = MouseConfig(
|
|
id='bar', group='foobar', text='Bar', button='Left',
|
|
modifiers=['Shift'], invertible=True)
|
|
assert action1.conflicts_with(action2) is True
|
|
|
|
|
|
def test_mouseconfig_conflicts_with_false_when_diff_buttons():
|
|
action1 = MouseConfig(
|
|
id='foo', group='foobar', text='Foo', button='Left',
|
|
modifiers=['Shift'], invertible=True)
|
|
action2 = MouseConfig(
|
|
id='bar', group='foobar', text='Bar', button='Middle',
|
|
modifiers=['Shift'], invertible=True)
|
|
assert action1.conflicts_with(action2) is False
|
|
|
|
|
|
def test_mouseconfig_conflicts_with_false_when_diff_modifiers():
|
|
action1 = MouseConfig(
|
|
id='foo', group='foobar', text='Foo', button='Middle',
|
|
modifiers=['Shift'], invertible=True)
|
|
action2 = MouseConfig(
|
|
id='bar', group='foobar', text='Bar', button='Middle',
|
|
modifiers=['Shift', 'Ctrl'], invertible=True)
|
|
assert action1.conflicts_with(action2) is False
|
|
|
|
|
|
def test_mouseconfig_conflicts_false_when_both_not_configured():
|
|
action1 = MouseConfig(
|
|
id='foo', group='foobar', text='Foo', button='Not Configured',
|
|
modifiers=[], invertible=True)
|
|
action2 = MouseConfig(
|
|
id='bar', group='foobar', text='Bar', button='Not Configured',
|
|
modifiers=[], invertible=True)
|
|
assert action1.conflicts_with(action2) is False
|
|
|
|
|
|
def test_mouseconfig_is_configured_false():
|
|
action = MouseConfig(
|
|
id='foo', group='foobar', text='Foo', button='Middle',
|
|
modifiers=[], invertible=True)
|
|
action.set_button('Not Configured')
|
|
assert action.conflicts_with(action) is False
|
|
|
|
|
|
def test_mouseconfig_is_configured_true():
|
|
action = MouseConfig(
|
|
id='foo', group='foobar', text='Foo', button='Not Configured',
|
|
modifiers=[], invertible=True)
|
|
action.set_button('Left')
|
|
assert action.conflicts_with(action) is True
|
|
|
|
|
|
def test_mouseconfig_controls_changed_false():
|
|
action = MouseConfig(
|
|
id='foo', group='foobar', text='Foo', button='Middle',
|
|
modifiers=['Shift'], invertible=True)
|
|
action.controls_changed() is False
|
|
|
|
|
|
def test_mouseconfig_controls_changed_true_when_button_changed():
|
|
action = MouseConfig(
|
|
id='foo', group='foobar', text='Foo', button='Middle',
|
|
modifiers=['Shift'], invertible=True)
|
|
action.set_button('Left')
|
|
action.controls_changed() is True
|
|
|
|
|
|
def test_mouseconfig_controls_changed_true_when_modifiers_changed():
|
|
action = MouseConfig(
|
|
id='foo', group='foobar', text='Foo', button='Middle',
|
|
modifiers=['Shift'], invertible=True)
|
|
action.set_modifiers(['Shift', 'Ctrl'])
|
|
action.controls_changed() is True
|
|
|
|
|
|
def test_mouseconfig_controls_changed_true_when_inverted_changed():
|
|
action = MouseConfig(
|
|
id='foo', group='foobar', text='Foo', button='Middle',
|
|
modifiers=['Shift'], invertible=True)
|
|
action.set_inverted(True)
|
|
action.controls_changed() is True
|
|
|
|
|
|
def test_mouseconfig_remove_controls():
|
|
action = MouseConfig(
|
|
id='foo', group='foobar', text='Foo', button='Middle',
|
|
modifiers=['Shift'], invertible=True)
|
|
action.set_inverted(True)
|
|
|
|
action.remove_controls()
|
|
assert action.get_button() == 'Not Configured'
|
|
assert action.get_modifiers() == []
|
|
assert action.get_inverted() is False
|
|
|
|
|
|
def test_mouseconfig_matches_event_true():
|
|
event = MagicMock(
|
|
button=MagicMock(return_value=Qt.MouseButton.LeftButton),
|
|
modifiers=MagicMock(return_value=Qt.KeyboardModifier.AltModifier))
|
|
action = MouseConfig(
|
|
id='foo', group='foobar', text='Foo', button='Left',
|
|
modifiers=['Alt'], invertible=True)
|
|
assert action.matches_event(event) is True
|
|
|
|
|
|
def test_mouseconfig_matches_event_false_when_diff_button():
|
|
event = MagicMock(
|
|
button=MagicMock(return_value=Qt.MouseButton.LeftButton),
|
|
modifiers=MagicMock(return_value=Qt.KeyboardModifier.AltModifier))
|
|
action = MouseConfig(
|
|
id='foo', group='foobar', text='Foo', button='Middle',
|
|
modifiers=['Alt'], invertible=True)
|
|
assert action.matches_event(event) is False
|
|
|
|
|
|
def test_mouseconfig_matches_event_false_when_diff_modifiers():
|
|
event = MagicMock(
|
|
button=MagicMock(return_value=Qt.MouseButton.LeftButton),
|
|
modifiers=MagicMock(return_value=Qt.KeyboardModifier.AltModifier))
|
|
action = MouseConfig(
|
|
id='foo', group='foobar', text='Foo', button='Left',
|
|
modifiers=['Ctrl'], invertible=True)
|
|
assert action.matches_event(event) is False
|
|
|
|
|
|
def test_mouseconfig_matches_event_false_when_not_configured():
|
|
event = MagicMock(
|
|
button=MagicMock(return_value=Qt.MouseButton.LeftButton),
|
|
modifiers=MagicMock(return_value=Qt.KeyboardModifier.AltModifier))
|
|
action = MouseConfig(
|
|
id='foo', group='foobar', text='Foo', button='Not Configured',
|
|
modifiers=[], invertible=True)
|
|
assert action.matches_event(event) is False
|
|
|
|
|
|
def test_keyboardsettings_set_value(kbsettings):
|
|
kbsettings.set_value('mygroup', 'foo', 'bar')
|
|
assert kbsettings.value('mygroup/foo', 'bar')
|
|
|
|
|
|
def test_keyboardsettings_set_value_default_value(kbsettings):
|
|
kbsettings.setValue('mygroup/foo', 'bar')
|
|
kbsettings.set_value('mygroup', 'foo', 'baz', 'baz')
|
|
assert kbsettings.value('mygroup/foo') is None
|
|
|
|
|
|
def test_keyboardsettings_get_value_existing(kbsettings):
|
|
kbsettings.set_value('mygroup', 'bar', 'foo')
|
|
value = kbsettings.get_value('mygroup', 'bar', 'baz')
|
|
assert value == 'foo'
|
|
|
|
|
|
def test_keyboardsettings_get_value_default(kbsettings):
|
|
assert kbsettings.get_value('mygroup', 'bar', 'baz') == 'baz'
|
|
|
|
|
|
def test_keyboardsettings_set_list(kbsettings):
|
|
kbsettings.set_list('mygroup', 'foo', ['Ctrl+F'])
|
|
assert kbsettings.get_list('mygroup', 'foo') == ['Ctrl+F']
|
|
|
|
|
|
def test_keyboardsettings_set_list_multiple(kbsettings):
|
|
kbsettings.set_list('mygroup', 'foo', ['Ctrl+F', 'Alt+O'])
|
|
assert kbsettings.get_list('mygroup', 'foo') == ['Ctrl+F', 'Alt+O']
|
|
|
|
|
|
def test_keyboardsettings_set_list_default_value(kbsettings):
|
|
kbsettings.setValue('mygroup/foo', 'Ctrl+F')
|
|
kbsettings.set_list('mygroup', 'foo', 'Ctrl+B', 'Ctrl+B')
|
|
assert kbsettings.value('mygroup/foo') is None
|
|
|
|
|
|
def test_keyboardsettings_get_list_existing(kbsettings):
|
|
kbsettings.set_list('mygroup', 'bar', ['Ctrl+R'])
|
|
shortcuts = kbsettings.get_list('mygroup', 'bar', ['Ctrl+B'])
|
|
assert shortcuts == ['Ctrl+R']
|
|
|
|
|
|
def test_keyboardsettings_get_list_existing_empty_list(kbsettings):
|
|
kbsettings.set_list('mygroup', 'bar', [])
|
|
shortcuts = kbsettings.get_list('mygroup', 'bar', ['Ctrl+B'])
|
|
assert shortcuts == []
|
|
|
|
|
|
def test_keyboardsettings_get_list_default(kbsettings):
|
|
shortcuts = kbsettings.get_list('mygroup', 'bar', ['Ctrl+B'])
|
|
assert shortcuts == ['Ctrl+B']
|
|
|
|
|
|
@patch('beeref.config.KeyboardSettings.setValue')
|
|
@patch('beeref.config.KeyboardSettings.remove')
|
|
def test_keyboardsettings_set_list_other_than_default_saves(
|
|
remove_mock, set_mock, kbsettings):
|
|
kbsettings.set_list('mygroup', 'bar', ['Ctrl+R'], ['Ctrl+Z'])
|
|
set_mock.assert_called_once_with('mygroup/bar', 'Ctrl+R')
|
|
remove_mock.assert_not_called()
|
|
|
|
|
|
@patch('beeref.config.KeyboardSettings.setValue')
|
|
@patch('beeref.config.KeyboardSettings.remove')
|
|
def test_keyboardsettings_set_list_with_than_default_doesnt_save(
|
|
remove_mock, set_mock, kbsettings):
|
|
kbsettings.set_list('mygroup', 'bar', ['Ctrl+R'], ['Ctrl+R'])
|
|
set_mock.assert_not_called()
|
|
remove_mock.assert_called_once_with('mygroup/bar')
|
|
|
|
|
|
@patch('PyQt6.QtGui.QAction.setShortcuts')
|
|
def test_keyboardsettings_restore_defaults_restores(shortcut_mock, kbsettings):
|
|
kbsettings.setValue('Actions/bar', 'Ctrl+R')
|
|
kbsettings.restore_defaults()
|
|
assert kbsettings.contains('Actions/bar') is False
|
|
|
|
|
|
def test_keyboardsettings_mousewheel_action_for_event_finds(kbsettings):
|
|
action = kbsettings.MOUSEWHEEL_ACTIONS['zoom1']
|
|
action.set_modifiers(['Shift', 'Ctrl', 'Alt'])
|
|
action.set_inverted(True)
|
|
|
|
event = MagicMock(
|
|
modifiers=MagicMock(
|
|
return_value=(Qt.KeyboardModifier.AltModifier
|
|
| Qt.KeyboardModifier.ShiftModifier
|
|
| Qt.KeyboardModifier.ControlModifier)))
|
|
|
|
group, inverted = kbsettings.mousewheel_action_for_event(event)
|
|
assert group == 'zoom'
|
|
assert inverted is True
|
|
|
|
|
|
def test_keyboardsettings_mousewheel_action_for_event_empty(kbsettings):
|
|
event = MagicMock(
|
|
modifiers=MagicMock(
|
|
return_value=(Qt.KeyboardModifier.AltModifier
|
|
| Qt.KeyboardModifier.ShiftModifier
|
|
| Qt.KeyboardModifier.ControlModifier)))
|
|
|
|
group, inverted = kbsettings.mousewheel_action_for_event(event)
|
|
assert group is None
|
|
assert inverted is None
|
|
|
|
|
|
def test_keyboardsettings_mouse_action_for_event_finds(kbsettings):
|
|
action = kbsettings.MOUSE_ACTIONS['zoom1']
|
|
action.set_button('Middle')
|
|
action.set_modifiers(['Shift', 'Ctrl', 'Alt'])
|
|
action.set_inverted(True)
|
|
|
|
event = MagicMock(
|
|
button=MagicMock(return_value=Qt.MouseButton.MiddleButton),
|
|
modifiers=MagicMock(
|
|
return_value=(Qt.KeyboardModifier.AltModifier
|
|
| Qt.KeyboardModifier.ShiftModifier
|
|
| Qt.KeyboardModifier.ControlModifier)))
|
|
|
|
group, inverted = kbsettings.mouse_action_for_event(event)
|
|
assert group == 'zoom'
|
|
assert inverted is True
|
|
|
|
|
|
def test_keyboardsettings_mouse_action_for_event_empty(kbsettings):
|
|
event = MagicMock(
|
|
button=MagicMock(return_value=Qt.MouseButton.MiddleButton),
|
|
modifiers=MagicMock(
|
|
return_value=(Qt.KeyboardModifier.AltModifier
|
|
| Qt.KeyboardModifier.ShiftModifier
|
|
| Qt.KeyboardModifier.ControlModifier)))
|
|
|
|
group, inverted = kbsettings.mouse_action_for_event(event)
|
|
assert group is None
|
|
assert inverted is None
|