7
7
8
8
import pytest
9
9
10
- try :
11
- import PyQt4
12
- except (ImportError , RuntimeError ): # RuntimeError if PyQt5 already imported.
10
+
11
+ @pytest .fixture (autouse = True )
12
+ def qt4_module ():
13
+ try :
14
+ import PyQt4
15
+ # RuntimeError if PyQt5 already imported.
16
+ except (ImportError , RuntimeError ):
17
+ try :
18
+ import PySide
19
+ except ImportError :
20
+ pytest .skip ("Failed to import a Qt4 binding." )
21
+
22
+ qt_compat = pytest .importorskip ('matplotlib.backends.qt_compat' )
23
+ QtCore = qt_compat .QtCore
24
+
13
25
try :
14
- import PySide
15
- except ImportError :
16
- pytestmark = pytest .mark .skip ("Failed to import a Qt4 binding." )
26
+ py_qt_ver = int (QtCore .PYQT_VERSION_STR .split ('.' )[0 ])
27
+ except AttributeError :
28
+ py_qt_ver = QtCore .__version_info__ [0 ]
29
+
30
+ if py_qt_ver != 4 :
31
+ pytest .skip (reason = 'Qt4 is not available' )
32
+
33
+ from matplotlib .backends .backend_qt4 import (
34
+ MODIFIER_KEYS , SUPER , ALT , CTRL , SHIFT ) # noqa
35
+
36
+ mods = {}
37
+ keys = {}
38
+ for name , index in zip (['Alt' , 'Control' , 'Shift' , 'Super' ],
39
+ [ALT , CTRL , SHIFT , SUPER ]):
40
+ _ , mod , key = MODIFIER_KEYS [index ]
41
+ mods [name + 'Modifier' ] = mod
42
+ keys [name + 'Key' ] = key
17
43
18
- qt_compat = pytest .importorskip ('matplotlib.backends.qt_compat' )
19
- QtCore = qt_compat .QtCore
44
+ return QtCore , mods , keys
20
45
21
- from matplotlib .backends .backend_qt4 import (
22
- MODIFIER_KEYS , SUPER , ALT , CTRL , SHIFT ) # noqa
23
46
24
- _ , ControlModifier , ControlKey = MODIFIER_KEYS [CTRL ]
25
- _ , AltModifier , AltKey = MODIFIER_KEYS [ALT ]
26
- _ , SuperModifier , SuperKey = MODIFIER_KEYS [SUPER ]
27
- _ , ShiftModifier , ShiftKey = MODIFIER_KEYS [SHIFT ]
47
+ @pytest .fixture
48
+ def qt_key (request ):
49
+ QtCore , _ , keys = request .getfixturevalue ('qt4_module' )
50
+ if request .param .startswith ('Key' ):
51
+ return getattr (QtCore .Qt , request .param )
52
+ else :
53
+ return keys [request .param ]
28
54
29
- try :
30
- py_qt_ver = int (QtCore .PYQT_VERSION_STR .split ('.' )[0 ])
31
- except AttributeError :
32
- py_qt_ver = QtCore .__version_info__ [0 ]
33
55
34
- if py_qt_ver != 4 :
35
- pytestmark = pytest .mark .skipif (reason = 'Qt4 is not available' )
56
+ @pytest .fixture
57
+ def qt_mods (request ):
58
+ QtCore , mods , _ = request .getfixturevalue ('qt4_module' )
59
+ result = QtCore .Qt .NoModifier
60
+ for mod in request .param :
61
+ result |= mods [mod ]
62
+ return result
36
63
37
64
38
65
@pytest .mark .backend ('Qt4Agg' )
@@ -55,21 +82,22 @@ def test_fig_close():
55
82
@pytest .mark .parametrize (
56
83
'qt_key, qt_mods, answer' ,
57
84
[
58
- (QtCore . Qt . Key_A , ShiftModifier , 'A' ),
59
- (QtCore . Qt . Key_A , QtCore . Qt . NoModifier , 'a' ),
60
- (QtCore . Qt . Key_A , ControlModifier , 'ctrl+a' ),
61
- (QtCore . Qt . Key_Aacute , ShiftModifier ,
85
+ (' Key_A' , [ ' ShiftModifier' ] , 'A' ),
86
+ (' Key_A' , [] , 'a' ),
87
+ (' Key_A' , [ ' ControlModifier' ] , 'ctrl+a' ),
88
+ (' Key_Aacute' , [ ' ShiftModifier' ] ,
62
89
'\N{LATIN CAPITAL LETTER A WITH ACUTE} ' ),
63
- (QtCore . Qt . Key_Aacute , QtCore . Qt . NoModifier ,
90
+ (' Key_Aacute' , [] ,
64
91
'\N{LATIN SMALL LETTER A WITH ACUTE} ' ),
65
- (ControlKey , AltModifier , 'alt+control' ),
66
- (AltKey , ControlModifier , 'ctrl+alt' ),
67
- (QtCore . Qt . Key_Aacute , ( ControlModifier | AltModifier | SuperModifier ) ,
92
+ (' ControlKey' , [ ' AltModifier' ] , 'alt+control' ),
93
+ (' AltKey' , [ ' ControlModifier' ] , 'ctrl+alt' ),
94
+ (' Key_Aacute' , [ ' ControlModifier' , ' AltModifier' , ' SuperModifier' ] ,
68
95
'ctrl+alt+super+\N{LATIN SMALL LETTER A WITH ACUTE} ' ),
69
- (QtCore . Qt . Key_Backspace , QtCore . Qt . NoModifier , 'backspace' ),
70
- (QtCore . Qt . Key_Backspace , ControlModifier , 'ctrl+backspace' ),
71
- (QtCore . Qt . Key_Play , QtCore . Qt . NoModifier , None ),
96
+ (' Key_Backspace' , [] , 'backspace' ),
97
+ (' Key_Backspace' , [ ' ControlModifier' ] , 'ctrl+backspace' ),
98
+ (' Key_Play' , [] , None ),
72
99
],
100
+ indirect = ['qt_key' , 'qt_mods' ],
73
101
ids = [
74
102
'shift' ,
75
103
'lower' ,
0 commit comments