summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Collins <robertc@robertcollins.net>2009-06-17 22:01:49 +1000
committerRobert Collins <robertc@robertcollins.net>2009-06-17 22:01:49 +1000
commit3838a4d70aaee73f681e81344821955af1a1a627 (patch)
tree463680a6258ea2fd4389c323292de2e1a74e5f0b
parentedb40a649dcae53acfa12932ccddaf99d66b0b1c (diff)
downloadtestresources-3838a4d70aaee73f681e81344821955af1a1a627.tar.gz
Allow tracing of TestResource activity by passing a trace_function to TestResource, fixing bug 284125.
-rw-r--r--NEWS4
-rw-r--r--lib/testresources/__init__.py11
-rw-r--r--lib/testresources/tests/test_test_resource.py14
3 files changed, 26 insertions, 3 deletions
diff --git a/NEWS b/NEWS
index 004e376..260b7d9 100644
--- a/NEWS
+++ b/NEWS
@@ -21,6 +21,10 @@ IN DEVELOPMENT
* Started keeping a NEWS file! (Jonathan Lange)
+ * A trace_function can be supplied when constructing TestResource objects,
+ to allow debugging of when resources are made/cleaned. (Robert Collins,
+ #284125)
+
BUG FIXES:
* Calling getResource on a dirty resource now triggers a clean and re-make
diff --git a/lib/testresources/__init__.py b/lib/testresources/__init__.py
index 4bc7ef4..adccecd 100644
--- a/lib/testresources/__init__.py
+++ b/lib/testresources/__init__.py
@@ -197,14 +197,22 @@ 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 strings to output. This
+ will be called with trace messages 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:"")
def _clean_all(self, resource):
"""Clean the dependencies from resource, and then resource itself."""
+ self._trace("clean: %s\n" % self)
self.clean(resource)
for name, manager in self.resources:
manager.finishedWith(getattr(resource, name))
@@ -271,6 +279,7 @@ class TestResource(object):
def _make_all(self):
"""Make the dependencies of this resource and this resource."""
+ self._trace("make: %s\n" % self)
dependency_resources = {}
for name, resource in self.resources:
dependency_resources[name] = resource.getResource()
diff --git a/lib/testresources/tests/test_test_resource.py b/lib/testresources/tests/test_test_resource.py
index a11c987..83abfbe 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
@@ -275,3 +275,13 @@ class TestTestResource(testtools.TestCase):
self.assertEqual(1, resource_manager.makes)
resource = resource_manager.getResource()
self.assertEqual(2, resource_manager.makes)
+
+ def testTraceFunction(self):
+ output = []
+ resource_manager = MockResource(trace_function=output.append)
+ expected = ["make: %s\n" % resource_manager]
+ r = resource_manager.getResource()
+ self.assertEqual(expected, output)
+ expected.append("clean: %s\n" % resource_manager)
+ resource_manager.finishedWith(r)
+ self.assertEqual(expected, output)