-
Notifications
You must be signed in to change notification settings - Fork 13.4k
reconsider "the way to run a crate's unit tests is x test <crate>
"
#140478
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
Comments
I was just having this same thought recently, except with rustdoc, where the problem is even worse, due to how many test suites are involved. |
Speaking as an occasional contributor who hasn't learned all the corners of the codebase, it would be nice to have both of the following readily available:
Perhaps exactly this distinction could be specified with a syntax, and an error produced when it's ambiguous:
|
I will say, one thing we do have, for some things at least, is (eg.) Not sure if this also applies to |
i am almost confident that |
it seems to run |
Presumably this means something closer to "some rough heuristic of tests intending to cover this directory"? E.g., std is indirectly tested by basically everything, even (say) UI tests, but it's probably unreasonable to run all of the UI tests as someone changing just std. My sense is that heuristics are probably fine here, but we should be clear that's what we'd actually be aiming for, not some kind of "definitive truth". And then it may also make sense to have gradients (e.g., I have a good computer, run all of the tests, or "run minimum we can to get some confidence" for the less powerful computers). FWIW, my personal workflow here is basically never running tests locally until they fail in CI - maybe there's more we can do to encourage that (e.g., dedicated builders for the fast profile of the tests per area that hopefully complete in <30 minutes for example). |
I see how you are saying this is ambiguous, and I can imagine coverage being the best option, but I actually did not mean that; I meant “the tests which, if this were a more conventional project made up of Cargo packages, would be located in this package”. Probably a coverage-oriented definition is more likely to be actually useful, though.
I can’t imagine doing that myself, because if I can’t see whether tests pass, I often can’t see whether my idea is even feasible, or implemented close enough to the right way, to be worth posting as a PR. |
I don't think anyone expects "all tests that could possibly be affected by this code" to run when they say I think people are expecting "tests that are explicitly targeting std", which is ~roughly the list I put at the top (library/std, tests/ui/std, tests/rustdoc-js-std, probably a few but not all of the run-make tests). and that is certainly something we can do with a little manual work in bootstrap. |
+1 — I feel the same way about this as I do about IDE tooling, we should make it as good as we can, but we should not consider it a requirement for testing code at all |
Uh oh!
There was an error while loading. Please reload this page.
Summary
@ChrisDenton brought up to me the following thorny problem:
Say you are a libs contributor working on std. Right now, to run all relevant tests, the command you need is something like
x test library tests/ui/std rustdoc-js-std
. This is verbose and a little unreasonable to expect people to remember.We would like to add an alias for this;
x test std-tests
could work. But nowx test std
does something people don't expect (only runs a subset of the std tests). If we changex test std
to meanx test std-tests
, then now we have an inconsistency betweenx test core
, which only runs crate tests, andx test std
, which means "run a superset of crate tests".When I added unit tests in #95503, I wasn't really thinking about "run all the tests for an area", because we didn't have any equivalent of
std-tests
, then or now. But now that I've added it, the naming conflict is unfortunate. Maybe we should reconsider the naming here, and have the way to run unit tests for a crate bex test std-unit
or something like that? Or only do this for library crates, and havex test rustc_resolve
continue to mean "run the unit tests for rustc_resolve"? It could be nice to havex test rustc_resolve
also implyx test tests/ui/resolve
, though.Command used
Expected behaviour
Actual behaviour
Bootstrap configuration (bootstrap.toml)
see above
Operating system
ubuntu 22.04, but this is a problem on all OSes
HEAD
a114bcf
The text was updated successfully, but these errors were encountered: