diff --git a/i18n/si/msgs.jaml b/i18n/si/msgs.jaml index d910dfe9a..5c9aa9b12 100644 --- a/i18n/si/msgs.jaml +++ b/i18n/si/msgs.jaml @@ -773,7 +773,7 @@ tests/base.py: TRAVIS: false APPVEYOR: false get_instance: false - def `tearDownClass`: + def `_clear_widgets`: _Cls__didCallOnDeleteWidget: false def `reset_default_settings`: settingsHandler: false diff --git a/orangewidget/tests/base.py b/orangewidget/tests/base.py index 9a09036e2..a1c800804 100644 --- a/orangewidget/tests/base.py +++ b/orangewidget/tests/base.py @@ -270,9 +270,8 @@ def setUpClass(cls): super().setUpClass() cls.widgets = [] - cls.signal_manager = DummySignalManager() - + cls.__report = None report = None def get_instance(): @@ -282,7 +281,7 @@ def get_instance(): report.have_report_warning_shown = True # if missing QtWebView/QtWebKit if not (os.environ.get("TRAVIS") or os.environ.get("APPVEYOR")): report.show = Mock() - cls.widgets.append(report) + cls.__report = report return report cls.tear_down_stack.enter_context( @@ -290,9 +289,8 @@ def get_instance(): ) @classmethod - def tearDownClass(cls) -> None: - cls.signal_manager.clear() - del cls.signal_manager + def _clear_widgets(cls): + """Clear and dispose of the widgets created via create_widget""" widgets = cls.widgets[:] cls.widgets.clear() while widgets: @@ -302,11 +300,25 @@ def tearDownClass(cls) -> None: if not sip.isdeleted(w): w.deleteLater() w.signalManager = None + + @classmethod + def tearDownClass(cls) -> None: + cls.signal_manager.clear() + del cls.signal_manager + cls._clear_widgets() + + if cls.__report is not None: + cls.__report.deleteLater() + cls.__report = None + super().tearDownClass() + def setUp(self): + super().setUp() + def tearDown(self): - """Process any pending events before the next test is executed.""" self.signal_manager.clear() + self._clear_widgets() super().tearDown() def create_widget(self, cls: Type[T], stored_settings: Optional[dict]=None, @@ -339,8 +351,9 @@ def create_widget(self, cls: Type[T], stored_settings: Optional[dict]=None, with open_widget_classes(): class Cls(cls): def onDeleteWidget(self): - self.__didCallOnDeleteWidget = True - super(Cls, self).onDeleteWidget() + if not self.__didCallOnDeleteWidget: + self.__didCallOnDeleteWidget = True + super(Cls, self).onDeleteWidget() __didCallOnDeleteWidget = False Cls.__name__ = cls.__name__ diff --git a/orangewidget/utils/overlay.py b/orangewidget/utils/overlay.py index d078c13f4..3d2305081 100644 --- a/orangewidget/utils/overlay.py +++ b/orangewidget/utils/overlay.py @@ -27,6 +27,8 @@ class OverlayWidget(QWidget): """ A widget positioned on top of another widget. """ + __widget = None + __alignment = Qt.AlignmentFlag.AlignCenter def __init__(self, parent=None, alignment=Qt.AlignCenter, **kwargs): super().__init__(parent, **kwargs) self.setContentsMargins(0, 0, 0, 0) diff --git a/orangewidget/utils/tests/test_widgetpreview.py b/orangewidget/utils/tests/test_widgetpreview.py index 54d7cdf77..d836c1385 100644 --- a/orangewidget/utils/tests/test_widgetpreview.py +++ b/orangewidget/utils/tests/test_widgetpreview.py @@ -71,7 +71,7 @@ def tearDown(self) -> None: super().tearDown() def widget_constructor(self): - return self.create_widget(self.widgetClass) + return self.widgetClass() class TestWidgetPreview(TestWidgetPreviewBase):