| 
									
										
										
										
											2004-06-25 23:02:59 +00:00
										 |  |  | """Tests for distutils.command.install.""" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import os | 
					
						
							| 
									
										
										
										
											2009-02-27 12:58:56 +00:00
										 |  |  | import os.path | 
					
						
							|  |  |  | import sys | 
					
						
							| 
									
										
										
										
											2004-06-25 23:02:59 +00:00
										 |  |  | import unittest | 
					
						
							| 
									
										
										
										
											2009-02-27 12:58:56 +00:00
										 |  |  | import site | 
					
						
							| 
									
										
										
										
											2004-06-25 23:02:59 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
											  
											
												Merged revisions 86236,86240,86332,86340,87271,87273,87447 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k
The missing NEWS entries correspond to changes that were made before 3.1.3, but
I think it’s not usual to edit entries of released versions, so I put them at
the top.
........
  r86236 | eric.araujo | 2010-11-06 03:44:43 +0100 (sam., 06 nov. 2010) | 2 lines
  Make sure each test can be run standalone (./python Lib/distutils/tests/x.py)
........
  r86240 | eric.araujo | 2010-11-06 05:11:59 +0100 (sam., 06 nov. 2010) | 2 lines
  Prevent ResourceWarnings in test_gettext
........
  r86332 | eric.araujo | 2010-11-08 19:15:17 +0100 (lun., 08 nov. 2010) | 4 lines
  Add missing NEWS entry for a fix committed by Senthil.
  All recent modifications to distutils should now be covered in NEWS.
........
  r86340 | eric.araujo | 2010-11-08 22:48:23 +0100 (lun., 08 nov. 2010) | 2 lines
  This was actually fixed for the previous alpha.
