diff options
author | James Henstridge <james@jamesh.id.au> | 2009-01-20 15:50:19 +1100 |
---|---|---|
committer | James Henstridge <james@jamesh.id.au> | 2009-01-20 15:50:19 +1100 |
commit | c817560b2ae933eaa58a80db1a7b254a7ee02fe8 (patch) | |
tree | f62912ad574b7db8c870ed00fb6b92a288c1ee50 | |
parent | 517ce1f70cb7a969b808a0445dd75c278f61ff69 (diff) | |
download | testresources-c817560b2ae933eaa58a80db1a7b254a7ee02fe8.tar.gz |
Rename _resetResource() to reset() (explicitly documenting it as
overridable), and move the self._dirty check into the method.
-rw-r--r-- | lib/testresources/__init__.py | 26 | ||||
-rw-r--r-- | lib/testresources/tests/test_test_resource.py | 35 |
2 files changed, 53 insertions, 8 deletions
diff --git a/lib/testresources/__init__.py b/lib/testresources/__init__.py index 2f317ea..01b407e 100644 --- a/lib/testresources/__init__.py +++ b/lib/testresources/__init__.py @@ -232,8 +232,8 @@ class TestResource(object): if self._uses == 0: self.clean_all(resource) self._setResource(None) - elif self._dirty: - self._resetResource(resource) + else: + self._setResource(self.reset(resource)) def getResource(self): """Get the resource for this class and record that it's being used. @@ -245,8 +245,8 @@ class TestResource(object): """ if self._uses == 0: self._setResource(self.make_all()) - elif self._dirty: - self._resetResource(self._currentResource) + else: + self._setResource(self.reset(self._currentResource)) self._uses += 1 return self._currentResource @@ -269,6 +269,20 @@ class TestResource(object): raise NotImplementedError( "Override make to construct resources.") + def reset(self, resource): + """Override this to reset resources. + + By default, the resource will be cleaned then remade if it had + previously been `dirtied`. + + :param resource: The existing resource. + :return: The new resource. + """ + if self._dirty: + self.clean_all(resource) + resource = self.make_all() + return resource + def neededResources(self): """Return the resources needed for this resource, including self. @@ -286,10 +300,6 @@ class TestResource(object): result.append(self) return result - def _resetResource(self, old_resource): - self.clean_all(old_resource) - self._setResource(self.make_all()) - def _setResource(self, new_resource): """Set the current resource to a new value.""" self._currentResource = new_resource diff --git a/lib/testresources/tests/test_test_resource.py b/lib/testresources/tests/test_test_resource.py index 754ecd3..88a0634 100644 --- a/lib/testresources/tests/test_test_resource.py +++ b/lib/testresources/tests/test_test_resource.py @@ -45,6 +45,18 @@ class MockResource(testresources.TestResource): return "Boo!" +class MockResettableResource(MockResource): + """Mock resource that logs the number of reset calls too.""" + + def __init__(self): + MockResource.__init__(self) + self.resets = 0 + + def reset(self, resource): + self.resets += 1 + return resource + "!" + + class TestTestResource(testtools.TestCase): def testUnimplementedGetResource(self): @@ -225,3 +237,26 @@ class TestTestResource(testtools.TestCase): self.assertEqual(1, resource_manager.makes) resource = resource_manager.getResource() self.assertEqual(2, resource_manager.makes) + + def testGetResourceResetsResource(self): + resource_manager = MockResettableResource() + resource = resource_manager.getResource() + self.assertEqual(1, resource_manager.makes) + resource = resource_manager.getResource() + self.assertEqual(1, resource_manager.makes) + self.assertEqual(1, resource_manager.resets) + + def testFinishedWithResetsResource(self): + resource_manager = MockResettableResource() + resource = resource_manager.getResource() + self.assertEqual(1, resource_manager.makes) + resource = resource_manager.getResource() + self.assertEqual(1, resource_manager.makes) + self.assertEqual(1, resource_manager.resets) + + resource_manager.finishedWith(resource) + self.assertEqual(2, resource_manager.resets) + self.assertEqual(0, resource_manager.cleans) + resource_manager.finishedWith(resource) + self.assertEqual(2, resource_manager.resets) + self.assertEqual(1, resource_manager.cleans) |