Skip to content

Commit 35f7cc6

Browse files
committed
implemented tests for mouse events
this fixes #2.
1 parent df1232f commit 35f7cc6

File tree

1 file changed

+73
-41
lines changed

1 file changed

+73
-41
lines changed

pytestqt/_tests/test_basics.py

Lines changed: 73 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,23 @@
22
import pytest
33

44

5+
#===================================================================================================
6+
# fixtures
7+
#===================================================================================================
8+
@pytest.fixture
9+
def event_recorder(qtbot):
10+
widget = EventRecorder()
11+
qtbot.addWidget(widget)
12+
return widget
13+
14+
515
#===================================================================================================
616
# testBasics
717
#===================================================================================================
818
def testBasics(qtbot):
919
'''
1020
Basic test that works more like a sanity check to ensure we are setting up a QApplication
11-
properly and are able to display a simple widget.
21+
properly and are able to display a simple event_recorder.
1222
'''
1323
assert type(QtGui.qApp) is QtGui.QApplication
1424
widget = QtGui.QWidget()
@@ -23,56 +33,78 @@ def testBasics(qtbot):
2333
#===================================================================================================
2434
# testKeyEvents
2535
#===================================================================================================
26-
def testKeyEvents(qtbot):
36+
def testKeyEvents(qtbot, event_recorder):
2737
'''
2838
Basic key events test.
2939
'''
40+
def extract(key_event):
41+
return (
42+
key_event.type(),
43+
key_event.key(),
44+
key_event.text(),
45+
)
46+
47+
event_recorder.registerEvent(QtGui.QKeyEvent, extract)
48+
49+
qtbot.keyPress(event_recorder, 'a')
50+
assert event_recorder.event_data == (QEvent.KeyPress, int(Qt.Key_A), 'a')
3051

31-
class MyWidget(QtGui.QWidget):
52+
qtbot.keyRelease(event_recorder, 'a')
53+
assert event_recorder.event_data == (QEvent.KeyRelease, int(Qt.Key_A), 'a')
54+
55+
56+
#===================================================================================================
57+
# testMouseEvents
58+
#===================================================================================================
59+
def testMouseEvents(qtbot, event_recorder):
60+
'''
61+
Basic mouse events test.
62+
'''
63+
def extract(mouse_event):
64+
return (
65+
mouse_event.type(),
66+
mouse_event.button(),
67+
mouse_event.modifiers(),
68+
)
3269

33-
def __init__(self):
34-
QtGui.QWidget.__init__(self)
35-
self._reset()
70+
event_recorder.registerEvent(QtGui.QMouseEvent, extract)
71+
72+
qtbot.mousePress(event_recorder, Qt.LeftButton)
73+
assert event_recorder.event_data == (QEvent.MouseButtonPress, Qt.LeftButton, Qt.NoModifier)
74+
75+
qtbot.mousePress(event_recorder, Qt.RightButton, Qt.AltModifier)
76+
assert event_recorder.event_data == (QEvent.MouseButtonPress, Qt.RightButton, Qt.AltModifier)
77+
78+
79+
#===================================================================================================
80+
# EventRecorder
81+
#===================================================================================================
82+
class EventRecorder(QtGui.QWidget):
83+
'''
84+
Widget that records some kind of events sent to it.
85+
86+
When this event_recorder receives a registered event (by calling `registerEvent`), it will call
87+
the associated *extract* function and hold the return value from the function in the
88+
`event_data` member.
89+
'''
3690

37-
def event(self, ev):
38-
if type(ev) is QtGui.QKeyEvent:
39-
self._record(ev)
40-
return True
41-
42-
return False
91+
def __init__(self):
92+
QtGui.QWidget.__init__(self)
93+
self._event_types = {}
94+
self.event_data = None
4395

4496

45-
def _record(self, key_event):
46-
self.type = key_event.type()
47-
self.key = key_event.key()
48-
self.text = key_event.text()
49-
self.modifiers = key_event.modifiers()
50-
51-
52-
def _reset(self):
53-
self.type = None
54-
self.key = None
55-
self.text = None
56-
self.modifiers = None
57-
58-
59-
def assertEvent(self, event_type, key, text, modifiers=Qt.NoModifier):
60-
assert self.type == event_type
61-
assert self.key == key
62-
assert self.text == text
63-
assert self.modifiers == modifiers
64-
self._reset()
97+
def registerEvent(self, event_type, extract_func):
98+
self._event_types[event_type] = extract_func
6599

66100

67-
# create test widget
68-
widget = MyWidget()
69-
qtbot.addWidget(widget)
70-
71-
qtbot.keyPress(widget, 'a')
72-
widget.assertEvent(QEvent.KeyPress, int(Qt.Key_A), 'a')
73-
74-
qtbot.keyRelease(widget, 'a')
75-
widget.assertEvent(QEvent.KeyRelease, int(Qt.Key_A), 'a')
101+
def event(self, ev):
102+
for event_type, extract_func in self._event_types.iteritems():
103+
if type(ev) is event_type:
104+
self.event_data = extract_func(ev)
105+
return True
106+
107+
return False
76108

77109

78110
#===================================================================================================

0 commit comments

Comments
 (0)