| | """Tests for distutils.core.""" |
| |
|
| | import io |
| | import distutils.core |
| | import os |
| | import shutil |
| | import sys |
| | import test.support |
| | from test.support import captured_stdout, run_unittest |
| | import unittest |
| | from distutils.tests import support |
| | from distutils import log |
| |
|
| | |
| | setup_using___file__ = """\ |
| | |
| | __file__ |
| | |
| | from distutils.core import setup |
| | setup() |
| | """ |
| |
|
| | setup_prints_cwd = """\ |
| | |
| | import os |
| | print(os.getcwd()) |
| | |
| | from distutils.core import setup |
| | setup() |
| | """ |
| |
|
| | setup_does_nothing = """\ |
| | from distutils.core import setup |
| | setup() |
| | """ |
| |
|
| |
|
| | setup_defines_subclass = """\ |
| | from distutils.core import setup |
| | from distutils.command.install import install as _install |
| | |
| | class install(_install): |
| | sub_commands = _install.sub_commands + ['cmd'] |
| | |
| | setup(cmdclass={'install': install}) |
| | """ |
| |
|
| | class CoreTestCase(support.EnvironGuard, unittest.TestCase): |
| |
|
| | def setUp(self): |
| | super(CoreTestCase, self).setUp() |
| | self.old_stdout = sys.stdout |
| | self.cleanup_testfn() |
| | self.old_argv = sys.argv, sys.argv[:] |
| | self.addCleanup(log.set_threshold, log._global_log.threshold) |
| |
|
| | 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 = test.support.TESTFN |
| | if os.path.isfile(path): |
| | os.remove(path) |
| | elif os.path.isdir(path): |
| | shutil.rmtree(path) |
| |
|
| | def write_setup(self, text, path=test.support.TESTFN): |
| | f = open(path, "w") |
| | try: |
| | f.write(text) |
| | finally: |
| | f.close() |
| | return path |
| |
|
| | def test_run_setup_provides_file(self): |
| | |
| | |
| | distutils.core.run_setup( |
| | self.write_setup(setup_using___file__)) |
| |
|
| | def test_run_setup_preserves_sys_argv(self): |
| | |
| | argv_copy = sys.argv.copy() |
| | distutils.core.run_setup( |
| | self.write_setup(setup_does_nothing)) |
| | self.assertEqual(sys.argv, argv_copy) |
| |
|
| | def test_run_setup_defines_subclass(self): |
| | |
| | |
| | dist = distutils.core.run_setup( |
| | self.write_setup(setup_defines_subclass)) |
| | install = dist.get_command_obj('install') |
| | self.assertIn('cmd', install.sub_commands) |
| |
|
| | def test_run_setup_uses_current_dir(self): |
| | |
| | |
| | |
| | sys.stdout = io.StringIO() |
| | cwd = os.getcwd() |
| |
|
| | |
| | os.mkdir(test.support.TESTFN) |
| | setup_py = os.path.join(test.support.TESTFN, "setup.py") |
| | distutils.core.run_setup( |
| | self.write_setup(setup_prints_cwd, path=setup_py)) |
| |
|
| | output = sys.stdout.getvalue() |
| | if output.endswith("\n"): |
| | output = output[:-1] |
| | self.assertEqual(cwd, output) |
| |
|
| | def test_debug_mode(self): |
| | |
| | sys.argv = ['setup.py', '--name'] |
| | with captured_stdout() as stdout: |
| | distutils.core.setup(name='bar') |
| | stdout.seek(0) |
| | self.assertEqual(stdout.read(), 'bar\n') |
| |
|
| | distutils.core.DEBUG = True |
| | try: |
| | with captured_stdout() as stdout: |
| | distutils.core.setup(name='bar') |
| | finally: |
| | distutils.core.DEBUG = False |
| | stdout.seek(0) |
| | wanted = "options (after parsing config files):\n" |
| | self.assertEqual(stdout.readlines()[0], wanted) |
| |
|
| | def test_suite(): |
| | return unittest.makeSuite(CoreTestCase) |
| |
|
| | if __name__ == "__main__": |
| | run_unittest(test_suite()) |
| |
|