| 
									
										
										
										
											2009-04-12 14:57:46 +00:00
										 |  |  | """Tests for distutils.command.config.""" | 
					
						
							|  |  |  | import unittest | 
					
						
							|  |  |  | import os | 
					
						
							| 
									
										
										
										
											2009-04-13 12:59:03 +00:00
										 |  |  | import sys | 
					
						
							| 
									
										
										
										
											2016-11-17 09:00:19 +01:00
										 |  |  | from test.support import run_unittest, missing_compiler_executable | 
					
						
							| 
									
										
										
										
											2009-04-12 14:57:46 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-12 16:34:34 +00:00
										 |  |  | from distutils.command.config import dump_file, config | 
					
						
							| 
									
										
										
										
											2009-04-12 14:57:46 +00:00
										 |  |  | from distutils.tests import support | 
					
						
							|  |  |  | from distutils import log | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class ConfigTestCase(support.LoggingSilencer, | 
					
						
							|  |  |  |                      support.TempdirManager, | 
					
						
							|  |  |  |                      unittest.TestCase): | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-12 16:34:34 +00:00
										 |  |  |     def _info(self, msg, *args): | 
					
						
							| 
									
										
										
										
											2009-04-12 14:57:46 +00:00
										 |  |  |         for line in msg.splitlines(): | 
					
						
							|  |  |  |             self._logs.append(line) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def setUp(self): | 
					
						
							|  |  |  |         super(ConfigTestCase, self).setUp() | 
					
						
							|  |  |  |         self._logs = [] | 
					
						
							|  |  |  |         self.old_log = log.info | 
					
						
							|  |  |  |         log.info = self._info | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def tearDown(self): | 
					
						
							|  |  |  |         log.info = self.old_log | 
					
						
							|  |  |  |         super(ConfigTestCase, self).tearDown() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_dump_file(self): | 
					
						
							|  |  |  |         this_file = os.path.splitext(__file__)[0] + '.py' | 
					
						
							|  |  |  |         f = open(this_file) | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  |             numlines = len(f.readlines()) | 
					
						
							|  |  |  |         finally: | 
					
						
							|  |  |  |             f.close() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         dump_file(this_file, 'I am the header') | 
					
						
							| 
									
										
										
										
											2010-11-20 19:04:17 +00:00
										 |  |  |         self.assertEqual(len(self._logs), numlines+1) | 
					
						
							| 
									
										
										
										
											2009-04-12 14:57:46 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-18 16:41:01 +02:00
										 |  |  |     @unittest.skipIf(sys.platform == 'win32', "can't test on Windows") | 
					
						
							| 
									
										
										
										
											2009-04-12 16:34:34 +00:00
										 |  |  |     def test_search_cpp(self): | 
					
						
							| 
									
										
										
										
											2016-11-17 09:00:19 +01:00
										 |  |  |         cmd = missing_compiler_executable(['preprocessor']) | 
					
						
							|  |  |  |         if cmd is not None: | 
					
						
							|  |  |  |             self.skipTest('The %r command is not found' % cmd) | 
					
						
							| 
									
										
										
										
											2009-04-12 16:34:34 +00:00
										 |  |  |         pkg_dir, dist = self.create_dist() | 
					
						
							|  |  |  |         cmd = config(dist) | 
					
						
							| 
									
										
										
										
											2018-12-28 15:03:17 +01:00
										 |  |  |         cmd._check_compiler() | 
					
						
							|  |  |  |         compiler = cmd.compiler | 
					
						
							| 
									
										
										
										
											2020-04-03 16:38:28 +02:00
										 |  |  |         if sys.platform[:3] == "aix" and "xlc" in compiler.preprocessor[0].lower(): | 
					
						
							| 
									
										
										
										
											2018-12-28 15:03:17 +01:00
										 |  |  |             self.skipTest('xlc: The -E option overrides the -P, -o, and -qsyntaxonly options') | 
					
						
							| 
									
										
										
										
											2009-04-12 16:34:34 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         # simple pattern searches | 
					
						
							| 
									
										
										
										
											2011-10-07 23:13:45 +02:00
										 |  |  |         match = cmd.search_cpp(pattern='xxx', body='/* xxx */') | 
					
						
							| 
									
										
										
										
											2010-11-20 19:04:17 +00:00
										 |  |  |         self.assertEqual(match, 0) | 
					
						
							| 
									
										
										
										
											2009-04-12 16:34:34 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-10-07 23:13:45 +02:00
										 |  |  |         match = cmd.search_cpp(pattern='_configtest', body='/* xxx */') | 
					
						
							| 
									
										
										
										
											2010-11-20 19:04:17 +00:00
										 |  |  |         self.assertEqual(match, 1) | 
					
						
							| 
									
										
										
										
											2009-04-12 16:34:34 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-12 16:49:20 +00:00
										 |  |  |     def test_finalize_options(self): | 
					
						
							|  |  |  |         # finalize_options does a bit of transformation | 
					
						
							|  |  |  |         # on options | 
					
						
							|  |  |  |         pkg_dir, dist = self.create_dist() | 
					
						
							|  |  |  |         cmd = config(dist) | 
					
						
							|  |  |  |         cmd.include_dirs = 'one%stwo' % os.pathsep | 
					
						
							|  |  |  |         cmd.libraries = 'one' | 
					
						
							|  |  |  |         cmd.library_dirs = 'three%sfour' % os.pathsep | 
					
						
							|  |  |  |         cmd.ensure_finalized() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-11-20 19:04:17 +00:00
										 |  |  |         self.assertEqual(cmd.include_dirs, ['one', 'two']) | 
					
						
							|  |  |  |         self.assertEqual(cmd.libraries, ['one']) | 
					
						
							|  |  |  |         self.assertEqual(cmd.library_dirs, ['three', 'four']) | 
					
						
							| 
									
										
										
										
											2009-04-12 16:49:20 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-12 17:04:39 +00:00
										 |  |  |     def test_clean(self): | 
					
						
							|  |  |  |         # _clean removes files | 
					
						
							|  |  |  |         tmp_dir = self.mkdtemp() | 
					
						
							|  |  |  |         f1 = os.path.join(tmp_dir, 'one') | 
					
						
							|  |  |  |         f2 = os.path.join(tmp_dir, 'two') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         self.write_file(f1, 'xxx') | 
					
						
							|  |  |  |         self.write_file(f2, 'xxx') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         for f in (f1, f2): | 
					
						
							| 
									
										
										
										
											2009-06-30 23:06:06 +00:00
										 |  |  |             self.assertTrue(os.path.exists(f)) | 
					
						
							| 
									
										
										
										
											2009-04-12 17:04:39 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         pkg_dir, dist = self.create_dist() | 
					
						
							|  |  |  |         cmd = config(dist) | 
					
						
							|  |  |  |         cmd._clean(f1, f2) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         for f in (f1, f2): | 
					
						
							| 
									
										
										
										
											2013-11-17 00:17:46 +02:00
										 |  |  |             self.assertFalse(os.path.exists(f)) | 
					
						
							| 
									
										
										
										
											2009-04-12 16:49:20 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-12 14:57:46 +00:00
										 |  |  | def test_suite(): | 
					
						
							|  |  |  |     return unittest.makeSuite(ConfigTestCase) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if __name__ == "__main__": | 
					
						
							| 
									
										
										
										
											2010-11-06 02:44:43 +00:00
										 |  |  |     run_unittest(test_suite()) |