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