From 0c39ec94423bda77dc46dc6c82294cdfd7447f89 Mon Sep 17 00:00:00 2001 From: Philip Thiem Date: Fri, 5 Jul 2013 10:37:42 -0500 Subject: fixed some issues with OSError have to emulate zipfile extract on py2.5 and earlier for tests --HG-- extra : rebase_source : c6ad4eab19a2a454b8b8043d88d9582168f617aa --- setuptools/tests/test_svn.py | 87 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 83 insertions(+), 4 deletions(-) (limited to 'setuptools/tests/test_svn.py') 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'), -- cgit v1.2.3