Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(11)

Side by Side Diff: testing_support/git/unittest_helpers.py

Issue 483553002: Make git unittest_helpers only use setUp/tearDown. (Closed) Base URL: https://chromium.googlesource.com/infra/testing/testing_support.git@master
Patch Set: Fix docs and bump version Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « testing_support/__init__.py ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright 2014 The Chromium Authors. All rights reserved. 1 # Copyright 2014 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 from testing_support import auto_stub 5 from testing_support import auto_stub
6 6
7 from testing_support.git.repo import GitRepo 7 from testing_support.git.repo import GitRepo
8 from testing_support.git.schema import GitRepoSchema 8 from testing_support.git.schema import GitRepoSchema
9 9
10 10
11 class GitRepoSchemaTestBase(auto_stub.TestCase): 11 class GitRepoTestBase(auto_stub.TestCase):
12 """A TestCase with a built-in GitRepoSchema. 12 """A TestCase with a built-in GitRepoSchema and a GitRepo based on that
13 schema.
13 14
14 Expects a class variable REPO_SCHEMA to be a GitRepoSchema string in the form 15 Expects a class variable REPO_SCHEMA to be a GitRepoSchema string in the form
15 described by that class. 16 described by that class.
16 17
17 You may also set class variables in the form COMMIT_%(commit_name)s, which 18 You may also set class variables in the form COMMIT_%(commit_name)s, which
18 provide the content for the given commit_name commits. 19 provide the content for the given commit_name commits (this behavior can be
20 overridden by overriding getRepoContent()).
19 21
20 You probably will end up using either GitRepoReadOnlyTestBase or 22 This GitRepo will appear as self.repo, and will be deleted and recreated for
21 GitRepoReadWriteTestBase for real tests. 23 each test method in the subclass.
22 """ 24 """
23 REPO_SCHEMA = None 25 REPO_SCHEMA = None
24 26
25 @classmethod 27 @classmethod
26 def getRepoContent(cls, commit): 28 def getRepoContent(cls, commit):
27 return getattr(cls, 'COMMIT_%s' % commit, None) 29 return getattr(cls, 'COMMIT_%s' % commit, None)
28 30
29 @classmethod
30 def setUpClass(cls):
31 super(GitRepoSchemaTestBase, cls).setUpClass()
32 assert cls.REPO_SCHEMA is not None
33 cls.r_schema = GitRepoSchema(cls.REPO_SCHEMA, cls.getRepoContent)
34
35
36 class GitRepoReadOnlyTestBase(GitRepoSchemaTestBase):
37 """Injects a GitRepo object given the schema and content from
38 GitRepoSchemaTestBase into TestCase classes which subclass this.
39
40 This GitRepo will appear as self.repo, and will be deleted and recreated once
41 for the duration of all the tests in the subclass.
42 """
43 REPO_SCHEMA = None
44
45 @classmethod
46 def setUpClass(cls):
47 super(GitRepoReadOnlyTestBase, cls).setUpClass()
48 assert cls.REPO_SCHEMA is not None
49 cls.repo = GitRepo(cls.r_schema)
50
51 def setUp(self):
52 self.repo.git('checkout', '-f', self.repo.last_commit)
53
54 @classmethod
55 def tearDownClass(cls):
56 cls.repo.nuke()
57 super(GitRepoReadOnlyTestBase, cls).tearDownClass()
58
59
60 class GitRepoReadWriteTestBase(GitRepoSchemaTestBase):
61 """Injects a GitRepo object given the schema and content from
62 GitRepoSchemaTestBase into TestCase classes which subclass this.
63
64 This GitRepo will appear as self.repo, and will be deleted and recreated for
65 each test function in the subclass.
66 """
67 REPO_SCHEMA = None
68
69 def setUp(self):
70 super(GitRepoReadWriteTestBase, self).setUp()
71 self.repo = GitRepo(self.r_schema)
72
73 def tearDown(self):
74 self.repo.nuke()
75 super(GitRepoReadWriteTestBase, self).tearDown()
76
77 def assertSchema(self, schema_string): 31 def assertSchema(self, schema_string):
78 self.assertEqual(GitRepoSchema(schema_string).simple_graph(), 32 self.assertEqual(GitRepoSchema(schema_string).simple_graph(),
79 self.repo.to_schema().simple_graph()) 33 self.repo.to_schema().simple_graph())
80 34
35 def setUp(self):
36 super(GitRepoTestBase, self).setUp()
37 assert self.REPO_SCHEMA is not None
38 # TODO(iannucci): r_schema could be established at class-load time, using
39 # a metaclass. This would enable us to only parse the schema once per
40 # derived test case class.
41 self.r_schema = GitRepoSchema(self.REPO_SCHEMA, self.getRepoContent)
42 self.repo = GitRepo(self.r_schema)
43 self.repo.git('checkout', '-f', self.repo.last_commit)
44
45 def tearDown(self):
46 try:
47 self.repo.nuke()
48 finally:
49 super(GitRepoTestBase, self).tearDown()
50
51
52 # The read-only version used to set up and tear down repo on a setUpClass basis,
53 # and the read-write version used to do it on a setUp basis. This is no longer
54 # the case. Keep the names around, but they're deprecated.
55 GitRepoReadWriteTestBase = GitRepoTestBase
56 GitRepoReadOnlyTestBase = GitRepoTestBase
57
58 # Additionally, there was a schema-only version, but it was pretty useless
59 GitRepoSchemaTestBase = GitRepoTestBase
OLDNEW
« no previous file with comments | « testing_support/__init__.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698