Skip to content

Commit

Permalink
Merge pull request #335 from dalthviz/fixes_issue_265
Browse files Browse the repository at this point in the history
PR: Fix uic skipped tests and PyQt 6.3.0 segfaulting tests
  • Loading branch information
CAM-Gerlach authored Apr 19, 2022
2 parents b1d4a65 + 6893baf commit 5c7b09b
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 39 deletions.
2 changes: 2 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -52,10 +52,12 @@ jobs:
python-version: '3.10'
use-conda: 'No'
pyside2-version: '5.15' # No 5.12 wheel on Windows and Python 3.10
pyside6-version: '6.3'
- os: windows-latest
python-version: '3.7'
use-conda: 'Yes'
pyqt5-qt-version: '5.9'
pyqt6-qt-version: '6.2'
- os: macos-latest
python-version: '3.7'
use-conda: 'No'
Expand Down
8 changes: 6 additions & 2 deletions .github/workflows/test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -29,11 +29,15 @@ else
if [ "${1}" = "pyqt5" ]; then
pip install pyqt5==${PYQT5_VERSION:-"5.15"}.* PyQtWebEngine==${PYQT5_VERSION:-"5.15"}.*
elif [ "${1}" = "pyqt6" ]; then
pip install pyqt6==${PYQT6_VERSION:-"6.2"}.* PyQt6-WebEngine==${PYQT6_VERSION:-"6.2"}.*
pip install pyqt6==${PYQT6_VERSION:-"6.3"}.* PyQt6-WebEngine==${PYQT6_VERSION:-"6.3"}.* PyQt6-Qt6==${PYQT6_QT_VERSION:-"6.3"}.*
elif [ "${1}" = "pyside2" ]; then
pip install pyside2==${PYSIDE2_VERSION:-"5.12"}.*
elif [ "${1}" = "pyside6" ]; then
pip install pyside6==${PYSIDE6_VERSION:-"6.2"}.*
if [ "${PYSIDE6_VERSION:-"6.3":0:3}" = "6.3" ]; then
pip install pyside6==${PYSIDE6_VERSION:-"6.3"}.* pyside6-addons==${PYSIDE6_VERSION:-"6.3"}.* pyside6-essentials==${PYSIDE6_VERSION:-"6.3"}.*
else
pip install pyside6==${PYSIDE6_VERSION:-"6.2"}.*
fi
else
exit 1
fi
Expand Down
52 changes: 15 additions & 37 deletions qtpy/tests/test_uic.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
pytest.importorskip("pyside2uic", reason="pyside2uic not installed")

from qtpy import uic
from qtpy.uic import loadUi, loadUiType
from qtpy.tests.utils import not_using_conda


QCOMBOBOX_SUBCLASS = """
Expand Down Expand Up @@ -42,30 +42,19 @@ def enabled_qcombobox_subclass(temp_dir_path):
sys.path.pop(0)


def get_qapp(icon_path=None):
"""
Helper function to return a QApplication instance
"""
qapp = QtWidgets.QApplication.instance()
if qapp is None:
qapp = QtWidgets.QApplication([''])
return qapp


@pytest.mark.skipif(
os.environ.get('CI', None) is not None
and sys.platform.startswith('linux'),
reason="Segfaults on Linux CIs under all bindings (PYSIDE2/6 & PYQT5/6)")
def test_load_ui():
sys.platform.startswith('linux') and not_using_conda(),
reason="Segfaults on Linux when not using conda under all bindings (PYSIDE2/6 & PYQT5/6)")
def test_load_ui(qtbot):
"""
Make sure that the patched loadUi function behaves as expected with a
simple .ui file.
"""
app = get_qapp()
with warnings.catch_warnings():
warnings.filterwarnings(
"ignore", category=DeprecationWarning, message=".*mode.*")
ui = loadUi(os.path.join(os.path.dirname(__file__), 'test.ui'))
ui = uic.loadUi(os.path.join(os.path.dirname(__file__), 'test.ui'))

assert isinstance(ui.pushButton, QtWidgets.QPushButton)
assert isinstance(ui.comboBox, QComboBox)

Expand All @@ -74,19 +63,17 @@ def test_load_ui():
PYSIDE2 or PYSIDE6,
reason="PySide2uic not consistantly installed across platforms/versions")
@pytest.mark.skipif(
os.environ.get('CI', None) is not None
and sys.platform.startswith('linux'),
reason="Segfaults on Linux CIs under all bindings (PYSIDE2/6 & PYQT5/6)")
def test_load_ui_type():
sys.platform.startswith('linux') and not_using_conda(),
reason="Segfaults on Linux when not using conda under all bindings (PYSIDE2/6 & PYQT5/6)")
def test_load_ui_type(qtbot):
"""
Make sure that the patched loadUiType function behaves as expected with a
simple .ui file.
"""
app = get_qapp()
with warnings.catch_warnings():
warnings.filterwarnings(
"ignore", category=DeprecationWarning, message=".*mode.*")
ui_type, ui_base_type = loadUiType(
ui_type, ui_base_type = uic.loadUiType(
os.path.join(os.path.dirname(__file__), 'test.ui'))
assert ui_type.__name__ == 'Ui_Form'

Expand All @@ -102,35 +89,26 @@ def __init__(self):


@pytest.mark.skipif(
PYSIDE2 and sys.platform == "darwin"
and sys.version_info.major == 3 and sys.version_info.minor == 9
and not_using_conda(),
reason="Fails on this specific platform, at least on our CIs")
@pytest.mark.skipif(
os.environ.get('CI', None) is not None
and sys.platform.startswith('linux'),
reason="Segfaults on Linux CIs under all bindings (PYSIDE2/6 & PYQT5/6)")
def test_load_ui_custom_auto(tmp_path):
sys.platform.startswith('linux') and not_using_conda(),
reason="Segfaults on Linux when not using conda under all bindings (PYSIDE2/6 & PYQT5/6)")
def test_load_ui_custom_auto(qtbot, tmp_path):
"""
Test that we can load a .ui file with custom widgets without having to
explicitly specify a dictionary of custom widgets, even in the case of
PySide.
"""

app = get_qapp()

with enabled_qcombobox_subclass(tmp_path):
from qcombobox_subclass import _QComboBoxSubclass
with warnings.catch_warnings():
warnings.filterwarnings(
"ignore", category=DeprecationWarning, message=".*mode.*")
ui = loadUi(
ui = uic.loadUi(
os.path.join(os.path.dirname(__file__), 'test_custom.ui'))

assert isinstance(ui.pushButton, QtWidgets.QPushButton)
assert isinstance(ui.comboBox, _QComboBoxSubclass)

@pytest.mark.skipif(PYSIDE6, reason="Unavailable on PySide6")

def test_load_full_uic():
"""Test that we load the full uic objects."""
QT_API = os.environ.get('QT_API', '').lower()
Expand Down

0 comments on commit 5c7b09b

Please sign in to comment.