........
  r87271 | eric.araujo | 2010-12-15 20:09:58 +0100 (mer., 15 déc. 2010) | 2 lines
  Improve trace documentation (#9264).  Patch by Eli Bendersky.
........
  r87273 | eric.araujo | 2010-12-15 20:30:15 +0100 (mer., 15 déc. 2010) | 2 lines
  Use nested method directives, rewrap long lines, fix whitespace.
........
  r87447 | eric.araujo | 2010-12-23 20:13:05 +0100 (jeu., 23 déc. 2010) | 2 lines
  Fix typo in superclass method name
........
											
										 
											2011-02-02 21:38:37 +00:00
										 |  |  | from test.support import captured_stdout, run_unittest | 
					
						
							| 
									
										
										
										
											2009-09-21 13:10:05 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-06-25 23:02:59 +00:00
										 |  |  | from distutils.command.install import install | 
					
						
							| 
									
										
										
										
											2009-02-27 12:58:56 +00:00
										 |  |  | from distutils.command import install as install_module | 
					
						
							|  |  |  | from distutils.command.install import INSTALL_SCHEMES | 
					
						
							| 
									
										
										
										
											2004-06-25 23:02:59 +00:00
										 |  |  | from distutils.core import Distribution | 
					
						
							| 
									
										
										
										
											2009-06-04 07:39:50 +00:00
										 |  |  | from distutils.errors import DistutilsOptionError | 
					
						
							| 
									
										
										
										
											2004-06-25 23:02:59 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | from distutils.tests import support | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-06-04 07:39:50 +00:00
										 |  |  | class InstallTestCase(support.TempdirManager, | 
					
						
							| 
									
										
										
										
											2009-10-18 12:41:30 +00:00
										 |  |  |                       support.EnvironGuard, | 
					
						
							| 
									
										
										
										
											2009-06-04 07:39:50 +00:00
										 |  |  |                       support.LoggingSilencer, | 
					
						
							|  |  |  |                       unittest.TestCase): | 
					
						
							| 
									
										
										
										
											2004-06-25 23:02:59 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_home_installation_scheme(self): | 
					
						
							|  |  |  |         # This ensure two things: | 
					
						
							|  |  |  |         # - that --home generates the desired set of directory names | 
					
						
							|  |  |  |         # - test --home is supported on all platforms | 
					
						
							|  |  |  |         builddir = self.mkdtemp() | 
					
						
							|  |  |  |         destination = os.path.join(builddir, "installation") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         dist = Distribution({"name": "foopkg"}) | 
					
						
							|  |  |  |         # script_name need not exist, it just need to be initialized | 
					
						
							|  |  |  |         dist.script_name = os.path.join(builddir, "setup.py") | 
					
						
							|  |  |  |         dist.command_obj["build"] = support.DummyCommand( | 
					
						
							|  |  |  |             build_base=builddir, | 
					
						
							|  |  |  |             build_lib=os.path.join(builddir, "lib"), | 
					
						
							|  |  |  |             ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         cmd = install(dist) | 
					
						
							|  |  |  |         cmd.home = destination | 
					
						
							|  |  |  |         cmd.ensure_finalized() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         self.assertEqual(cmd.install_base, destination) | 
					
						
							|  |  |  |         self.assertEqual(cmd.install_platbase, destination) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         def check_path(got, expected): | 
					
						
							|  |  |  |             got = os.path.normpath(got) | 
					
						
							|  |  |  |             expected = os.path.normpath(expected) | 
					
						
							|  |  |  |             self.assertEqual(got, expected) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         libdir = os.path.join(destination, "lib", "python") | 
					
						
							|  |  |  |         check_path(cmd.install_lib, libdir) | 
					
						
							|  |  |  |         check_path(cmd.install_platlib, libdir) | 
					
						
							|  |  |  |         check_path(cmd.install_purelib, libdir) | 
					
						
							|  |  |  |         check_path(cmd.install_headers, | 
					
						
							|  |  |  |                    os.path.join(destination, "include", "python", "foopkg")) | 
					
						
							|  |  |  |         check_path(cmd.install_scripts, os.path.join(destination, "bin")) | 
					
						
							|  |  |  |         check_path(cmd.install_data, destination) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-27 12:58:56 +00:00
										 |  |  |     def test_user_site(self): | 
					
						
							|  |  |  |         # site.USER_SITE was introduced in 2.6 | 
					
						
							|  |  |  |         if sys.version < '2.6': | 
					
						
							|  |  |  |             return | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-16 11:05:33 +02:00
										 |  |  |         # preparing the environment for the test | 
					
						
							| 
									
										
										
										
											2009-02-27 12:58:56 +00:00
										 |  |  |         self.old_user_base = site.USER_BASE | 
					
						
							|  |  |  |         self.old_user_site = site.USER_SITE | 
					
						
							|  |  |  |         self.tmpdir = self.mkdtemp() | 
					
						
							|  |  |  |         self.user_base = os.path.join(self.tmpdir, 'B') | 
					
						
							|  |  |  |         self.user_site = os.path.join(self.tmpdir, 'S') | 
					
						
							|  |  |  |         site.USER_BASE = self.user_base | 
					
						
							|  |  |  |         site.USER_SITE = self.user_site | 
					
						
							|  |  |  |         install_module.USER_BASE = self.user_base | 
					
						
							|  |  |  |         install_module.USER_SITE = self.user_site | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         def _expanduser(path): | 
					
						
							|  |  |  |             return self.tmpdir | 
					
						
							|  |  |  |         self.old_expand = os.path.expanduser | 
					
						
							|  |  |  |         os.path.expanduser = _expanduser | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  |             # this is the actual test | 
					
						
							|  |  |  |             self._test_user_site() | 
					
						
							|  |  |  |         finally: | 
					
						
							|  |  |  |             site.USER_BASE = self.old_user_base | 
					
						
							|  |  |  |             site.USER_SITE = self.old_user_site | 
					
						
							|  |  |  |             install_module.USER_BASE = self.old_user_base | 
					
						
							|  |  |  |             install_module.USER_SITE = self.old_user_site | 
					
						
							|  |  |  |             os.path.expanduser = self.old_expand | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def _test_user_site(self): | 
					
						
							|  |  |  |         for key in ('nt_user', 'unix_user', 'os2_home'): | 
					
						
							| 
									
										
										
										
											2009-08-13 08:51:18 +00:00
										 |  |  |             self.assertTrue(key in INSTALL_SCHEMES) | 
					
						
							| 
									
										
										
										
											2009-02-27 12:58:56 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         dist = Distribution({'name': 'xx'}) | 
					
						
							|  |  |  |         cmd = install(dist) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # making sure the user option is there | 
					
						
							|  |  |  |         options = [name for name, short, lable in | 
					
						
							|  |  |  |                    cmd.user_options] | 
					
						
							| 
									
										
										
										
											2009-08-13 08:51:18 +00:00
										 |  |  |         self.assertTrue('user' in options) | 
					
						
							| 
									
										
										
										
											2009-02-27 12:58:56 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         # setting a value | 
					
						
							|  |  |  |         cmd.user = 1 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # user base and site shouldn't be created yet | 
					
						
							| 
									
										
										
										
											2009-08-13 08:51:18 +00:00
										 |  |  |         self.assertTrue(not os.path.exists(self.user_base)) | 
					
						
							|  |  |  |         self.assertTrue(not os.path.exists(self.user_site)) | 
					
						
							| 
									
										
										
										
											2009-02-27 12:58:56 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         # let's run finalize | 
					
						
							|  |  |  |         cmd.ensure_finalized() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # now they should | 
					
						
							| 
									
										
										
										
											2009-08-13 08:51:18 +00:00
										 |  |  |         self.assertTrue(os.path.exists(self.user_base)) | 
					
						
							|  |  |  |         self.assertTrue(os.path.exists(self.user_site)) | 
					
						
							| 
									
										
										
										
											2009-02-27 12:58:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-08-13 08:51:18 +00:00
										 |  |  |         self.assertTrue('userbase' in cmd.config_vars) | 
					
						
							|  |  |  |         self.assertTrue('usersite' in cmd.config_vars) | 
					
						
							| 
									
										
										
										
											2004-06-25 23:02:59 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-06-04 07:39:50 +00:00
										 |  |  |     def test_handle_extra_path(self): | 
					
						
							|  |  |  |         dist = Distribution({'name': 'xx', 'extra_path': 'path,dirs'}) | 
					
						
							|  |  |  |         cmd = install(dist) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # two elements | 
					
						
							|  |  |  |         cmd.handle_extra_path() | 
					
						
							| 
									
										
										
										
											2010-11-21 01:30:29 +00:00
										 |  |  |         self.assertEqual(cmd.extra_path, ['path', 'dirs']) | 
					
						
							|  |  |  |         self.assertEqual(cmd.extra_dirs, 'dirs') | 
					
						
							|  |  |  |         self.assertEqual(cmd.path_file, 'path') | 
					
						
							| 
									
										
										
										
											2009-06-04 07:39:50 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         # one element | 
					
						
							|  |  |  |         cmd.extra_path = ['path'] | 
					
						
							|  |  |  |         cmd.handle_extra_path() | 
					
						
							| 
									
										
										
										
											2010-11-21 01:30:29 +00:00
										 |  |  |         self.assertEqual(cmd.extra_path, ['path']) | 
					
						
							|  |  |  |         self.assertEqual(cmd.extra_dirs, 'path') | 
					
						
							|  |  |  |         self.assertEqual(cmd.path_file, 'path') | 
					
						
							| 
									
										
										
										
											2009-06-04 07:39:50 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         # none | 
					
						
							|  |  |  |         dist.extra_path = cmd.extra_path = None | 
					
						
							|  |  |  |         cmd.handle_extra_path() | 
					
						
							| 
									
										
										
										
											2010-11-21 01:30:29 +00:00
										 |  |  |         self.assertEqual(cmd.extra_path, None) | 
					
						
							|  |  |  |         self.assertEqual(cmd.extra_dirs, '') | 
					
						
							|  |  |  |         self.assertEqual(cmd.path_file, None) | 
					
						
							| 
									
										
										
										
											2009-06-04 07:39:50 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         # three elements (no way !) | 
					
						
							|  |  |  |         cmd.extra_path = 'path,dirs,again' | 
					
						
							|  |  |  |         self.assertRaises(DistutilsOptionError, cmd.handle_extra_path) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_finalize_options(self): | 
					
						
							|  |  |  |         dist = Distribution({'name': 'xx'}) | 
					
						
							|  |  |  |         cmd = install(dist) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # must supply either prefix/exec-prefix/home or | 
					
						
							|  |  |  |         # install-base/install-platbase -- not both | 
					
						
							|  |  |  |         cmd.prefix = 'prefix' | 
					
						
							|  |  |  |         cmd.install_base = 'base' | 
					
						
							|  |  |  |         self.assertRaises(DistutilsOptionError, cmd.finalize_options) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # must supply either home or prefix/exec-prefix -- not both | 
					
						
							|  |  |  |         cmd.install_base = None | 
					
						
							|  |  |  |         cmd.home = 'home' | 
					
						
							|  |  |  |         self.assertRaises(DistutilsOptionError, cmd.finalize_options) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # can't combine user with with prefix/exec_prefix/home or | 
					
						
							|  |  |  |         # install_(plat)base | 
					
						
							|  |  |  |         cmd.prefix = None | 
					
						
							|  |  |  |         cmd.user = 'user' | 
					
						
							|  |  |  |         self.assertRaises(DistutilsOptionError, cmd.finalize_options) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_record(self): | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         install_dir = self.mkdtemp() | 
					
						
							|  |  |  |         pkgdir, dist = self.create_dist() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         dist = Distribution() | 
					
						
							|  |  |  |         cmd = install(dist) | 
					
						
							|  |  |  |         dist.command_obj['install'] = cmd | 
					
						
							|  |  |  |         cmd.root = install_dir | 
					
						
							|  |  |  |         cmd.record = os.path.join(pkgdir, 'RECORD') | 
					
						
							|  |  |  |         cmd.ensure_finalized() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         cmd.run() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # let's check the RECORD file was created with one | 
					
						
							|  |  |  |         # line (the egg info file) | 
					
						
							| 
									
										
										
										
											2010-11-06 02:58:56 +00:00
										 |  |  |         f = open(cmd.record) | 
					
						
							|  |  |  |         try: | 
					
						
							| 
									
										
										
										
											2010-11-21 01:30:29 +00:00
										 |  |  |             self.assertEqual(len(f.readlines()), 1) | 
					
						
							| 
									
										
										
										
											2010-11-06 02:58:56 +00:00
										 |  |  |         finally: | 
					
						
							|  |  |  |             f.close() | 
					
						
							| 
									
										
										
										
											2009-06-04 07:39:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-09-21 13:10:05 +00:00
										 |  |  |     def test_debug_mode(self): | 
					
						
							|  |  |  |         # this covers the code called when DEBUG is set | 
					
						
							|  |  |  |         old_logs_len = len(self.logs) | 
					
						
							|  |  |  |         install_module.DEBUG = True | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  |             with captured_stdout() as stdout: | 
					
						
							|  |  |  |                 self.test_record() | 
					
						
							|  |  |  |         finally: | 
					
						
							|  |  |  |             install_module.DEBUG = False | 
					
						
							|  |  |  |         self.assertTrue(len(self.logs) > old_logs_len) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-06-25 23:02:59 +00:00
										 |  |  | def test_suite(): | 
					
						
							|  |  |  |     return unittest.makeSuite(InstallTestCase) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if __name__ == "__main__": | 
					
						
							| 
									
										
											  
											
												Merged revisions 86236,86240,86332,86340,87271,87273,87447 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k
The missing NEWS entries correspond to changes that were made before 3.1.3, but
I think it’s not usual to edit entries of released versions, so I put them at
the top.
........
  r86236 | eric.araujo | 2010-11-06 03:44:43 +0100 (sam., 06 nov. 2010) | 2 lines
  Make sure each test can be run standalone (./python Lib/distutils/tests/x.py)
........
  r86240 | eric.araujo | 2010-11-06 05:11:59 +0100 (sam., 06 nov. 2010) | 2 lines
  Prevent ResourceWarnings in test_gettext
........
  r86332 | eric.araujo | 2010-11-08 19:15:17 +0100 (lun., 08 nov. 2010) | 4 lines
  Add missing NEWS entry for a fix committed by Senthil.
  All recent modifications to distutils should now be covered in NEWS.
........
  r86340 | eric.araujo | 2010-11-08 22:48:23 +0100 (lun., 08 nov. 2010) | 2 lines
  This was actually fixed for the previous alpha.
........
  r87271 | eric.araujo | 2010-12-15 20:09:58 +0100 (mer., 15 déc. 2010) | 2 lines
  Improve trace documentation (#9264).  Patch by Eli Bendersky.
........
  r87273 | eric.araujo | 2010-12-15 20:30:15 +0100 (mer., 15 déc. 2010) | 2 lines
  Use nested method directives, rewrap long lines, fix whitespace.
........
  r87447 | eric.araujo | 2010-12-23 20:13:05 +0100 (jeu., 23 déc. 2010) | 2 lines
  Fix typo in superclass method name
........
											
										 
											2011-02-02 21:38:37 +00:00
										 |  |  |     run_unittest(test_suite()) |