Format: text/x-python
⬇ Download File (1.6 KB)
   1  import os
   2  import importlib
   3  
   4  import pytest
   5  
   6  from IPython.terminal.pt_inputhooks import set_qt_api, get_inputhook_name_and_func
   7  
   8  
   9  guis_avail = []
  10  
  11  
  12  def _get_qt_vers():
  13      """If any version of Qt is available, this will populate `guis_avail` with 'qt' and 'qtx'. Due
  14      to the import mechanism, we can't import multiple versions of Qt in one session."""
  15      for gui in ["qt", "qt6", "qt5"]:
  16          print(f"Trying {gui}")
  17          try:
  18              set_qt_api(gui)
  19              importlib.import_module("IPython.terminal.pt_inputhooks.qt")
  20              guis_avail.append(gui)
  21              if "QT_API" in os.environ.keys():
  22                  del os.environ["QT_API"]
  23          except ImportError:
  24              pass  # that version of Qt isn't available.
  25          except RuntimeError:
  26              pass  # the version of IPython doesn't know what to do with this Qt version.
  27  
  28  
  29  _get_qt_vers()
  30  
  31  
  32  @pytest.mark.skipif(
  33      len(guis_avail) == 0, reason="No viable version of PyQt or PySide installed."
  34  )
  35  def test_inputhook_qt():
  36      # Choose the "best" Qt version.
  37      gui_ret, _ = get_inputhook_name_and_func("qt")
  38  
  39      assert gui_ret != "qt"  # you get back the specific version that was loaded.
  40      assert gui_ret in guis_avail
  41  
  42      if len(guis_avail) > 2:
  43          # ...and now we're stuck with this version of Qt for good; can't switch.
  44          for not_gui in ["qt6", "qt5"]:
  45              if not_gui != gui_ret:
  46                  break
  47          # Try to import the other gui; it won't work.
  48          gui_ret2, _ = get_inputhook_name_and_func(not_gui)
  49          assert gui_ret2 == gui_ret
  50          assert gui_ret2 != not_gui
  51