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 mpl_test_settings (qt4_module , mpl_test_settings ):
13
+ """
14
+ Ensure qt4_module fixture is *first* fixture.
15
+
16
+ We override the `mpl_test_settings` fixture and depend on the `qt4_module`
17
+ fixture first. It is very important that it is first, because it skips
18
+ tests when Qt4 is not available, and if not, then the main
19
+ `mpl_test_settings` fixture will try to switch backends before the skip can
20
+ be triggered.
21
+ """
22
+ pass
23
+
24
+
25
+ @pytest .fixture
26
+ def qt4_module ():
13
27
try :
14
- import PySide
15
- except ImportError :
16
- pytestmark = pytest .mark .skip ("Failed to import a Qt4 binding." )
28
+ import PyQt4
29
+ # RuntimeError if PyQt5 already imported.
30
+ except (ImportError , RuntimeError ):
31
+ try :
32
+ import PySide
33
+ except ImportError :
34
+ pytest .skip ("Failed to import a Qt4 binding." )
35
+
36
+ qt_compat = pytest .importorskip ('matplotlib.backends.qt_compat' )
37
+ QtCore = qt_compat .QtCore
38
+
39
+ try :
40
+ py_qt_ver = int (QtCore .PYQT_VERSION_STR .split ('.' )[0 ])
41
+ except AttributeError :
42
+ py_qt_ver = QtCore .__version_info__ [0 ]
43
+
44
+ if py_qt_ver != 4 :
45
+ pytest .skip (reason = 'Qt4 is not available' )
46
+
47
+ from matplotlib .backends .backend_qt4 import (
48
+ MODIFIER_KEYS , SUPER , ALT , CTRL , SHIFT ) # noqa
49
+
50
+ mods = {}
51
+ keys = {}
52
+ for name , index in zip (['Alt' , 'Control' , 'Shift' , 'Super' ],
53
+ [ALT , CTRL , SHIFT , SUPER ]):
54
+ _ , mod , key = MODIFIER_KEYS [index ]
55
+ mods [name + 'Modifier' ] = mod
56
+ keys [name + 'Key' ] = key
17
57
18
- qt_compat = pytest .importorskip ('matplotlib.backends.qt_compat' )
19
- QtCore = qt_compat .QtCore
58
+ return QtCore , mods , keys
20
59
21
- from matplotlib .backends .backend_qt4 import (
22
- MODIFIER_KEYS , SUPER , ALT , CTRL , SHIFT ) # noqa
23
60
24
- _ , ControlModifier , ControlKey = MODIFIER_KEYS [CTRL ]
25
- _ , AltModifier , AltKey = MODIFIER_KEYS [ALT ]
26
- _ , SuperModifier , SuperKey = MODIFIER_KEYS [SUPER ]
27
- _ , ShiftModifier , ShiftKey = MODIFIER_KEYS [SHIFT ]
61
+ @pytest .fixture
62
+ def qt_key (request ):
63
+ QtCore , _ , keys = request .getfixturevalue ('qt4_module' )
64
+ if request .param .startswith ('Key' ):
65
+ return getattr (QtCore .Qt , request .param )
66
+ else :
67
+ return keys [request .param ]
28
68
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
69
34
- if py_qt_ver != 4 :
35
- pytestmark = pytest .mark .skipif (reason = 'Qt4 is not available' )
70
+ @pytest .fixture
71
+ def qt_mods (request ):
72
+ QtCore , mods , _ = request .getfixturevalue ('qt4_module' )
73
+ result = QtCore .Qt .NoModifier
74
+ for mod in request .param :
75
+ result |= mods [mod ]
76
+ return result
36
77
37
78
38
79
@pytest .mark .backend ('Qt4Agg' )
@@ -55,21 +96,22 @@ def test_fig_close():
55
96
@pytest .mark .parametrize (
56
97
'qt_key, qt_mods, answer' ,
57
98
[
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 ,
99
+ (' Key_A' , [ ' ShiftModifier' ] , 'A' ),
100
+ (' Key_A' , [] , 'a' ),
101
+ (' Key_A' , [ ' ControlModifier' ] , 'ctrl+a' ),
102
+ (' Key_Aacute' , [ ' ShiftModifier' ] ,
62
103
'\N{LATIN CAPITAL LETTER A WITH ACUTE} ' ),
63
- (QtCore . Qt . Key_Aacute , QtCore . Qt . NoModifier ,
104
+ (' Key_Aacute' , [] ,
64
105
'\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 ) ,
106
+ (' ControlKey' , [ ' AltModifier' ] , 'alt+control' ),
107
+ (' AltKey' , [ ' ControlModifier' ] , 'ctrl+alt' ),
108
+ (' Key_Aacute' , [ ' ControlModifier' , ' AltModifier' , ' SuperModifier' ] ,
68
109
'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 ),
110
+ (' Key_Backspace' , [] , 'backspace' ),
111
+ (' Key_Backspace' , [ ' ControlModifier' ] , 'ctrl+backspace' ),
112
+ (' Key_Play' , [] , None ),
72
113
],
114
+ indirect = ['qt_key' , 'qt_mods' ],
73
115
ids = [
74
116
'shift' ,
75
117
'lower' ,
0 commit comments