summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNikita Sobolev <mail@sobolevn.me>2024-03-07 11:24:38 (GMT)
committerGitHub <noreply@github.com>2024-03-07 11:24:38 (GMT)
commit72dbea28cd3fce6fc457aaec2107a8e453073297 (patch)
treedfdadc3f0dfbbdaac6f8484002cbdde4abf939f0
parent72d3cc94cd8cae1925e7a14f297b06ac6184f916 (diff)
downloadcpython-72dbea28cd3fce6fc457aaec2107a8e453073297.zip
cpython-72dbea28cd3fce6fc457aaec2107a8e453073297.tar.gz
cpython-72dbea28cd3fce6fc457aaec2107a8e453073297.tar.bz2
gh-115421: Test that our Makefile has all needed test folders (GH-115813)
-rw-r--r--Lib/test/test_tools/test_makefile.py64
1 files changed, 64 insertions, 0 deletions
diff --git a/Lib/test/test_tools/test_makefile.py b/Lib/test/test_tools/test_makefile.py
new file mode 100644
index 0000000..7222a05
--- /dev/null
+++ b/Lib/test/test_tools/test_makefile.py
@@ -0,0 +1,64 @@
+"""
+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
+
+ 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]
+ for dirpath, _, _ in os.walk(support.TEST_HOME_DIR):
+ dirname = os.path.basename(dirpath)
+ if dirname == '__pycache__':
+ 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)
+
+ # 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))