##// END OF EJS Templates
`AssertionError`: `assert _xterm_term_title_saved` in WSL (#14480)...
`AssertionError`: `assert _xterm_term_title_saved` in WSL (#14480) `AssertionError`: `assert _xterm_term_title_saved` In some (unknown) situation, it is possible that the `_xterm_term_title_saved` is unset, but the code would make a call to `_restore_term_title_xterm`, resulting in `AssertionError`. At least on replicatable reproduction is returning from `ipython` to `pudb` via `^D^D` on an empty cell. See more details in https://github.com/ipython/ipython/pull/14480 Signed-off-by: Stavros Ntentos <133706+stdedos@users.noreply.github.com> <details> <summary><em>was:</em></summary> In some (unknown) situation, it is possible that the `_xterm_term_title_saved` is unset, but the code would make a call to `_restore_term_title_xterm`, resulting in `AssertionError`. As title stacking does not seem to be getting traction (https://github.com/microsoft/terminal/issues/14575), do not set the `xterm` variants of `_set_term_title` / `_restore_term_title`. WSL detection: https://superuser.com/a/1749811/533196 Additionally, almost-`black` the file. </details>

File last commit:

r28335:2cee9a97
r28838:9b8cd4a3 merge
Show More
test_exceptiongroup_tb.py
112 lines | 3.5 KiB | text/x-python | PythonLexer
/ IPython / core / tests / test_exceptiongroup_tb.py
import unittest
import re
from IPython.utils.capture import capture_output
import sys
import pytest
from tempfile import TemporaryDirectory
from IPython.testing import tools as tt
def _exceptiongroup_common(
outer_chain: str,
inner_chain: str,
native: bool,
) -> None:
pre_raise = "exceptiongroup." if not native else ""
pre_catch = pre_raise if sys.version_info < (3, 11) else ""
filestr = f"""
{"import exceptiongroup" if not native else ""}
import pytest
def f(): raise ValueError("From f()")
def g(): raise BaseException("From g()")
def inner(inner_chain):
excs = []
for callback in [f, g]:
try:
callback()
except BaseException as err:
excs.append(err)
if excs:
if inner_chain == "none":
raise {pre_raise}BaseExceptionGroup("Oops", excs)
try:
raise SyntaxError()
except SyntaxError as e:
if inner_chain == "from":
raise {pre_raise}BaseExceptionGroup("Oops", excs) from e
else:
raise {pre_raise}BaseExceptionGroup("Oops", excs)
def outer(outer_chain, inner_chain):
try:
inner(inner_chain)
except {pre_catch}BaseExceptionGroup as e:
if outer_chain == "none":
raise
if outer_chain == "from":
raise IndexError() from e
else:
raise IndexError
outer("{outer_chain}", "{inner_chain}")
"""
with capture_output() as cap:
ip.run_cell(filestr)
match_lines = []
if inner_chain == "another":
match_lines += [
"During handling of the above exception, another exception occurred:",
]
elif inner_chain == "from":
match_lines += [
"The above exception was the direct cause of the following exception:",
]
match_lines += [
" + Exception Group Traceback (most recent call last):",
f" | {pre_catch}BaseExceptionGroup: Oops (2 sub-exceptions)",
" | ValueError: From f()",
" | BaseException: From g()",
]
if outer_chain == "another":
match_lines += [
"During handling of the above exception, another exception occurred:",
"IndexError",
]
elif outer_chain == "from":
match_lines += [
"The above exception was the direct cause of the following exception:",
"IndexError",
]
error_lines = cap.stderr.split("\n")
err_index = match_index = 0
for expected in match_lines:
for i, actual in enumerate(error_lines):
if actual == expected:
error_lines = error_lines[i + 1 :]
break
else:
assert False, f"{expected} not found in cap.stderr"
@pytest.mark.skipif(
sys.version_info < (3, 11), reason="Native ExceptionGroup not implemented"
)
@pytest.mark.parametrize("outer_chain", ["none", "from", "another"])
@pytest.mark.parametrize("inner_chain", ["none", "from", "another"])
def test_native_exceptiongroup(outer_chain, inner_chain) -> None:
_exceptiongroup_common(outer_chain, inner_chain, native=True)
@pytest.mark.parametrize("outer_chain", ["none", "from", "another"])
@pytest.mark.parametrize("inner_chain", ["none", "from", "another"])
def test_native_exceptiongroup(outer_chain, inner_chain) -> None:
pytest.importorskip("exceptiongroup")
_exceptiongroup_common(outer_chain, inner_chain, native=False)