aboutsummaryrefslogtreecommitdiffstats
path: root/setuptools/tests/test_svn.py
diff options
context:
space:
mode:
Diffstat (limited to 'setuptools/tests/test_svn.py')
-rw-r--r--setuptools/tests/test_svn.py87
1 files changed, 83 insertions, 4 deletions
diff --git a/setuptools/tests/test_svn.py b/setuptools/tests/test_svn.py
index 7f5f6108..8b73452f 100644
--- a/setuptools/tests/test_svn.py
+++ b/setuptools/tests/test_svn.py
@@ -17,6 +17,54 @@ from setuptools.command import sdist
#requires python >= 2.4
from subprocess import call as _call
+def _extract(self, member, path=None, pwd=None):
+ """for zipfile py2.5 borrowed from cpython"""
+ if not isinstance(member, zipfile.ZipInfo):
+ member = self.getinfo(member)
+
+ if path is None:
+ path = os.getcwd()
+
+ return _extract_member(self, member, path, pwd)
+
+def _extract_from_zip(self, name, dest_path):
+ dest_file = open(dest_path, 'wb')
+ try:
+ dest_file.write(self.read(name))
+ finally:
+ dest_file.close()
+
+def _extract_member(self, member, targetpath, pwd):
+ """for zipfile py2.5 borrowed from cpython"""
+ # build the destination pathname, replacing
+ # forward slashes to platform specific separators.
+ # Strip trailing path separator, unless it represents the root.
+ if (targetpath[-1:] in (os.path.sep, os.path.altsep)
+ and len(os.path.splitdrive(targetpath)[1]) > 1):
+ targetpath = targetpath[:-1]
+
+ # don't include leading "/" from file name if present
+ if member.filename[0] == '/':
+ targetpath = os.path.join(targetpath, member.filename[1:])
+ else:
+ targetpath = os.path.join(targetpath, member.filename)
+
+ targetpath = os.path.normpath(targetpath)
+
+ # Create all upper directories if necessary.
+ upperdirs = os.path.dirname(targetpath)
+ if upperdirs and not os.path.exists(upperdirs):
+ os.makedirs(upperdirs)
+
+ if member.filename[-1] == '/':
+ if not os.path.isdir(targetpath):
+ os.mkdir(targetpath)
+ return targetpath
+
+ _extract_from_zip(self, member.filename, targetpath)
+
+ return targetpath
+
def _remove_dir(target):
@@ -31,13 +79,21 @@ def _remove_dir(target):
class TestSvnVersion(unittest.TestCase):
def test_no_svn_found(self):
- old_path = os.environ['path']
- os.environ['path'] = ''
+ path_variable = None
+ for env in os.environ:
+ if env.lower() == 'path':
+ path_variable = env
+
+ if path_variable is None:
+ self.skipTest('Cannot figure out how to modify path')
+
+ old_path = os.environ[path_variable]
+ os.environ[path_variable] = ''
try:
version = svn_utils.get_svn_tool_version()
self.assertEqual(version, '')
finally:
- os.environ['path'] = old_path
+ os.environ[path_variable] = old_path
def test_svn_should_exist(self):
version = svn_utils.get_svn_tool_version()
@@ -47,13 +103,21 @@ class TestSvnVersion(unittest.TestCase):
class TestSvn_1_7(unittest.TestCase):
def setUp(self):
+ version = svn_utils.get_svn_tool_version()
+ ver_list = [int(x) for x in version.split('.')]
+ if ver_list < [1,7,0]:
+ self.version_err = 'Insufficent Subversion (%s)' % version
+ else:
+ self.version_err = None
+
+
self.temp_dir = tempfile.mkdtemp()
zip_file, source, target = [None, None, None]
try:
zip_file = zipfile.ZipFile(os.path.join('setuptools', 'tests',
'svn17_example.zip'))
for files in zip_file.namelist():
- zip_file.extract(files, self.temp_dir)
+ _extract(zip_file, files, self.temp_dir)
finally:
if zip_file:
zip_file.close()
@@ -66,11 +130,26 @@ class TestSvn_1_7(unittest.TestCase):
os.chdir(self.old_cwd)
_remove_dir(self.temp_dir)
+ def _chk_skip(self):
+ if self.version_err is not None:
+ if hasattr(self, 'skipTest'):
+ self.skipTest(self.version_err)
+ else:
+ sys.stderr.write(self.version_error + "\n")
+ return True
+ return False
+
def test_egg_info(self):
+ if self._chk_skip:
+ return
+
rev = egg_info.egg_info.get_svn_revision()
self.assertEqual(rev, '4')
def test_iterator(self):
+ if self._chk_skip:
+ return
+
expected = set([
os.path.join('.', 'readme.txt'),
os.path.join('.', 'other'),