get to a workable state for cached_setup() and docs, move msot related code to SetupState class

--HG--
branch : trunk
This commit is contained in:
holger krekel
2009-05-18 19:06:16 +02:00
parent 767dcc69f3
commit 4035fa6326
8 changed files with 179 additions and 27 deletions

View File

@@ -172,16 +172,32 @@ class SetupState(object):
""" shared state for setting up/tearing down test items or collectors. """
def __init__(self):
self.stack = []
self._finalizers = {}
def addfinalizer(self, finalizer, colitem):
assert callable(finalizer)
#assert colitem in self.stack
self._finalizers.setdefault(colitem, []).append(finalizer)
def _teardown(self, colitem):
finalizers = self._finalizers.pop(colitem, None)
while finalizers:
fin = finalizers.pop()
fin()
colitem.teardown()
for colitem in self._finalizers:
assert colitem in self.stack
def teardown_all(self):
while self.stack:
col = self.stack.pop()
col.teardown()
self._teardown(col)
assert not self._finalizers
def teardown_exact(self, item):
if self.stack and self.stack[-1] == item:
col = self.stack.pop()
col.teardown()
self._teardown(col)
def prepare(self, colitem):
""" setup objects along the collector chain to the test-method
@@ -191,7 +207,7 @@ class SetupState(object):
if self.stack == needed_collectors[:len(self.stack)]:
break
col = self.stack.pop()
col.teardown()
self._teardown(col)
for col in needed_collectors[len(self.stack):]:
col.setup()
self.stack.append(col)