swiftlang / swift-testing

A modern, expressive testing package for Swift
Apache License 2.0
1.67k stars 67 forks source link

Capture source location of elements in collection literal test arguments #519

Open wwake opened 2 months ago

wwake commented 2 months ago

Description

For parameterized tests, I'd like the error report to point to the source line of the failing test case (perhaps as well as the #expect that failed). This makes more sense for sequences of test cases than combinatorial tests.

In XCTest, I used a struct wrapping each test case that captured #file and #line, so I could pass those through to the assertions. (Sub-issue: there's no corresponding #sourceLocation macro so I can't capture the exact location.)

Wrapping each line was annoying. It would really be nice if there were an implicit way to get this information - e.g., automatically capture the source location for each test case, and add an argument or implicit value that you could pass to #expect.

Expected behavior

No response

Actual behavior

No response

Steps to reproduce

No response

swift-testing version/commit hash

No response

Swift & OS version (output of swift --version && uname -a)

No response

grynspan commented 2 months ago

For inputs like array or dictionary literals, we want to implement something here in a future update. In the general case, it's not possible (because source location information is only available for elements in collection literals.)

grynspan commented 2 months ago

Separately, we did just add #_sourceLocation, although it's not in Xcode or in a tagged release yet.

stmontgomery commented 2 months ago

I updated the title to scope the request a bit more narrowly to something we can actually achieve:

Capture source location of elements in collection literal test arguments

stmontgomery commented 2 months ago

Tracked internally as rdar://130959475

grynspan commented 2 months ago

I think we have an earlier radar?