| """Tests for packaging.run.""" |
| |
| import os |
| import sys |
| import shutil |
| from tempfile import mkstemp |
| from io import StringIO |
| |
| from packaging import install |
| from packaging.tests import unittest, support, TESTFN |
| from packaging.run import main |
| |
| # setup script that uses __file__ |
| setup_using___file__ = """\ |
| |
| __file__ |
| |
| from packaging.run import setup |
| setup() |
| """ |
| |
| setup_prints_cwd = """\ |
| |
| import os |
| print os.getcwd() |
| |
| from packaging.run import setup |
| setup() |
| """ |
| |
| |
| class CoreTestCase(support.TempdirManager, support.LoggingCatcher, |
| unittest.TestCase): |
| |
| def setUp(self): |
| super(CoreTestCase, self).setUp() |
| self.old_stdout = sys.stdout |
| self.cleanup_testfn() |
| self.old_argv = sys.argv, sys.argv[:] |
| |
| def tearDown(self): |
| sys.stdout = self.old_stdout |
| self.cleanup_testfn() |
| sys.argv = self.old_argv[0] |
| sys.argv[:] = self.old_argv[1] |
| super(CoreTestCase, self).tearDown() |
| |
| def cleanup_testfn(self): |
| path = TESTFN |
| if os.path.isfile(path): |
| os.remove(path) |
| elif os.path.isdir(path): |
| shutil.rmtree(path) |
| |
| def write_setup(self, text, path=TESTFN): |
| with open(path, "w") as fp: |
| fp.write(text) |
| return path |
| |
| # TODO restore the tests removed six months ago and port them to pysetup |
| |
| def test_install(self): |
| # making sure install returns 0 or 1 exit codes |
| project = os.path.join(os.path.dirname(__file__), 'package.tgz') |
| install_path = self.mkdtemp() |
| old_get_path = install.get_path |
| install.get_path = lambda path: install_path |
| old_mod = os.stat(install_path).st_mode |
| os.chmod(install_path, 0) |
| old_stderr = sys.stderr |
| sys.stderr = StringIO() |
| try: |
| self.assertFalse(install.install(project)) |
| self.assertEqual(main(['install', 'blabla']), 1) |
| finally: |
| sys.stderr = old_stderr |
| os.chmod(install_path, old_mod) |
| install.get_path = old_get_path |
| |
| |
| def test_suite(): |
| return unittest.makeSuite(CoreTestCase) |
| |
| if __name__ == "__main__": |
| unittest.main(defaultTest="test_suite") |