| 
									
										
										
										
											2024-03-07 14:24:38 +03:00
										 |  |  | """
 | 
					
						
							|  |  |  | Tests for `Makefile`. | 
					
						
							|  |  |  | """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import os | 
					
						
							|  |  |  | import unittest | 
					
						
							|  |  |  | from test import support | 
					
						
							|  |  |  | import sysconfig | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | MAKEFILE = sysconfig.get_makefile_filename() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if not support.check_impl_detail(cpython=True): | 
					
						
							|  |  |  |     raise unittest.SkipTest('cpython only') | 
					
						
							|  |  |  | if not os.path.exists(MAKEFILE) or not os.path.isfile(MAKEFILE): | 
					
						
							|  |  |  |     raise unittest.SkipTest('Makefile could not be found') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class TestMakefile(unittest.TestCase): | 
					
						
							|  |  |  |     def list_test_dirs(self): | 
					
						
							|  |  |  |         result = [] | 
					
						
							|  |  |  |         found_testsubdirs = False | 
					
						
							|  |  |  |         with open(MAKEFILE, 'r', encoding='utf-8') as f: | 
					
						
							|  |  |  |             for line in f: | 
					
						
							|  |  |  |                 if line.startswith('TESTSUBDIRS='): | 
					
						
							|  |  |  |                     found_testsubdirs = True | 
					
						
							|  |  |  |                     result.append( | 
					
						
							|  |  |  |                         line.removeprefix('TESTSUBDIRS=').replace( | 
					
						
							|  |  |  |                             '\\', '', | 
					
						
							|  |  |  |                         ).strip(), | 
					
						
							|  |  |  |                     ) | 
					
						
							|  |  |  |                     continue | 
					
						
							|  |  |  |                 if found_testsubdirs: | 
					
						
							|  |  |  |                     if '\t' not in line: | 
					
						
							|  |  |  |                         break | 
					
						
							|  |  |  |                     result.append(line.replace('\\', '').strip()) | 
					
						
							|  |  |  |         return result | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-04-03 15:11:36 +02:00
										 |  |  |     @unittest.skipUnless(support.TEST_MODULES_ENABLED, "requires test modules") | 
					
						
							| 
									
										
										
										
											2024-03-07 14:24:38 +03:00
										 |  |  |     def test_makefile_test_folders(self): | 
					
						
							|  |  |  |         test_dirs = self.list_test_dirs() | 
					
						
							|  |  |  |         idle_test = 'idlelib/idle_test' | 
					
						
							|  |  |  |         self.assertIn(idle_test, test_dirs) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         used = [idle_test] | 
					
						
							| 
									
										
										
										
											2024-03-29 14:14:25 +03:00
										 |  |  |         for dirpath, dirs, files in os.walk(support.TEST_HOME_DIR): | 
					
						
							| 
									
										
										
										
											2024-03-07 14:24:38 +03:00
										 |  |  |             dirname = os.path.basename(dirpath) | 
					
						
							| 
									
										
										
										
											2024-03-29 14:14:25 +03:00
										 |  |  |             # Skip temporary dirs: | 
					
						
							|  |  |  |             if dirname == '__pycache__' or dirname.startswith('.'): | 
					
						
							|  |  |  |                 dirs.clear()  # do not process subfolders | 
					
						
							|  |  |  |                 continue | 
					
						
							|  |  |  |             # Skip empty dirs: | 
					
						
							|  |  |  |             if not dirs and not files: | 
					
						
							|  |  |  |                 continue | 
					
						
							|  |  |  |             # Skip dirs with hidden-only files: | 
					
						
							|  |  |  |             if files and all(filename.startswith('.') for filename in files): | 
					
						
							| 
									
										
										
										
											2024-03-07 14:24:38 +03:00
										 |  |  |                 continue | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             relpath = os.path.relpath(dirpath, support.STDLIB_DIR) | 
					
						
							|  |  |  |             with self.subTest(relpath=relpath): | 
					
						
							|  |  |  |                 self.assertIn( | 
					
						
							|  |  |  |                     relpath, | 
					
						
							|  |  |  |                     test_dirs, | 
					
						
							|  |  |  |                     msg=( | 
					
						
							|  |  |  |                         f"{relpath!r} is not included in the Makefile's list " | 
					
						
							|  |  |  |                         "of test directories to install" | 
					
						
							|  |  |  |                     ) | 
					
						
							|  |  |  |                 ) | 
					
						
							|  |  |  |                 used.append(relpath) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-04-11 11:37:28 +02:00
										 |  |  |         # Don't check the wheel dir when Python is built --with-wheel-pkg-dir | 
					
						
							|  |  |  |         if sysconfig.get_config_var('WHEEL_PKG_DIR'): | 
					
						
							|  |  |  |             test_dirs.remove('test/wheeldata') | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-07 14:24:38 +03:00
										 |  |  |         # Check that there are no extra entries: | 
					
						
							|  |  |  |         unique_test_dirs = set(test_dirs) | 
					
						
							|  |  |  |         self.assertSetEqual(unique_test_dirs, set(used)) | 
					
						
							|  |  |  |         self.assertEqual(len(test_dirs), len(unique_test_dirs)) |