blob: 41321f7db4eee64affcd2692175350498ff85918 [file] [log] [blame]
Neal Norwitzf5c7c2e2008-04-05 04:47:45 +00001"""Tests for distutils.core."""
2
3import io
4import distutils.core
5import os
6import shutil
7import sys
Benjamin Petersonee8712c2008-05-20 21:35:26 +00008import test.support
Éric Araujob344dd02011-02-02 21:38:37 +00009from test.support import captured_stdout, run_unittest
Neal Norwitzf5c7c2e2008-04-05 04:47:45 +000010import unittest
Tarek Ziadéf456a152009-10-18 12:41:30 +000011from distutils.tests import support
Neal Norwitzf5c7c2e2008-04-05 04:47:45 +000012
13# setup script that uses __file__
14setup_using___file__ = """\
15
16__file__
17
18from distutils.core import setup
19setup()
20"""
21
22setup_prints_cwd = """\
23
24import os
25print(os.getcwd())
26
27from distutils.core import setup
28setup()
29"""
30
31
Tarek Ziadéf456a152009-10-18 12:41:30 +000032class CoreTestCase(support.EnvironGuard, unittest.TestCase):
Neal Norwitzf5c7c2e2008-04-05 04:47:45 +000033
34 def setUp(self):
Tarek Ziadéf456a152009-10-18 12:41:30 +000035 super(CoreTestCase, self).setUp()
Neal Norwitzf5c7c2e2008-04-05 04:47:45 +000036 self.old_stdout = sys.stdout
37 self.cleanup_testfn()
Tarek Ziadéf456a152009-10-18 12:41:30 +000038 self.old_argv = sys.argv, sys.argv[:]
Neal Norwitzf5c7c2e2008-04-05 04:47:45 +000039
40 def tearDown(self):
41 sys.stdout = self.old_stdout
42 self.cleanup_testfn()
Tarek Ziadéf456a152009-10-18 12:41:30 +000043 sys.argv = self.old_argv[0]
44 sys.argv[:] = self.old_argv[1]
45 super(CoreTestCase, self).tearDown()
Neal Norwitzf5c7c2e2008-04-05 04:47:45 +000046
47 def cleanup_testfn(self):
Benjamin Petersonee8712c2008-05-20 21:35:26 +000048 path = test.support.TESTFN
Neal Norwitzf5c7c2e2008-04-05 04:47:45 +000049 if os.path.isfile(path):
50 os.remove(path)
51 elif os.path.isdir(path):
52 shutil.rmtree(path)
53
Benjamin Petersonee8712c2008-05-20 21:35:26 +000054 def write_setup(self, text, path=test.support.TESTFN):
Éric Araujoc6d7ead2010-11-06 02:58:56 +000055 f = open(path, "w")
56 try:
57 f.write(text)
58 finally:
59 f.close()
Neal Norwitzf5c7c2e2008-04-05 04:47:45 +000060 return path
61
62 def test_run_setup_provides_file(self):
63 # Make sure the script can use __file__; if that's missing, the test
64 # setup.py script will raise NameError.
65 distutils.core.run_setup(
66 self.write_setup(setup_using___file__))
67
68 def test_run_setup_uses_current_dir(self):
69 # This tests that the setup script is run with the current directory
Mark Dickinson934896d2009-02-21 20:59:32 +000070 # as its own current directory; this was temporarily broken by a
Neal Norwitzf5c7c2e2008-04-05 04:47:45 +000071 # previous patch when TESTFN did not use the current directory.
72 sys.stdout = io.StringIO()
73 cwd = os.getcwd()
74
75 # Create a directory and write the setup.py file there:
Benjamin Petersonee8712c2008-05-20 21:35:26 +000076 os.mkdir(test.support.TESTFN)
77 setup_py = os.path.join(test.support.TESTFN, "setup.py")
Neal Norwitzf5c7c2e2008-04-05 04:47:45 +000078 distutils.core.run_setup(
79 self.write_setup(setup_prints_cwd, path=setup_py))
80
81 output = sys.stdout.getvalue()
82 if output.endswith("\n"):
83 output = output[:-1]
84 self.assertEqual(cwd, output)
85
Tarek Ziadé83496692009-09-21 13:10:05 +000086 def test_debug_mode(self):
87 # this covers the code called when DEBUG is set
88 sys.argv = ['setup.py', '--name']
89 with captured_stdout() as stdout:
90 distutils.core.setup(name='bar')
91 stdout.seek(0)
Ezio Melotti19f2aeb2010-11-21 01:30:29 +000092 self.assertEqual(stdout.read(), 'bar\n')
Tarek Ziadé83496692009-09-21 13:10:05 +000093
94 distutils.core.DEBUG = True
95 try:
96 with captured_stdout() as stdout:
97 distutils.core.setup(name='bar')
98 finally:
99 distutils.core.DEBUG = False
100 stdout.seek(0)
101 wanted = "options (after parsing config files):\n"
Ezio Melotti19f2aeb2010-11-21 01:30:29 +0000102 self.assertEqual(stdout.readlines()[0], wanted)
Neal Norwitzf5c7c2e2008-04-05 04:47:45 +0000103
104def test_suite():
105 return unittest.makeSuite(CoreTestCase)
106
107if __name__ == "__main__":
Éric Araujob344dd02011-02-02 21:38:37 +0000108 run_unittest(test_suite())