test_pt_inputhooks.py
50 lines
| 1.6 KiB
| text/x-python
|
PythonLexer
Emilio Graff
|
r27999 | import os | ||
import importlib | ||||
import pytest | ||||
from IPython.terminal.pt_inputhooks import set_qt_api, get_inputhook_name_and_func | ||||
guis_avail = [] | ||||
def _get_qt_vers(): | ||||
"""If any version of Qt is available, this will populate `guis_avail` with 'qt' and 'qtx'. Due | ||||
to the import mechanism, we can't import multiple versions of Qt in one session.""" | ||||
Emilio Graff
|
r28021 | for gui in ["qt", "qt6", "qt5"]: | ||
Emilio Graff
|
r28001 | print(f"Trying {gui}") | ||
Emilio Graff
|
r27999 | try: | ||
set_qt_api(gui) | ||||
importlib.import_module("IPython.terminal.pt_inputhooks.qt") | ||||
guis_avail.append(gui) | ||||
Emilio Graff
|
r28001 | if "QT_API" in os.environ.keys(): | ||
del os.environ["QT_API"] | ||||
Emilio Graff
|
r27999 | except ImportError: | ||
pass # that version of Qt isn't available. | ||||
except RuntimeError: | ||||
pass # the version of IPython doesn't know what to do with this Qt version. | ||||
_get_qt_vers() | ||||
Emilio Graff
|
r28001 | @pytest.mark.skipif( | ||
len(guis_avail) == 0, reason="No viable version of PyQt or PySide installed." | ||||
) | ||||
Emilio Graff
|
r27999 | def test_inputhook_qt(): | ||
Emilio Graff
|
r28146 | # Choose the "best" Qt version. | ||
Emilio Graff
|
r28148 | gui_ret, _ = get_inputhook_name_and_func("qt") | ||
Emilio Graff
|
r28146 | |||
assert gui_ret != "qt" # you get back the specific version that was loaded. | ||||
assert gui_ret in guis_avail | ||||
if len(guis_avail) > 2: | ||||
# ...and now we're stuck with this version of Qt for good; can't switch. | ||||
for not_gui in ["qt6", "qt5"]: | ||||
if not_gui != gui_ret: | ||||
break | ||||
# Try to import the other gui; it won't work. | ||||
gui_ret2, _ = get_inputhook_name_and_func(not_gui) | ||||
assert gui_ret2 == gui_ret | ||||
assert gui_ret2 != not_gui | ||||