14710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm"""Tests for distutils.core."""
24710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
34710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmimport StringIO
44710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmimport distutils.core
54710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmimport os
64710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmimport shutil
74710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmimport sys
84710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmimport test.test_support
94710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmfrom test.test_support import captured_stdout, run_unittest
104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmimport unittest
114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmfrom distutils.tests import support
124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# setup script that uses __file__
144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmsetup_using___file__ = """\
154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm__file__
174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmfrom distutils.core import setup
194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmsetup()
204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm"""
214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmsetup_prints_cwd = """\
234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmimport os
254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmprint os.getcwd()
264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmfrom distutils.core import setup
284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmsetup()
294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm"""
304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass CoreTestCase(support.EnvironGuard, unittest.TestCase):
334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm    def setUp(self):
354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        super(CoreTestCase, self).setUp()
364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.old_stdout = sys.stdout
374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.cleanup_testfn()
384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.old_argv = sys.argv, sys.argv[:]
394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm    def tearDown(self):
414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        sys.stdout = self.old_stdout
424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.cleanup_testfn()
434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        sys.argv = self.old_argv[0]
444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        sys.argv[:] = self.old_argv[1]
454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        super(CoreTestCase, self).tearDown()
464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm    def cleanup_testfn(self):
484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        path = test.test_support.TESTFN
494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        if os.path.isfile(path):
504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm            os.remove(path)
514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        elif os.path.isdir(path):
524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm            shutil.rmtree(path)
534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm    def write_setup(self, text, path=test.test_support.TESTFN):
554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        f = open(path, "w")
564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        try:
574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm            f.write(text)
584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        finally:
594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm            f.close()
604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        return path
614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm    def test_run_setup_provides_file(self):
634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        # Make sure the script can use __file__; if that's missing, the test
644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        # setup.py script will raise NameError.
654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        distutils.core.run_setup(
664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm            self.write_setup(setup_using___file__))
674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm    def test_run_setup_uses_current_dir(self):
694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        # This tests that the setup script is run with the current directory
704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        # as its own current directory; this was temporarily broken by a
714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        # previous patch when TESTFN did not use the current directory.
724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        sys.stdout = StringIO.StringIO()
734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        cwd = os.getcwd()
744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        # Create a directory and write the setup.py file there:
764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        os.mkdir(test.test_support.TESTFN)
774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        setup_py = os.path.join(test.test_support.TESTFN, "setup.py")
784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        distutils.core.run_setup(
794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm            self.write_setup(setup_prints_cwd, path=setup_py))
804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        output = sys.stdout.getvalue()
824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        if output.endswith("\n"):
834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm            output = output[:-1]
844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(cwd, output)
854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm    def test_debug_mode(self):
874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        # this covers the code called when DEBUG is set
884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        sys.argv = ['setup.py', '--name']
894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        with captured_stdout() as stdout:
904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm            distutils.core.setup(name='bar')
914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        stdout.seek(0)
924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(stdout.read(), 'bar\n')
934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        distutils.core.DEBUG = True
954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        try:
964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm            with captured_stdout() as stdout:
974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                distutils.core.setup(name='bar')
984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        finally:
994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm            distutils.core.DEBUG = False
1004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        stdout.seek(0)
1014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        wanted = "options (after parsing config files):\n"
1024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(stdout.readlines()[0], wanted)
1034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
1044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef test_suite():
1054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm    return unittest.makeSuite(CoreTestCase)
1064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
1074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmif __name__ == "__main__":
1084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm    run_unittest(test_suite())
109