Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add reason for failed match to RaisesGroup #3145

Open
wants to merge 22 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
03a3959
RaisesGroup will now raise an assertionerror with an informative mess…
jakkdl Nov 27, 2024
c0dcb58
suggest allow_unwrapped if it would match with it
jakkdl Nov 29, 2024
2b98b2f
fix test fails
jakkdl Nov 29, 2024
f84d9d1
codecov and fix suggestion to re.escape string
jakkdl Nov 29, 2024
df27595
add _check_expected helper
jakkdl Nov 29, 2024
993a173
remove trailing period. Add trying_flattening and suggest_flattening.…
jakkdl Nov 29, 2024
656e040
simplify & remove false positive for suggestion to use flatten_subgroups
jakkdl Dec 3, 2024
debe557
overhaul message in the complicated case. Avoid printing check repr i…
jakkdl Dec 9, 2024
a8e263c
Merge remote-tracking branch 'origin/main' into raisesgroup_fail_reason
jakkdl Dec 9, 2024
8281d7c
Merge branch 'main' into raisesgroup_fail_reason
jakkdl Dec 18, 2024
3f757f1
Merge remote-tracking branch 'origin/main' into raisesgroup_fail_reason
jakkdl Dec 30, 2024
a62a252
add fails_raises_group test helper
jakkdl Dec 30, 2024
5efafd5
parenthesized-with
jakkdl Dec 30, 2024
6ab9ac9
add newsfragment
jakkdl Dec 30, 2024
f38d63b
print type(e).__name__ instead of repr on type fail. Don't print repr…
jakkdl Jan 2, 2025
b6ce586
don't print brief error if there's a possibility of misordering
jakkdl Jan 3, 2025
ebbf694
Merge remote-tracking branch 'origin/main' into raisesgroup_fail_reason
jakkdl Jan 8, 2025
9748cc8
change message when encountering group and expecting a bare exception…
jakkdl Jan 8, 2025
89bf77e
procrastinating on fixing expected-exception-matches-already-matched-…
jakkdl Jan 8, 2025
ba938bc
specify 'of [base]exceptiongroup when regex fails against the group; …
jakkdl Jan 8, 2025
9612d1e
fix sphinx
jakkdl Jan 8, 2025
580137d
overhaul saving of results. Print would-have-matched for expected wit…
jakkdl Jan 9, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions newsfragments/3145.feature.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
`trio.testing.RaisesGroup` now raises an `AssertionError` with a helpful message if it fails to match the raised exception. Previously it would let the original exception fall through, but that is now instead the ``__context__``.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
`trio.testing.RaisesGroup` now raises an `AssertionError` with a helpful message if it fails to match the raised exception. Previously it would let the original exception fall through, but that is now instead the ``__context__``.
`trio.testing.RaisesGroup` now raises an `AssertionError` with a helpful message if it fails to match the raised exception. Previously it would let the original exception fall through, but the raised exception is now instead the ``__context__`` of `AssertionError`.

I think it might be useful to say how to get back the raised exception here. Also maybe some sort of rewording to put "if it fails" earlier to avoid people thinking this effects them. But both of those are... unnecessary.

12 changes: 5 additions & 7 deletions src/trio/_tests/test_exports.py
Original file line number Diff line number Diff line change
Expand Up @@ -318,8 +318,11 @@ def lookup_symbol(symbol: str) -> dict[str, str]:
if module_name == "trio.socket" and class_name in dir(stdlib_socket):
continue

# ignore class that does dirty tricks
if class_ is trio.testing.RaisesGroup:
# Ignore classes that don't use attrs, they only define their members once
# __init__ is called (and reason they don't use attrs is because they're going
jakkdl marked this conversation as resolved.
Show resolved Hide resolved
# to be reimplemented in pytest).
# I think that's why these are failing at least?
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You could try tossing attrs on them and seeing! But I think so too.

Maybe even just try putting __slots__ on them and using that to double check, then removing this (checked) comment.

if class_ is trio.testing.RaisesGroup or class_ is trio.testing.Matcher:
continue

# dir() and inspect.getmembers doesn't display properties from the metaclass
Expand Down Expand Up @@ -460,11 +463,6 @@ def lookup_symbol(symbol: str) -> dict[str, str]:
"send_all_hook",
"wait_send_all_might_not_block_hook",
},
trio.testing.Matcher: {
"exception_type",
"match",
"check",
},
}
if tool == "mypy" and class_ in EXTRAS:
before = len(extra)
Expand Down
Loading
Loading