Index: testing_support/git/unittest_helpers.py |
diff --git a/testing_support/git/unittest_helpers.py b/testing_support/git/unittest_helpers.py |
index 94a720efa1e5537aafc998b8b94970d1c97fe261..8e091c52dec01967f1b0aa7324d421b9e7ad625e 100644 |
--- a/testing_support/git/unittest_helpers.py |
+++ b/testing_support/git/unittest_helpers.py |
@@ -8,17 +8,19 @@ from testing_support.git.repo import GitRepo |
from testing_support.git.schema import GitRepoSchema |
-class GitRepoSchemaTestBase(auto_stub.TestCase): |
- """A TestCase with a built-in GitRepoSchema. |
+class GitRepoTestBase(auto_stub.TestCase): |
+ """A TestCase with a built-in GitRepoSchema and a GitRepo based on that |
+ schema. |
Expects a class variable REPO_SCHEMA to be a GitRepoSchema string in the form |
described by that class. |
You may also set class variables in the form COMMIT_%(commit_name)s, which |
- provide the content for the given commit_name commits. |
+ provide the content for the given commit_name commits (this behavior can be |
+ overridden by overriding getRepoContent()). |
- You probably will end up using either GitRepoReadOnlyTestBase or |
- GitRepoReadWriteTestBase for real tests. |
+ This GitRepo will appear as self.repo, and will be deleted and recreated for |
+ each test method in the subclass. |
""" |
REPO_SCHEMA = None |
@@ -26,55 +28,32 @@ class GitRepoSchemaTestBase(auto_stub.TestCase): |
def getRepoContent(cls, commit): |
return getattr(cls, 'COMMIT_%s' % commit, None) |
- @classmethod |
- def setUpClass(cls): |
- super(GitRepoSchemaTestBase, cls).setUpClass() |
- assert cls.REPO_SCHEMA is not None |
- cls.r_schema = GitRepoSchema(cls.REPO_SCHEMA, cls.getRepoContent) |
- |
- |
-class GitRepoReadOnlyTestBase(GitRepoSchemaTestBase): |
- """Injects a GitRepo object given the schema and content from |
- GitRepoSchemaTestBase into TestCase classes which subclass this. |
- |
- This GitRepo will appear as self.repo, and will be deleted and recreated once |
- for the duration of all the tests in the subclass. |
- """ |
- REPO_SCHEMA = None |
- |
- @classmethod |
- def setUpClass(cls): |
- super(GitRepoReadOnlyTestBase, cls).setUpClass() |
- assert cls.REPO_SCHEMA is not None |
- cls.repo = GitRepo(cls.r_schema) |
- |
- def setUp(self): |
- self.repo.git('checkout', '-f', self.repo.last_commit) |
- |
- @classmethod |
- def tearDownClass(cls): |
- cls.repo.nuke() |
- super(GitRepoReadOnlyTestBase, cls).tearDownClass() |
- |
- |
-class GitRepoReadWriteTestBase(GitRepoSchemaTestBase): |
- """Injects a GitRepo object given the schema and content from |
- GitRepoSchemaTestBase into TestCase classes which subclass this. |
- |
- This GitRepo will appear as self.repo, and will be deleted and recreated for |
- each test function in the subclass. |
- """ |
- REPO_SCHEMA = None |
+ def assertSchema(self, schema_string): |
+ self.assertEqual(GitRepoSchema(schema_string).simple_graph(), |
+ self.repo.to_schema().simple_graph()) |
def setUp(self): |
- super(GitRepoReadWriteTestBase, self).setUp() |
+ super(GitRepoTestBase, self).setUp() |
+ assert self.REPO_SCHEMA is not None |
+ # TODO(iannucci): r_schema could be established at class-load time, using |
+ # a metaclass. This would enable us to only parse the schema once per |
+ # derived test case class. |
+ self.r_schema = GitRepoSchema(self.REPO_SCHEMA, self.getRepoContent) |
self.repo = GitRepo(self.r_schema) |
+ self.repo.git('checkout', '-f', self.repo.last_commit) |
def tearDown(self): |
- self.repo.nuke() |
- super(GitRepoReadWriteTestBase, self).tearDown() |
+ try: |
+ self.repo.nuke() |
+ finally: |
+ super(GitRepoTestBase, self).tearDown() |
- def assertSchema(self, schema_string): |
- self.assertEqual(GitRepoSchema(schema_string).simple_graph(), |
- self.repo.to_schema().simple_graph()) |
+# The read-only version used to set up and tear down repo on a setUpClass basis, |
+# and the read-write version used to do it on a setUp basis. This is no longer |
+# the case. Keep the names around, but they're deprecated. |
+GitRepoReadWriteTestBase = GitRepoTestBase |
+GitRepoReadOnlyTestBase = GitRepoTestBase |
+ |
+# Additionally, there was a schema-only version, but it was pretty useless |
+GitRepoSchemaTestBase = GitRepoTestBase |