Skip to content

Commit 8332c6e

Browse files
sobolevnpre-commit-ci[bot]JelleZijlstra
authored
Add optional stderr result to run_stubtest in tests (#17636)
This adds a test for incorrect error code in `stubtest`'s config file. Refs #17628 --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Jelle Zijlstra <[email protected]>
1 parent 5b46f1c commit 8332c6e

File tree

1 file changed

+34
-8
lines changed

1 file changed

+34
-8
lines changed

mypy/test/teststubtest.py

Lines changed: 34 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -144,9 +144,9 @@ def __invert__(self: _T) -> _T: pass
144144
"""
145145

146146

147-
def run_stubtest(
147+
def run_stubtest_with_stderr(
148148
stub: str, runtime: str, options: list[str], config_file: str | None = None
149-
) -> str:
149+
) -> tuple[str, str]:
150150
with use_tmp_dir(TEST_MODULE_NAME) as tmp_dir:
151151
with open("builtins.pyi", "w") as f:
152152
f.write(stubtest_builtins_stub)
@@ -163,13 +163,26 @@ def run_stubtest(
163163
f.write(config_file)
164164
options = options + ["--mypy-config-file", f"{TEST_MODULE_NAME}_config.ini"]
165165
output = io.StringIO()
166-
with contextlib.redirect_stdout(output):
166+
outerr = io.StringIO()
167+
with contextlib.redirect_stdout(output), contextlib.redirect_stderr(outerr):
167168
test_stubs(parse_options([TEST_MODULE_NAME] + options), use_builtins_fixtures=True)
168-
return remove_color_code(
169-
output.getvalue()
170-
# remove cwd as it's not available from outside
171-
.replace(os.path.realpath(tmp_dir) + os.sep, "").replace(tmp_dir + os.sep, "")
172-
)
169+
filtered_output = remove_color_code(
170+
output.getvalue()
171+
# remove cwd as it's not available from outside
172+
.replace(os.path.realpath(tmp_dir) + os.sep, "").replace(tmp_dir + os.sep, "")
173+
)
174+
filtered_outerr = remove_color_code(
175+
outerr.getvalue()
176+
# remove cwd as it's not available from outside
177+
.replace(os.path.realpath(tmp_dir) + os.sep, "").replace(tmp_dir + os.sep, "")
178+
)
179+
return filtered_output, filtered_outerr
180+
181+
182+
def run_stubtest(
183+
stub: str, runtime: str, options: list[str], config_file: str | None = None
184+
) -> str:
185+
return run_stubtest_with_stderr(stub, runtime, options, config_file)[0]
173186

174187

175188
class Case:
@@ -2590,6 +2603,19 @@ def test_config_file_error_codes(self) -> None:
25902603
output = run_stubtest(stub=stub, runtime=runtime, options=[], config_file=config_file)
25912604
assert output == "Success: no issues found in 1 module\n"
25922605

2606+
def test_config_file_error_codes_invalid(self) -> None:
2607+
runtime = "temp = 5\n"
2608+
stub = "temp: int\n"
2609+
config_file = "[mypy]\ndisable_error_code = not-a-valid-name\n"
2610+
output, outerr = run_stubtest_with_stderr(
2611+
stub=stub, runtime=runtime, options=[], config_file=config_file
2612+
)
2613+
assert output == "Success: no issues found in 1 module\n"
2614+
assert outerr == (
2615+
"test_module_config.ini: [mypy]: disable_error_code: "
2616+
"Invalid error code(s): not-a-valid-name\n"
2617+
)
2618+
25932619
def test_config_file_wrong_incomplete_feature(self) -> None:
25942620
runtime = "x = 1\n"
25952621
stub = "x: int\n"

0 commit comments

Comments
 (0)