mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 07:31:38 +00:00 
			
		
		
		
	This fixes a regression from distutils, where “setup.py --help-commands” prints out commands grouped by topic (i.e. building vs. installing), which is more useful than using sorted.
		
			
				
	
	
		
			92 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			92 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
"""Tests for packaging.run."""
 | 
						|
 | 
						|
import os
 | 
						|
import sys
 | 
						|
from io import StringIO
 | 
						|
 | 
						|
from packaging import install
 | 
						|
from packaging.tests import unittest, support
 | 
						|
from packaging.run import main
 | 
						|
 | 
						|
from test.script_helper import assert_python_ok
 | 
						|
 | 
						|
# setup script that uses __file__
 | 
						|
setup_using___file__ = """\
 | 
						|
__file__
 | 
						|
 | 
						|
from packaging.run import setup
 | 
						|
setup()
 | 
						|
"""
 | 
						|
 | 
						|
setup_prints_cwd = """\
 | 
						|
import os
 | 
						|
print os.getcwd()
 | 
						|
 | 
						|
from packaging.run import setup
 | 
						|
setup()
 | 
						|
"""
 | 
						|
 | 
						|
 | 
						|
class RunTestCase(support.TempdirManager,
 | 
						|
                  support.LoggingCatcher,
 | 
						|
                  unittest.TestCase):
 | 
						|
 | 
						|
    def setUp(self):
 | 
						|
        super(RunTestCase, self).setUp()
 | 
						|
        self.old_argv = sys.argv, sys.argv[:]
 | 
						|
 | 
						|
    def tearDown(self):
 | 
						|
        sys.argv = self.old_argv[0]
 | 
						|
        sys.argv[:] = self.old_argv[1]
 | 
						|
        super(RunTestCase, self).tearDown()
 | 
						|
 | 
						|
    # TODO restore the tests removed six months ago and port them to pysetup
 | 
						|
 | 
						|
    def test_install(self):
 | 
						|
        # making sure install returns 0 or 1 exit codes
 | 
						|
        project = os.path.join(os.path.dirname(__file__), 'package.tgz')
 | 
						|
        install_path = self.mkdtemp()
 | 
						|
        old_get_path = install.get_path
 | 
						|
        install.get_path = lambda path: install_path
 | 
						|
        old_mod = os.stat(install_path).st_mode
 | 
						|
        os.chmod(install_path, 0)
 | 
						|
        old_stderr = sys.stderr
 | 
						|
        sys.stderr = StringIO()
 | 
						|
        try:
 | 
						|
            self.assertFalse(install.install(project))
 | 
						|
            self.assertEqual(main(['install', 'blabla']), 1)
 | 
						|
        finally:
 | 
						|
            sys.stderr = old_stderr
 | 
						|
            os.chmod(install_path, old_mod)
 | 
						|
            install.get_path = old_get_path
 | 
						|
 | 
						|
    def test_show_help(self):
 | 
						|
        # smoke test, just makes sure some help is displayed
 | 
						|
        status, out, err = assert_python_ok('-m', 'packaging.run', '--help')
 | 
						|
        self.assertEqual(status, 0)
 | 
						|
        self.assertGreater(out, b'')
 | 
						|
        self.assertEqual(err, b'')
 | 
						|
 | 
						|
    def test_list_commands(self):
 | 
						|
        status, out, err = assert_python_ok('-m', 'packaging.run', 'run',
 | 
						|
                                            '--list-commands')
 | 
						|
        # check that something is displayed
 | 
						|
        self.assertEqual(status, 0)
 | 
						|
        self.assertGreater(out, b'')
 | 
						|
        self.assertEqual(err, b'')
 | 
						|
 | 
						|
        # make sure the manual grouping of commands is respected
 | 
						|
        check_position = out.find(b'  check: ')
 | 
						|
        build_position = out.find(b'  build: ')
 | 
						|
        self.assertTrue(check_position, out)  # "out" printed as debugging aid
 | 
						|
        self.assertTrue(build_position, out)
 | 
						|
        self.assertLess(check_position, build_position, out)
 | 
						|
 | 
						|
        # TODO test that custom commands don't break --list-commands
 | 
						|
 | 
						|
 | 
						|
def test_suite():
 | 
						|
    return unittest.makeSuite(RunTestCase)
 | 
						|
 | 
						|
if __name__ == "__main__":
 | 
						|
    unittest.main(defaultTest="test_suite")
 |