@@ -406,8 +406,7 @@ class SetupState:
406
406
"""Shared state for setting up/tearing down test items or collectors."""
407
407
408
408
def __init__ (self ) -> None :
409
- self .stack : List [Node ] = []
410
- self ._finalizers : Dict [Node , List [Callable [[], object ]]] = {}
409
+ self .stack : Dict [Node , List [Callable [[], object ]]] = {}
411
410
412
411
_prepare_exc_key = StoreKey [Union [OutcomeException , Exception ]]()
413
412
@@ -423,9 +422,7 @@ def prepare(self, colitem: Item) -> None:
423
422
needed_collectors = colitem .listchain ()
424
423
for col in needed_collectors [len (self .stack ) :]:
425
424
assert col not in self .stack
426
- assert col not in self ._finalizers
427
- self .stack .append (col )
428
- self ._finalizers [col ] = []
425
+ self .stack [col ] = []
429
426
try :
430
427
col .setup ()
431
428
except TEST_OUTCOME as e :
@@ -437,16 +434,15 @@ def addfinalizer(self, finalizer: Callable[[], object], colitem: Node) -> None:
437
434
assert colitem and not isinstance (colitem , tuple )
438
435
assert callable (finalizer )
439
436
assert colitem in self .stack , (colitem , self .stack )
440
- self ._finalizers [colitem ].append (finalizer )
437
+ self .stack [colitem ].append (finalizer )
441
438
442
439
def teardown_exact (self , nextitem : Optional [Item ]) -> None :
443
440
needed_collectors = nextitem and nextitem .listchain () or []
444
441
exc = None
445
442
while self .stack :
446
- if self .stack == needed_collectors [: len (self .stack )]:
443
+ if list ( self .stack . keys ()) == needed_collectors [: len (self .stack )]:
447
444
break
448
- colitem = self .stack .pop ()
449
- finalizers = self ._finalizers .pop (colitem )
445
+ colitem , finalizers = self .stack .popitem ()
450
446
finalizers .insert (0 , colitem .teardown )
451
447
while finalizers :
452
448
fin = finalizers .pop ()
@@ -457,12 +453,10 @@ def teardown_exact(self, nextitem: Optional[Item]) -> None:
457
453
# ideally all should be reported.
458
454
if exc is None :
459
455
exc = e
460
- for colitem in self ._finalizers :
461
- assert colitem in self .stack
462
456
if exc :
463
457
raise exc
464
458
if nextitem is None :
465
- assert not self ._finalizers
459
+ assert not self .stack
466
460
467
461
468
462
def collect_one_node (collector : Collector ) -> CollectReport :
0 commit comments