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