Skip to content

Commit 64d91ef

Browse files
authored
mypy_test.py: Add command-line argument to enable selecting which parts of the test to run (#8143)
1 parent 6a5abd3 commit 64d91ef

File tree

1 file changed

+41
-16
lines changed

1 file changed

+41
-16
lines changed

tests/mypy_test.py

+41-16
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,12 @@
3030

3131
SUPPORTED_VERSIONS = [(3, 11), (3, 10), (3, 9), (3, 8), (3, 7), (3, 6), (2, 7)]
3232
SUPPORTED_PLATFORMS = frozenset({"linux", "win32", "darwin"})
33+
TYPESHED_DIRECTORIES = frozenset({"stdlib", "stubs", "tests", "test_cases", "scripts"})
3334

3435
MajorVersion: TypeAlias = int
3536
MinorVersion: TypeAlias = int
3637
Platform: TypeAlias = Annotated[str, "Must be one of the entries in SUPPORTED_PLATFORMS"]
38+
Directory: TypeAlias = Annotated[str, "Must be one of the entries in TYPESHED_DIRECTORIES"]
3739

3840

3941
def python_version(arg: str) -> tuple[MajorVersion, MinorVersion]:
@@ -50,11 +52,18 @@ def python_platform(platform: str) -> str:
5052
return platform
5153

5254

55+
def typeshed_directory(directory: str) -> str:
56+
if directory not in TYPESHED_DIRECTORIES:
57+
raise ValueError
58+
return directory
59+
60+
5361
class CommandLineArgs(argparse.Namespace):
5462
verbose: int
5563
dry_run: bool
5664
exclude: list[str] | None
5765
python_version: list[tuple[MajorVersion, MinorVersion]] | None
66+
dir: list[Directory] | None
5867
platform: list[Platform] | None
5968
filter: list[str]
6069

@@ -66,6 +75,14 @@ class CommandLineArgs(argparse.Namespace):
6675
parser.add_argument(
6776
"-p", "--python-version", type=python_version, nargs="*", action="extend", help="These versions only (major[.minor])"
6877
)
78+
parser.add_argument(
79+
"-d",
80+
"--dir",
81+
type=typeshed_directory,
82+
nargs="*",
83+
action="extend",
84+
help="Test only these top-level typeshed directories (defaults to all typeshed directories)",
85+
)
6986
parser.add_argument(
7087
"--platform",
7188
type=python_platform,
@@ -85,6 +102,7 @@ class TestConfig:
85102
exclude: list[str] | None
86103
major: MajorVersion
87104
minor: MinorVersion
105+
directories: frozenset[Directory]
88106
platform: Platform
89107
filter: list[str]
90108

@@ -477,41 +495,47 @@ def test_the_test_cases(code: int, args: TestConfig) -> TestResults:
477495
def test_typeshed(code: int, args: TestConfig) -> TestResults:
478496
print(f"*** Testing Python {args.major}.{args.minor} on {args.platform}")
479497
files_checked_this_version = 0
480-
code, stdlib_files_checked = test_stdlib(code, args)
481-
files_checked_this_version += stdlib_files_checked
482-
print()
498+
if "stdlib" in args.directories:
499+
code, stdlib_files_checked = test_stdlib(code, args)
500+
files_checked_this_version += stdlib_files_checked
501+
print()
483502

484503
if args.major == 2:
485504
return TestResults(code, files_checked_this_version)
486505

487-
code, third_party_files_checked = test_third_party_stubs(code, args)
488-
files_checked_this_version += third_party_files_checked
489-
print()
506+
if "stubs" in args.directories:
507+
code, third_party_files_checked = test_third_party_stubs(code, args)
508+
files_checked_this_version += third_party_files_checked
509+
print()
490510

491511
if args.minor >= 9:
492512
# Run mypy against our own test suite and the scripts directory
493513
#
494514
# Skip this on earlier Python versions,
495515
# as we're using new syntax and new functions in some test files
496-
code, test_script_files_checked = test_the_test_scripts(code, args)
497-
files_checked_this_version += test_script_files_checked
516+
if "tests" in args.directories:
517+
code, test_script_files_checked = test_the_test_scripts(code, args)
518+
files_checked_this_version += test_script_files_checked
519+
print()
520+
521+
if "scripts" in args.directories:
522+
code, script_files_checked = test_scripts_directory(code, args)
523+
files_checked_this_version += script_files_checked
524+
print()
525+
526+
if "test_cases" in args.directories:
527+
code, test_case_files_checked = test_the_test_cases(code, args)
528+
files_checked_this_version += test_case_files_checked
498529
print()
499530

500-
code, script_files_checked = test_scripts_directory(code, args)
501-
files_checked_this_version += script_files_checked
502-
print()
503-
504-
code, test_case_files_checked = test_the_test_cases(code, args)
505-
files_checked_this_version += test_case_files_checked
506-
print()
507-
508531
return TestResults(code, files_checked_this_version)
509532

510533

511534
def main() -> None:
512535
args = parser.parse_args(namespace=CommandLineArgs())
513536
versions = args.python_version or SUPPORTED_VERSIONS
514537
platforms = args.platform or [sys.platform]
538+
tested_directories = frozenset(args.dir) if args.dir else TYPESHED_DIRECTORIES
515539
code = 0
516540
total_files_checked = 0
517541
for (major, minor), platform in product(versions, platforms):
@@ -521,6 +545,7 @@ def main() -> None:
521545
exclude=args.exclude,
522546
major=major,
523547
minor=minor,
548+
directories=tested_directories,
524549
platform=platform,
525550
filter=args.filter,
526551
)

0 commit comments

Comments
 (0)