| 
									
										
										
										
											2004-06-21 16:15:22 +00:00
										 |  |  | """Tests for distutils.command.build_scripts.""" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import os | 
					
						
							|  |  |  | import unittest | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | from distutils.command.build_scripts import build_scripts | 
					
						
							|  |  |  | from distutils.core import Distribution | 
					
						
							| 
									
										
										
										
											2010-07-22 12:50:05 +00:00
										 |  |  | from distutils import sysconfig | 
					
						
							| 
									
										
										
										
											2004-06-21 16:15:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | from distutils.tests import support | 
					
						
							| 
									
										
										
										
											2010-11-06 02:44:43 +00:00
										 |  |  | from test.support import run_unittest | 
					
						
							| 
									
										
										
										
											2004-06-21 16:15:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-08-03 18:53:07 +00:00
										 |  |  | class BuildScriptsTestCase(support.TempdirManager, | 
					
						
							|  |  |  |                            support.LoggingSilencer, | 
					
						
							|  |  |  |                            unittest.TestCase): | 
					
						
							| 
									
										
										
										
											2004-06-21 16:15:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_default_settings(self): | 
					
						
							|  |  |  |         cmd = self.get_build_scripts_cmd("/foo/bar", []) | 
					
						
							| 
									
										
										
										
											2013-11-17 00:17:46 +02:00
										 |  |  |         self.assertFalse(cmd.force) | 
					
						
							|  |  |  |         self.assertIsNone(cmd.build_dir) | 
					
						
							| 
									
										
										
										
											2004-06-21 16:15:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         cmd.finalize_options() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-06-30 23:06:06 +00:00
										 |  |  |         self.assertTrue(cmd.force) | 
					
						
							| 
									
										
										
										
											2004-06-21 16:15:22 +00:00
										 |  |  |         self.assertEqual(cmd.build_dir, "/foo/bar") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_build(self): | 
					
						
							|  |  |  |         source = self.mkdtemp() | 
					
						
							|  |  |  |         target = self.mkdtemp() | 
					
						
							|  |  |  |         expected = self.write_sample_scripts(source) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         cmd = self.get_build_scripts_cmd(target, | 
					
						
							|  |  |  |                                          [os.path.join(source, fn) | 
					
						
							|  |  |  |                                           for fn in expected]) | 
					
						
							|  |  |  |         cmd.finalize_options() | 
					
						
							|  |  |  |         cmd.run() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         built = os.listdir(target) | 
					
						
							|  |  |  |         for name in expected: | 
					
						
							| 
									
										
										
										
											2013-11-17 00:17:46 +02:00
										 |  |  |             self.assertIn(name, built) | 
					
						
							| 
									
										
										
										
											2004-06-21 16:15:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def get_build_scripts_cmd(self, target, scripts): | 
					
						
							| 
									
										
										
										
											2004-08-26 05:44:02 +00:00
										 |  |  |         import sys | 
					
						
							| 
									
										
										
										
											2004-06-21 16:15:22 +00:00
										 |  |  |         dist = Distribution() | 
					
						
							|  |  |  |         dist.scripts = scripts | 
					
						
							|  |  |  |         dist.command_obj["build"] = support.DummyCommand( | 
					
						
							|  |  |  |             build_scripts=target, | 
					
						
							| 
									
										
										
										
											2004-08-26 05:44:02 +00:00
										 |  |  |             force=1, | 
					
						
							|  |  |  |             executable=sys.executable | 
					
						
							| 
									
										
										
										
											2004-06-21 16:15:22 +00:00
										 |  |  |             ) | 
					
						
							|  |  |  |         return build_scripts(dist) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def write_sample_scripts(self, dir): | 
					
						
							|  |  |  |         expected = [] | 
					
						
							|  |  |  |         expected.append("script1.py") | 
					
						
							|  |  |  |         self.write_script(dir, "script1.py", | 
					
						
							|  |  |  |                           ("#! /usr/bin/env python2.3\n" | 
					
						
							|  |  |  |                            "# bogus script w/ Python sh-bang\n" | 
					
						
							|  |  |  |                            "pass\n")) | 
					
						
							|  |  |  |         expected.append("script2.py") | 
					
						
							|  |  |  |         self.write_script(dir, "script2.py", | 
					
						
							|  |  |  |                           ("#!/usr/bin/python\n" | 
					
						
							|  |  |  |                            "# bogus script w/ Python sh-bang\n" | 
					
						
							|  |  |  |                            "pass\n")) | 
					
						
							|  |  |  |         expected.append("shell.sh") | 
					
						
							|  |  |  |         self.write_script(dir, "shell.sh", | 
					
						
							|  |  |  |                           ("#!/bin/sh\n" | 
					
						
							|  |  |  |                            "# bogus shell script w/ sh-bang\n" | 
					
						
							|  |  |  |                            "exit 0\n")) | 
					
						
							|  |  |  |         return expected | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def write_script(self, dir, name, text): | 
					
						
							|  |  |  |         f = open(os.path.join(dir, name), "w") | 
					
						
							| 
									
										
										
										
											2010-11-05 23:51:56 +00:00
										 |  |  |         try: | 
					
						
							|  |  |  |             f.write(text) | 
					
						
							|  |  |  |         finally: | 
					
						
							|  |  |  |             f.close() | 
					
						
							| 
									
										
										
										
											2004-06-21 16:15:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-13 23:04:17 +00:00
										 |  |  |     def test_version_int(self): | 
					
						
							|  |  |  |         source = self.mkdtemp() | 
					
						
							|  |  |  |         target = self.mkdtemp() | 
					
						
							|  |  |  |         expected = self.write_sample_scripts(source) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         cmd = self.get_build_scripts_cmd(target, | 
					
						
							|  |  |  |                                          [os.path.join(source, fn) | 
					
						
							|  |  |  |                                           for fn in expected]) | 
					
						
							|  |  |  |         cmd.finalize_options() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # http://bugs.python.org/issue4524 | 
					
						
							|  |  |  |         # | 
					
						
							|  |  |  |         # On linux-g++-32 with command line `./configure --enable-ipv6 | 
					
						
							|  |  |  |         # --with-suffix=3`, python is compiled okay but the build scripts | 
					
						
							|  |  |  |         # failed when writing the name of the executable | 
					
						
							| 
									
										
										
										
											2009-04-25 12:53:56 +00:00
										 |  |  |         old = sysconfig.get_config_vars().get('VERSION') | 
					
						
							| 
									
										
										
										
											2010-07-22 12:50:05 +00:00
										 |  |  |         sysconfig._config_vars['VERSION'] = 4 | 
					
						
							| 
									
										
										
										
											2009-02-13 23:04:17 +00:00
										 |  |  |         try: | 
					
						
							|  |  |  |             cmd.run() | 
					
						
							|  |  |  |         finally: | 
					
						
							|  |  |  |             if old is not None: | 
					
						
							| 
									
										
										
										
											2010-07-22 12:50:05 +00:00
										 |  |  |                 sysconfig._config_vars['VERSION'] = old | 
					
						
							| 
									
										
										
										
											2009-02-13 23:04:17 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         built = os.listdir(target) | 
					
						
							|  |  |  |         for name in expected: | 
					
						
							| 
									
										
										
										
											2013-11-17 00:17:46 +02:00
										 |  |  |             self.assertIn(name, built) | 
					
						
							| 
									
										
										
										
											2004-06-21 16:15:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | def test_suite(): | 
					
						
							|  |  |  |     return unittest.makeSuite(BuildScriptsTestCase) | 
					
						
							| 
									
										
										
										
											2004-06-25 19:04:21 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | if __name__ == "__main__": | 
					
						
							| 
									
										
										
										
											2010-11-06 02:44:43 +00:00
										 |  |  |     run_unittest(test_suite()) |