]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-111159: Fix `SyntaxError` doctests for non-builtin exception classes (#111541)
authorNikita Sobolev <mail@sobolevn.me>
Sat, 4 Nov 2023 09:54:10 +0000 (12:54 +0300)
committerGitHub <noreply@github.com>
Sat, 4 Nov 2023 09:54:10 +0000 (09:54 +0000)
Lib/doctest.py
Lib/test/test_doctest.py
Misc/NEWS.d/next/Library/2023-11-04-10-24-25.gh-issue-111541.x0RBI1.rst [new file with mode: 0644]

index f00d9358ffe10beb4a8cd21c0f51a7c5644707cc..2f14aa083348958af25d73233f1e471f28c6c673 100644 (file)
@@ -1399,10 +1399,14 @@ class DocTestRunner:
                     # we don't care about the carets / suggestions / etc
                     # We only care about the error message and notes.
                     # They start with `SyntaxError:` (or any other class name)
+                    exception_line_prefixes = (
+                        f"{exception[0].__qualname__}:",
+                        f"{exception[0].__module__}.{exception[0].__qualname__}:",
+                    )
                     exc_msg_index = next(
                         index
                         for index, line in enumerate(formatted_ex)
-                        if line.startswith(f"{exception[0].__name__}:")
+                        if line.startswith(exception_line_prefixes)
                     )
                     formatted_ex = formatted_ex[exc_msg_index:]
 
index 5c59b00e729aa012639edf7bcc6ce694454c8f2b..cb4e2157bb228b9aad7f68f1504a5a611829e898 100644 (file)
@@ -3310,6 +3310,24 @@ def test_syntax_error_with_note(cls, multiline=False):
     raise exc
 
 
+def test_syntax_error_subclass_from_stdlib():
+    """
+    `ParseError` is a subclass of `SyntaxError`, but it is not a builtin:
+
+    >>> test_syntax_error_subclass_from_stdlib()
+    Traceback (most recent call last):
+      ...
+    xml.etree.ElementTree.ParseError: error
+    error
+    Note
+    Line
+    """
+    from xml.etree.ElementTree import ParseError
+    exc = ParseError("error\nerror")
+    exc.add_note('Note\nLine')
+    raise exc
+
+
 def test_syntax_error_with_incorrect_expected_note():
     """
     >>> def f(x):
diff --git a/Misc/NEWS.d/next/Library/2023-11-04-10-24-25.gh-issue-111541.x0RBI1.rst b/Misc/NEWS.d/next/Library/2023-11-04-10-24-25.gh-issue-111541.x0RBI1.rst
new file mode 100644 (file)
index 0000000..719b63d
--- /dev/null
@@ -0,0 +1 @@
+Fix :mod:`doctest` for :exc:`SyntaxError` not-builtin subclasses.