mirror of
https://github.com/astral-sh/uv
synced 2026-01-20 21:10:10 -05:00
Bring harmony to the test snapshot filtering situation (#2678)
The snapshot filtering situation has gotten way out of hand, with each
test hand-rolling it's own filters on top of copied cruft from previous
tests.
I've attempted to address this holistically:
- `TestContext.filters()` has everything you should need
- This was introduced a while ago, but needed a few more filters for it
to be generalized everywhere
- Using `INSTA_FILTERS` is **not recommended** unless you do not want
the context filters
- It is okay to extend these filters for things unrelated to paths
- If you have to write a custom path filter, please highlight it in
review so we can address it in the common module
- `TestContext.site_packages()` gives cross-platform access to the
site-packages directory
- Do not manually construct the path to site-packages from the venv
- Do not turn off tests on Windows because you manually constructed a
Unix path to site-packages
- `TestContext.workspace_root` gives access to uv's repository directory
- Use this for installing from `scripts/packages/`
- If you need coverage for relative paths, copy the test package into
the `temp_dir` don't change the working directory of the test fixture
There is additional work that can be done here, such as:
- Auditing and removing additional uses of `INSTA_FILTERS`
- Updating manual construction of `Command` instances to use a utility
- The `venv` tests are particularly frightening in their lack of a test
context and could use some love
- Improving the developer experience i.e. apply context filters to
snapshots by default
This commit is contained in:
@@ -64,7 +64,7 @@ fn {{module_name}}() -> Result<()> {
|
||||
let python_versions = &[{{#environment.additional_python}}"{{.}}", {{/environment.additional_python}}];
|
||||
|
||||
// In addition to the standard filters, swap out package names for shorter messages
|
||||
let mut filters = INSTA_FILTERS.to_vec();
|
||||
let mut filters = context.filters();
|
||||
filters.push((r"{{name}}-", "package-"));
|
||||
|
||||
let requirements_in = context.temp_dir.child("requirements.in");
|
||||
|
||||
@@ -82,7 +82,7 @@ fn {{module_name}}() {
|
||||
let context = TestContext::new("{{environment.python}}");
|
||||
|
||||
// In addition to the standard filters, swap out package names for shorter messages
|
||||
let mut filters = INSTA_FILTERS.to_vec();
|
||||
let mut filters = context.filters();
|
||||
filters.push((r"{{name}}-", "package-"));
|
||||
|
||||
uv_snapshot!(filters, command(&context)
|
||||
|
||||
Reference in New Issue
Block a user