aboutsummaryrefslogtreecommitdiff
path: root/git/test/lib
diff options
context:
space:
mode:
authorSebastian Thiel <byronimo@gmail.com>2011-05-30 13:06:37 +0200
committerSebastian Thiel <byronimo@gmail.com>2011-05-30 13:06:37 +0200
commit024adf37acddd6a5d8293b6b5d15795c59a142c0 (patch)
tree3610b99168f984acb0eefe3a995295f4d3b1d096 /git/test/lib
parent112bb1672d6b28f203e7839e320b985486636800 (diff)
downloadGitPython-024adf37acddd6a5d8293b6b5d15795c59a142c0.tar.gz
GitPython-024adf37acddd6a5d8293b6b5d15795c59a142c0.zip
Fixed tests far enough to allow basic repository tests to be applied to any of the new database types. This reduces code duplication to the mere minimum, but allows custom tests to be added on top easily and flexibly
Diffstat (limited to 'git/test/lib')
-rw-r--r--git/test/lib/base.py20
-rw-r--r--git/test/lib/helper.py40
2 files changed, 41 insertions, 19 deletions
diff --git a/git/test/lib/base.py b/git/test/lib/base.py
index 3725d544..221395c9 100644
--- a/git/test/lib/base.py
+++ b/git/test/lib/base.py
@@ -1,10 +1,9 @@
# Copyright (C) 2010, 2011 Sebastian Thiel (byronimo@gmail.com) and contributors
#
-# This module is part of PureGitDB and is released under
+# This module is part of PureCmdGitDB and is released under
# the New BSD License: http://www.opensource.org/licenses/bsd-license.php
"""Utilities used in ODB testing"""
from git.base import OStream
-from git.db.py import PureGitDB
from git.stream import (
Sha1Writer,
ZippedStoreShaWriter
@@ -73,7 +72,7 @@ def with_rw_repo(func):
shutil.copytree(src_dir, path)
target_gitdir = os.path.join(path, '.git')
assert os.path.isdir(target_gitdir)
- return func(self, PureGitDB(target_gitdir))
+ return func(self, self.RepoCls(target_gitdir))
#END wrapper
wrapper.__name__ = func.__name__
return with_rw_directory(wrapper)
@@ -98,7 +97,7 @@ def with_packs_rw(func):
#{ Routines
-def repo_dir():
+def rorepo_dir():
""":return: path to our own repository, being our own .git directory.
:note: doesn't work in bare repositories"""
base = os.path.join(dirname(dirname(dirname(dirname(__file__)))), '.git')
@@ -106,9 +105,9 @@ def repo_dir():
return base
-def maketemp(*args):
+def maketemp(*args, **kwargs):
"""Wrapper around default tempfile.mktemp to fix an osx issue"""
- tdir = tempfile.mktemp(*args)
+ tdir = tempfile.mktemp(*args, **kwargs)
if sys.platform == 'darwin':
tdir = '/private' + tdir
return tdir
@@ -192,12 +191,3 @@ class DeriveTest(OStream):
#} END stream utilitiess
-#{ Bases
-
-class TestBase(unittest.TestCase):
- """Base class for all tests"""
- # The non-database specific tests just provides a default pure git database
- rorepo = PureGitDB(repo_dir())
-
-#} END bases
-
diff --git a/git/test/lib/helper.py b/git/test/lib/helper.py
index 48d684e0..4fd82899 100644
--- a/git/test/lib/helper.py
+++ b/git/test/lib/helper.py
@@ -12,13 +12,16 @@ import tempfile
import shutil
import cStringIO
-from base import maketemp
+from base import (
+ maketemp,
+ rorepo_dir
+ )
-GIT_REPO = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(__file__))))
__all__ = (
'fixture_path', 'fixture', 'absolute_project_path', 'StringProcessAdapter',
- 'with_rw_repo', 'with_rw_and_rw_remote_repo', 'TestBase', 'TestCase', 'GIT_REPO'
+ 'with_rw_repo', 'with_rw_and_rw_remote_repo', 'TestBase', 'TestCase',
+ 'GlobalsItemDeletorMetaCls'
)
#{ Routines
@@ -200,6 +203,26 @@ def with_rw_and_rw_remote_repo(working_tree_ref):
return argument_passer
#} END decorators
+
+#{ Meta Classes
+class GlobalsItemDeletorMetaCls(type):
+ """Utiltiy to prevent the RepoBase to be picked up by nose as the metacls
+ will delete the instance from the globals"""
+ #{ Configuration
+ # Set this to a string name of the module to delete
+ ModuleToDelete = None
+ #} END configuration
+
+ def __new__(metacls, name, bases, clsdict):
+ assert metacls.ModuleToDelete is not None, "Invalid metaclass configuration"
+ new_type = super(GlobalsItemDeletorMetaCls, metacls).__new__(metacls, name, bases, clsdict)
+ if name != metacls.ModuleToDelete:
+ mod = __import__(new_type.__module__, globals(), locals(), new_type.__module__)
+ delattr(mod, metacls.ModuleToDelete)
+ #END handle deletion
+ return new_type
+
+#} END meta classes
class TestBase(TestCase):
"""
@@ -217,7 +240,15 @@ class TestBase(TestCase):
The rorepo is in fact your current project's git repo. If you refer to specific
shas for your objects, be sure you choose some that are part of the immutable portion
of the project history ( to assure tests don't fail for others ).
+
+ Derived types can override the default repository type to create a differnt
+ read-only repo, allowing to test their specific type
"""
+ #{ Configuration
+ # The repository type to instantiate. It takes at least a path to operate upon
+ # during instantiation.
+ RepoCls = None
+ #} END configuration
@classmethod
def setUpAll(cls):
@@ -225,7 +256,8 @@ class TestBase(TestCase):
Dynamically add a read-only repository to our actual type. This way
each test type has its own repository
"""
- cls.rorepo = Repo(GIT_REPO)
+ assert cls.RepoCls is not None, "RepoCls class member must be set"
+ cls.rorepo = cls.RepoCls(rorepo_dir())
def _make_file(self, rela_path, data, repo=None):
"""