diff options
author | Robert Collins <robertc@robertcollins.net> | 2009-07-07 21:11:21 +1000 |
---|---|---|
committer | Robert Collins <robertc@robertcollins.net> | 2009-07-07 21:11:21 +1000 |
commit | ac557b5c20ac3c0d60cbfd9682ccc70594a7db28 (patch) | |
tree | 4737105d0f71106199dd3ff8f99f32796620fae9 /lib | |
parent | bb6ffa43e6302160f1ef8d67f33e8316d8c1ceff (diff) | |
parent | 6c40fbcb817b9c9ab49585184db6f3209c32a702 (diff) | |
download | testresources-ac557b5c20ac3c0d60cbfd9682ccc70594a7db28.tar.gz |
Merge support for trace_functions in TestResource.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/testresources/__init__.py | 13 | ||||
-rw-r--r-- | lib/testresources/tests/test_test_resource.py | 18 |
2 files changed, 28 insertions, 3 deletions
diff --git a/lib/testresources/__init__.py b/lib/testresources/__init__.py index da26136..2c1b086 100644 --- a/lib/testresources/__init__.py +++ b/lib/testresources/__init__.py @@ -197,17 +197,26 @@ class TestResource(object): setUpCost = 1 tearDownCost = 1 - def __init__(self): + def __init__(self, trace_function=None): + """Create a TestResource object. + + :param trace_function: A callable that takes (event_label, + "start"|"stop", resource). This will be called with to tracec + events when the resource is made and cleaned. + """ self._dirty = False self._uses = 0 self._currentResource = None self.resources = list(getattr(self.__class__, "resources", [])) + self._trace = trace_function or (lambda x,y,z:"") def _clean_all(self, resource): """Clean the dependencies from resource, and then resource itself.""" + self._trace("clean", "start", self) self.clean(resource) for name, manager in self.resources: manager.finishedWith(getattr(resource, name)) + self._trace("clean", "stop", self) def clean(self, resource): """Override this to class method to hook into resource removal.""" @@ -271,12 +280,14 @@ class TestResource(object): def _make_all(self): """Make the dependencies of this resource and this resource.""" + self._trace("make", "start", self) dependency_resources = {} for name, resource in self.resources: dependency_resources[name] = resource.getResource() result = self.make(dependency_resources) for name, value in dependency_resources.items(): setattr(result, name, value) + self._trace("make", "stop", self) return result def make(self, dependency_resources): diff --git a/lib/testresources/tests/test_test_resource.py b/lib/testresources/tests/test_test_resource.py index 4d89469..9a3bedd 100644 --- a/lib/testresources/tests/test_test_resource.py +++ b/lib/testresources/tests/test_test_resource.py @@ -44,8 +44,8 @@ class MockResourceInstance(object): class MockResource(testresources.TestResource): """Mock resource that logs the number of make and clean calls.""" - def __init__(self): - testresources.TestResource.__init__(self) + def __init__(self, trace_function=None): + testresources.TestResource.__init__(self, trace_function=trace_function) self.makes = 0 self.cleans = 0 @@ -325,3 +325,17 @@ class TestTestResource(testtools.TestCase): self.assertEqual(1, resource_manager.makes) resource = resource_manager.getResource() self.assertEqual(2, resource_manager.makes) + + def testTraceFunction(self): + output = [] + def trace(operation, phase, mgr): + output.append((operation, phase, mgr)) + resource_manager = MockResource(trace_function=trace) + expected = [("make", "start", resource_manager), + ("make", "stop", resource_manager)] + r = resource_manager.getResource() + self.assertEqual(expected, output) + expected.extend([("clean", "start", resource_manager), + ("clean", "stop", resource_manager)]) + resource_manager.finishedWith(r) + self.assertEqual(expected, output) |