2
2
import pytest
3
3
4
4
5
+ #===================================================================================================
6
+ # fixtures
7
+ #===================================================================================================
8
+ @pytest .fixture
9
+ def event_recorder (qtbot ):
10
+ widget = EventRecorder ()
11
+ qtbot .addWidget (widget )
12
+ return widget
13
+
14
+
5
15
#===================================================================================================
6
16
# testBasics
7
17
#===================================================================================================
8
18
def testBasics (qtbot ):
9
19
'''
10
20
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 .
12
22
'''
13
23
assert type (QtGui .qApp ) is QtGui .QApplication
14
24
widget = QtGui .QWidget ()
@@ -23,56 +33,78 @@ def testBasics(qtbot):
23
33
#===================================================================================================
24
34
# testKeyEvents
25
35
#===================================================================================================
26
- def testKeyEvents (qtbot ):
36
+ def testKeyEvents (qtbot , event_recorder ):
27
37
'''
28
38
Basic key events test.
29
39
'''
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' )
30
51
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
+ )
32
69
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
+ '''
36
90
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
43
95
44
96
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
65
99
66
100
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
76
108
77
109
78
110
#===================================================================================================
0 commit comments