1
1
#!/usr/bin/env python3
2
2
"""Mypy test runner."""
3
3
4
- from typing import Dict , List , Optional , Set , Iterable , Tuple
5
-
6
- from mypy .waiter import Waiter , LazySubprocess
7
- from mypy import util
4
+ from typing import List , Optional , Set , Iterable , Tuple
8
5
9
6
import itertools
10
7
import os
11
8
from os .path import join , isdir
12
9
import sys
13
10
11
+ from waiter import Waiter , LazySubprocess
12
+
14
13
15
- def get_versions (): # type: () -> List[str]
14
+ def get_versions () -> List [str ]:
16
15
major = sys .version_info [0 ]
17
16
minor = sys .version_info [1 ]
18
17
if major == 2 :
@@ -24,9 +23,6 @@ def get_versions(): # type: () -> List[str]
24
23
return ['%d.%d' % (major , i ) for i in range (minor , - 1 , - 1 )]
25
24
26
25
27
- # Ideally, all tests would be `discover`able so that they can be driven
28
- # (and parallelized) by an external test driver.
29
-
30
26
class Driver :
31
27
32
28
def __init__ (self , * , whitelist : List [str ], blacklist : List [str ],
@@ -88,9 +84,6 @@ def add_mypy_modules(self, name: str, modules: Iterable[str], cwd: Optional[str]
88
84
def add_mypy_package (self , name : str , packagename : str , * flags : str ) -> None :
89
85
self .add_mypy_cmd (name , ['-p' , packagename ] + list (flags ))
90
86
91
- def add_mypy_string (self , name : str , * args : str , cwd : Optional [str ] = None ) -> None :
92
- self .add_mypy_cmd (name , ['-c' ] + list (args ), cwd = cwd )
93
-
94
87
def add_pytest (self , files : List [Tuple [str , str ]], coverage : bool = True ) -> None :
95
88
pytest_files = [name for kind , name in files
96
89
if self .allow ('pytest {} {}' .format (kind , name ))]
@@ -106,48 +99,6 @@ def add_pytest(self, files: List[Tuple[str, str]], coverage: bool = True) -> Non
106
99
passthrough = self .verbosity ),
107
100
sequential = True )
108
101
109
- def add_python (self , name : str , * args : str , cwd : Optional [str ] = None ) -> None :
110
- name = 'run %s' % name
111
- if not self .allow (name ):
112
- return
113
- largs = list (args )
114
- largs [0 :0 ] = [sys .executable ]
115
- env = self .env
116
- self .waiter .add (LazySubprocess (name , largs , cwd = cwd , env = env ))
117
-
118
- def add_python_mod (self , name : str , * args : str , cwd : Optional [str ] = None ,
119
- coverage : bool = False ) -> None :
120
- name = 'run %s' % name
121
- if not self .allow (name ):
122
- return
123
- largs = list (args )
124
- if coverage and self .coverage :
125
- largs [0 :0 ] = ['coverage' , 'run' , '-m' ]
126
- else :
127
- largs [0 :0 ] = [sys .executable , '-m' ]
128
- env = self .env
129
- self .waiter .add (LazySubprocess (name , largs , cwd = cwd , env = env ))
130
-
131
- def add_python_string (self , name : str , * args : str , cwd : Optional [str ] = None ) -> None :
132
- name = 'run %s' % name
133
- if not self .allow (name ):
134
- return
135
- largs = list (args )
136
- largs [0 :0 ] = [sys .executable , '-c' ]
137
- env = self .env
138
- self .waiter .add (LazySubprocess (name , largs , cwd = cwd , env = env ))
139
-
140
- def add_python2 (self , name : str , * args : str , cwd : Optional [str ] = None ) -> None :
141
- name = 'run2 %s' % name
142
- if not self .allow (name ):
143
- return
144
- largs = list (args )
145
- python2 = util .try_find_python2_interpreter ()
146
- assert python2 , "Couldn't find a Python 2.7 interpreter"
147
- largs [0 :0 ] = [python2 ]
148
- env = self .env
149
- self .waiter .add (LazySubprocess (name , largs , cwd = cwd , env = env ))
150
-
151
102
def add_flake8 (self , cwd : Optional [str ] = None ) -> None :
152
103
name = 'lint'
153
104
if not self .allow (name ):
@@ -161,16 +112,9 @@ def list_tasks(self) -> None:
161
112
print ('{id}:{task}' .format (id = id , task = task .name ))
162
113
163
114
164
- def add_basic (driver : Driver ) -> None :
165
- if False :
166
- driver .add_mypy ('file setup.py' , 'setup.py' )
167
- driver .add_mypy ('file runtests.py' , 'runtests.py' )
168
- driver .add_mypy ('legacy entry script' , 'scripts/mypy' )
169
- # needs typed_ast installed:
170
- driver .add_mypy ('fast-parse' , '--fast-parse' , 'test-data/samples/hello.py' )
171
-
172
-
173
115
def add_selftypecheck (driver : Driver ) -> None :
116
+ driver .add_mypy ('file runtests.py' , 'runtests.py' )
117
+ driver .add_mypy ('file waiter.py' , 'waiter.py' )
174
118
driver .add_mypy_package ('package mypy' , 'mypy' , '--config-file' , 'mypy_self_check.ini' )
175
119
176
120
@@ -188,16 +132,6 @@ def file_to_module(file: str) -> str:
188
132
return rv
189
133
190
134
191
- def add_imports (driver : Driver ) -> None :
192
- # Make sure each module can be imported originally.
193
- # There is currently a bug in mypy where a module can pass typecheck
194
- # because of *implicit* imports from other modules.
195
- for f in find_files ('mypy' , suffix = '.py' ):
196
- mod = file_to_module (f )
197
- if not mod .endswith ('.__main__' ):
198
- driver .add_python_string ('import %s' % mod , 'import %s' % mod )
199
-
200
-
201
135
def test_path (* names : str ):
202
136
return [os .path .join ('mypy' , 'test' , '{}.py' .format (name ))
203
137
for name in names ]
@@ -235,11 +169,10 @@ def test_path(*names: str):
235
169
'teststubgen' ,
236
170
)
237
171
238
- for f in find_files ('mypy' , prefix = 'test' , suffix = '.py' ):
239
- assert f in PYTEST_FILES + SLOW_FILES , f
240
-
241
172
242
173
def add_pytest (driver : Driver ) -> None :
174
+ for f in find_files ('mypy' , prefix = 'test' , suffix = '.py' ):
175
+ assert f in PYTEST_FILES + SLOW_FILES , f
243
176
driver .add_pytest ([('unit-test' , name ) for name in PYTEST_FILES ] +
244
177
[('integration' , name ) for name in SLOW_FILES ])
245
178
@@ -248,8 +181,7 @@ def add_stubs(driver: Driver) -> None:
248
181
# We only test each module in the one version mypy prefers to find.
249
182
# TODO: test stubs for other versions, especially Python 2 stubs.
250
183
251
- modules = set () # type: Set[str]
252
- modules .add ('typing' )
184
+ modules = {'typing' }
253
185
# TODO: This should also test Python 2, and pass pyversion accordingly.
254
186
for version in ["2and3" , "3" , "3.3" , "3.4" , "3.5" ]:
255
187
for stub_type in ['builtins' , 'stdlib' , 'third_party' ]:
@@ -280,12 +212,11 @@ def add_stdlibsamples(driver: Driver) -> None:
280
212
281
213
def add_samples (driver : Driver ) -> None :
282
214
for f in find_files (os .path .join ('test-data' , 'samples' ), suffix = '.py' ):
215
+ mypy_args = ['--no-strict-optional' ]
283
216
if f == os .path .join ('test-data' , 'samples' , 'crawl2.py' ):
284
217
# This test requires 3.5 for async functions
285
- driver .add_mypy_cmd ('file {}' .format (f ), ['--python-version=3.5' ,
286
- '--no-strict-optional' , f ])
287
- else :
288
- driver .add_mypy ('file %s' % f , '--no-strict-optional' , f )
218
+ mypy_args .append ('--python-version=3.5' )
219
+ driver .add_mypy_cmd ('file {}' .format (f ), mypy_args + [f ])
289
220
290
221
291
222
def usage (status : int ) -> None :
@@ -425,9 +356,7 @@ def main() -> None:
425
356
426
357
driver .add_flake8 ()
427
358
add_pytest (driver )
428
- add_basic (driver )
429
359
add_selftypecheck (driver )
430
- add_imports (driver )
431
360
add_stubs (driver )
432
361
add_stdlibsamples (driver )
433
362
add_samples (driver )
0 commit comments