Skip to content

Commit a412dd3

Browse files
authored
Merge pull request #290 from ales-erjavec/tests/eager-cleanup
[MNT] WidgetTest: Cleanup on tearDown
2 parents ebc1a8d + d41bb7b commit a412dd3

File tree

4 files changed

+26
-11
lines changed

4 files changed

+26
-11
lines changed

i18n/si/msgs.jaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -773,7 +773,7 @@ tests/base.py:
773773
TRAVIS: false
774774
APPVEYOR: false
775775
get_instance: false
776-
def `tearDownClass`:
776+
def `_clear_widgets`:
777777
_Cls__didCallOnDeleteWidget: false
778778
def `reset_default_settings`:
779779
settingsHandler: false

orangewidget/tests/base.py

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -270,9 +270,8 @@ def setUpClass(cls):
270270
super().setUpClass()
271271

272272
cls.widgets = []
273-
274273
cls.signal_manager = DummySignalManager()
275-
274+
cls.__report = None
276275
report = None
277276

278277
def get_instance():
@@ -282,17 +281,16 @@ def get_instance():
282281
report.have_report_warning_shown = True # if missing QtWebView/QtWebKit
283282
if not (os.environ.get("TRAVIS") or os.environ.get("APPVEYOR")):
284283
report.show = Mock()
285-
cls.widgets.append(report)
284+
cls.__report = report
286285
return report
287286

288287
cls.tear_down_stack.enter_context(
289288
patch.object(OWReport, "get_instance", get_instance)
290289
)
291290

292291
@classmethod
293-
def tearDownClass(cls) -> None:
294-
cls.signal_manager.clear()
295-
del cls.signal_manager
292+
def _clear_widgets(cls):
293+
"""Clear and dispose of the widgets created via create_widget"""
296294
widgets = cls.widgets[:]
297295
cls.widgets.clear()
298296
while widgets:
@@ -302,11 +300,25 @@ def tearDownClass(cls) -> None:
302300
if not sip.isdeleted(w):
303301
w.deleteLater()
304302
w.signalManager = None
303+
304+
@classmethod
305+
def tearDownClass(cls) -> None:
306+
cls.signal_manager.clear()
307+
del cls.signal_manager
308+
cls._clear_widgets()
309+
310+
if cls.__report is not None:
311+
cls.__report.deleteLater()
312+
cls.__report = None
313+
305314
super().tearDownClass()
306315

316+
def setUp(self):
317+
super().setUp()
318+
307319
def tearDown(self):
308-
"""Process any pending events before the next test is executed."""
309320
self.signal_manager.clear()
321+
self._clear_widgets()
310322
super().tearDown()
311323

312324
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,
339351
with open_widget_classes():
340352
class Cls(cls):
341353
def onDeleteWidget(self):
342-
self.__didCallOnDeleteWidget = True
343-
super(Cls, self).onDeleteWidget()
354+
if not self.__didCallOnDeleteWidget:
355+
self.__didCallOnDeleteWidget = True
356+
super(Cls, self).onDeleteWidget()
344357
__didCallOnDeleteWidget = False
345358

346359
Cls.__name__ = cls.__name__

orangewidget/utils/overlay.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ class OverlayWidget(QWidget):
2727
"""
2828
A widget positioned on top of another widget.
2929
"""
30+
__widget = None
31+
__alignment = Qt.AlignmentFlag.AlignCenter
3032
def __init__(self, parent=None, alignment=Qt.AlignCenter, **kwargs):
3133
super().__init__(parent, **kwargs)
3234
self.setContentsMargins(0, 0, 0, 0)

orangewidget/utils/tests/test_widgetpreview.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ def tearDown(self) -> None:
7171
super().tearDown()
7272

7373
def widget_constructor(self):
74-
return self.create_widget(self.widgetClass)
74+
return self.widgetClass()
7575

7676

7777
class TestWidgetPreview(TestWidgetPreviewBase):

0 commit comments

Comments
 (0)