diff options
author | Nikita Sobolev <mail@sobolevn.me> | 2024-03-07 11:24:38 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-03-07 11:24:38 (GMT) |
commit | 72dbea28cd3fce6fc457aaec2107a8e453073297 (patch) | |
tree | dfdadc3f0dfbbdaac6f8484002cbdde4abf939f0 /Lib | |
parent | 72d3cc94cd8cae1925e7a14f297b06ac6184f916 (diff) | |
download | cpython-72dbea28cd3fce6fc457aaec2107a8e453073297.zip cpython-72dbea28cd3fce6fc457aaec2107a8e453073297.tar.gz cpython-72dbea28cd3fce6fc457aaec2107a8e453073297.tar.bz2 |
gh-115421: Test that our Makefile has all needed test folders (GH-115813)
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/test/test_tools/test_makefile.py | 64 |
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)) |