summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRan Benita <ran@unusedvar.com>2021-01-01 21:50:38 +0200
committerRan Benita <ran@unusedvar.com>2021-01-24 14:08:39 +0200
commit1db78bec311b9ad161dd201a1796abf82feeb8a8 (patch)
tree1b5bf5ebe73bb46ebccf9e6a925ecd51b008aa5a /src
parent03c3a90c686c4cb0a146e4139125b30cba27075a (diff)
downloadpytest-1db78bec311b9ad161dd201a1796abf82feeb8a8.tar.gz
runner: use insertion-ordered dict instead of stack, dict pair
Since dicts are now ordered, we can use the finalizers dict itself as the dict, simplifying the code.
Diffstat (limited to 'src')
-rw-r--r--src/_pytest/runner.py18
1 files changed, 6 insertions, 12 deletions
diff --git a/src/_pytest/runner.py b/src/_pytest/runner.py
index fe3590d44..5dbb26aef 100644
--- a/src/_pytest/runner.py
+++ b/src/_pytest/runner.py
@@ -406,8 +406,7 @@ class SetupState:
"""Shared state for setting up/tearing down test items or collectors."""
def __init__(self) -> None:
- self.stack: List[Node] = []
- self._finalizers: Dict[Node, List[Callable[[], object]]] = {}
+ self.stack: Dict[Node, List[Callable[[], object]]] = {}
_prepare_exc_key = StoreKey[Union[OutcomeException, Exception]]()
@@ -423,9 +422,7 @@ class SetupState:
needed_collectors = colitem.listchain()
for col in needed_collectors[len(self.stack) :]:
assert col not in self.stack
- assert col not in self._finalizers
- self.stack.append(col)
- self._finalizers[col] = []
+ self.stack[col] = []
try:
col.setup()
except TEST_OUTCOME as e:
@@ -437,16 +434,15 @@ class SetupState:
assert colitem and not isinstance(colitem, tuple)
assert callable(finalizer)
assert colitem in self.stack, (colitem, self.stack)
- self._finalizers[colitem].append(finalizer)
+ self.stack[colitem].append(finalizer)
def teardown_exact(self, nextitem: Optional[Item]) -> None:
needed_collectors = nextitem and nextitem.listchain() or []
exc = None
while self.stack:
- if self.stack == needed_collectors[: len(self.stack)]:
+ if list(self.stack.keys()) == needed_collectors[: len(self.stack)]:
break
- colitem = self.stack.pop()
- finalizers = self._finalizers.pop(colitem)
+ colitem, finalizers = self.stack.popitem()
finalizers.insert(0, colitem.teardown)
while finalizers:
fin = finalizers.pop()
@@ -457,12 +453,10 @@ class SetupState:
# ideally all should be reported.
if exc is None:
exc = e
- for colitem in self._finalizers:
- assert colitem in self.stack
if exc:
raise exc
if nextitem is None:
- assert not self._finalizers
+ assert not self.stack
def collect_one_node(collector: Collector) -> CollectReport: