@@ -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__
0 commit comments