Fred Drake | 46c58c1 | 2008-04-04 05:41:30 +0000 | [diff] [blame] | 1 | """Tests for distutils.core.""" |
| 2 | |
| 3 | import StringIO |
| 4 | import distutils.core |
| 5 | import os |
Fred Drake | fe70562 | 2008-04-04 11:31:14 +0000 | [diff] [blame] | 6 | import shutil |
| 7 | import sys |
Fred Drake | 46c58c1 | 2008-04-04 05:41:30 +0000 | [diff] [blame] | 8 | import test.test_support |
Éric Araujo | 54274ad | 2011-02-03 00:12:18 +0000 | [diff] [blame] | 9 | from test.test_support import captured_stdout, run_unittest |
Fred Drake | 46c58c1 | 2008-04-04 05:41:30 +0000 | [diff] [blame] | 10 | import unittest |
Tarek Ziadé | 2b06d42 | 2009-10-18 09:28:26 +0000 | [diff] [blame] | 11 | from distutils.tests import support |
Serhiy Storchaka | 0d64940 | 2015-11-12 19:46:23 +0200 | [diff] [blame] | 12 | from distutils import log |
Fred Drake | 46c58c1 | 2008-04-04 05:41:30 +0000 | [diff] [blame] | 13 | |
| 14 | # setup script that uses __file__ |
| 15 | setup_using___file__ = """\ |
| 16 | |
| 17 | __file__ |
| 18 | |
| 19 | from distutils.core import setup |
| 20 | setup() |
| 21 | """ |
| 22 | |
Fred Drake | fe70562 | 2008-04-04 11:31:14 +0000 | [diff] [blame] | 23 | setup_prints_cwd = """\ |
| 24 | |
| 25 | import os |
| 26 | print os.getcwd() |
| 27 | |
| 28 | from distutils.core import setup |
| 29 | setup() |
| 30 | """ |
| 31 | |
Fred Drake | 46c58c1 | 2008-04-04 05:41:30 +0000 | [diff] [blame] | 32 | |
Tarek Ziadé | 2b06d42 | 2009-10-18 09:28:26 +0000 | [diff] [blame] | 33 | class CoreTestCase(support.EnvironGuard, unittest.TestCase): |
Fred Drake | 46c58c1 | 2008-04-04 05:41:30 +0000 | [diff] [blame] | 34 | |
Fred Drake | fe70562 | 2008-04-04 11:31:14 +0000 | [diff] [blame] | 35 | def setUp(self): |
Tarek Ziadé | 2b06d42 | 2009-10-18 09:28:26 +0000 | [diff] [blame] | 36 | super(CoreTestCase, self).setUp() |
Fred Drake | fe70562 | 2008-04-04 11:31:14 +0000 | [diff] [blame] | 37 | self.old_stdout = sys.stdout |
| 38 | self.cleanup_testfn() |
Tarek Ziadé | 2b06d42 | 2009-10-18 09:28:26 +0000 | [diff] [blame] | 39 | self.old_argv = sys.argv, sys.argv[:] |
Serhiy Storchaka | 0d64940 | 2015-11-12 19:46:23 +0200 | [diff] [blame] | 40 | self.addCleanup(log.set_threshold, log._global_log.threshold) |
Fred Drake | 46c58c1 | 2008-04-04 05:41:30 +0000 | [diff] [blame] | 41 | |
Fred Drake | fe70562 | 2008-04-04 11:31:14 +0000 | [diff] [blame] | 42 | def tearDown(self): |
| 43 | sys.stdout = self.old_stdout |
| 44 | self.cleanup_testfn() |
Tarek Ziadé | 2b06d42 | 2009-10-18 09:28:26 +0000 | [diff] [blame] | 45 | sys.argv = self.old_argv[0] |
| 46 | sys.argv[:] = self.old_argv[1] |
| 47 | super(CoreTestCase, self).tearDown() |
Fred Drake | fe70562 | 2008-04-04 11:31:14 +0000 | [diff] [blame] | 48 | |
| 49 | def cleanup_testfn(self): |
| 50 | path = test.test_support.TESTFN |
| 51 | if os.path.isfile(path): |
| 52 | os.remove(path) |
| 53 | elif os.path.isdir(path): |
| 54 | shutil.rmtree(path) |
| 55 | |
| 56 | def write_setup(self, text, path=test.test_support.TESTFN): |
Éric Araujo | d1feff7 | 2010-11-06 04:06:18 +0000 | [diff] [blame] | 57 | f = open(path, "w") |
| 58 | try: |
| 59 | f.write(text) |
| 60 | finally: |
| 61 | f.close() |
Fred Drake | fe70562 | 2008-04-04 11:31:14 +0000 | [diff] [blame] | 62 | return path |
Fred Drake | 46c58c1 | 2008-04-04 05:41:30 +0000 | [diff] [blame] | 63 | |
| 64 | def test_run_setup_provides_file(self): |
| 65 | # Make sure the script can use __file__; if that's missing, the test |
| 66 | # setup.py script will raise NameError. |
Fred Drake | fe70562 | 2008-04-04 11:31:14 +0000 | [diff] [blame] | 67 | distutils.core.run_setup( |
| 68 | self.write_setup(setup_using___file__)) |
| 69 | |
| 70 | def test_run_setup_uses_current_dir(self): |
| 71 | # This tests that the setup script is run with the current directory |
Mark Dickinson | 3e4caeb | 2009-02-21 20:27:01 +0000 | [diff] [blame] | 72 | # as its own current directory; this was temporarily broken by a |
Fred Drake | fe70562 | 2008-04-04 11:31:14 +0000 | [diff] [blame] | 73 | # previous patch when TESTFN did not use the current directory. |
| 74 | sys.stdout = StringIO.StringIO() |
| 75 | cwd = os.getcwd() |
| 76 | |
| 77 | # Create a directory and write the setup.py file there: |
| 78 | os.mkdir(test.test_support.TESTFN) |
| 79 | setup_py = os.path.join(test.test_support.TESTFN, "setup.py") |
| 80 | distutils.core.run_setup( |
| 81 | self.write_setup(setup_prints_cwd, path=setup_py)) |
| 82 | |
| 83 | output = sys.stdout.getvalue() |
Fred Drake | fe70562 | 2008-04-04 11:31:14 +0000 | [diff] [blame] | 84 | if output.endswith("\n"): |
| 85 | output = output[:-1] |
| 86 | self.assertEqual(cwd, output) |
Fred Drake | 46c58c1 | 2008-04-04 05:41:30 +0000 | [diff] [blame] | 87 | |
Tarek Ziadé | 6d2db37 | 2009-09-21 12:19:07 +0000 | [diff] [blame] | 88 | def test_debug_mode(self): |
| 89 | # this covers the code called when DEBUG is set |
| 90 | sys.argv = ['setup.py', '--name'] |
| 91 | with captured_stdout() as stdout: |
| 92 | distutils.core.setup(name='bar') |
| 93 | stdout.seek(0) |
Ezio Melotti | 2623a37 | 2010-11-21 13:34:58 +0000 | [diff] [blame] | 94 | self.assertEqual(stdout.read(), 'bar\n') |
Tarek Ziadé | 6d2db37 | 2009-09-21 12:19:07 +0000 | [diff] [blame] | 95 | |
| 96 | distutils.core.DEBUG = True |
| 97 | try: |
| 98 | with captured_stdout() as stdout: |
| 99 | distutils.core.setup(name='bar') |
| 100 | finally: |
| 101 | distutils.core.DEBUG = False |
| 102 | stdout.seek(0) |
| 103 | wanted = "options (after parsing config files):\n" |
Ezio Melotti | 2623a37 | 2010-11-21 13:34:58 +0000 | [diff] [blame] | 104 | self.assertEqual(stdout.readlines()[0], wanted) |
Fred Drake | 46c58c1 | 2008-04-04 05:41:30 +0000 | [diff] [blame] | 105 | |
| 106 | def test_suite(): |
| 107 | return unittest.makeSuite(CoreTestCase) |
| 108 | |
| 109 | if __name__ == "__main__": |
Éric Araujo | 54274ad | 2011-02-03 00:12:18 +0000 | [diff] [blame] | 110 | run_unittest(test_suite()) |