-
Notifications
You must be signed in to change notification settings - Fork 128
Unlock expression expansions for negated expressions. #364
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
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This PR enables expression expansion for expressions of the forms `!x`, `!f()`,
`!y.g()`, etc. such that the value of the expressions they negate are available
at runtime to inspect in a test failure. For example, consider this test:
```swift
func f() -> Int { 123 }
func g() -> Int { 123 }
@test func myTest() {
#expect(!(f() == g())) // ♦️ Expectation failed: !(f() == g())
}
```
(i.e., testing that the result of `f()` is not equal to the result of `g()`, but
using `!(==)` instead of the more typical `!=`.)
This is a trivial/contrived example where we can tell at a glance that the
values equal `123`, of course. Still, previously this test would (correctly)
fail, but would not be able to provide the return values of `f()` and `g()`.
With this change, the following test issue is recorded:
```swift
#expect(!(f() == g())) // ♦️ Expectation failed: !((f() → 123) == (g() → 123) → true)
```
This increasing the amount of diagnostic information available.
This PR also makes adjustments to the `Expression` type to improve the
information we log during test runs. In particular, when `--verbose` is passed
to `swift test`, we will capture type information about more parts of a failed
expectation/expression.
Contributor
Author
|
@swift-ci please test |
briancroom
approved these changes
Apr 19, 2024
Contributor
briancroom
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Very nice, this is a great enhancement.
stmontgomery
approved these changes
Apr 19, 2024
Contributor
stmontgomery
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nice, thanks!
Contributor
Author
|
@swift-ci please test |
Contributor
Author
|
@swift-ci please test |
Contributor
Author
|
@swift-ci please test Windows |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR enables expression expansion for expressions of the forms
!x,!f(),!y.g(), etc. such that the value of the expressions they negate are available at runtime to inspect in a test failure. For example, consider this test:(i.e., testing that the result of
f()is not equal to the result ofg(), but using!(==)instead of the more typical!=.)This is a trivial/contrived example where we can tell at a glance that the values equal
123, of course. Still, previously this test would (correctly) fail, but would not be able to provide the return values off()andg(). With this change, the following test issue is recorded:This increasing the amount of diagnostic information available.
This PR also makes adjustments to the
Expressiontype to improve the information we log during test runs. In particular, when--verboseis passed toswift test, we will capture type information about more parts of a failed expectation/expression.Checklist: