testdir 0.3.1

Semi-persistent, scoped test directories
Documentation
# Semi-persistent, scoped test directories

This crate aims to make it easier to use temporary directories in
tests, primarily by calling the `testdir!()` macro somewhere in a test
function.  The direcetories are structured per-scope and per-test and
will be available for inspection after the test has finished.  On
subsequent test runs older generations of test directories will be
cleaned up.

If you've ever used [pytest's `tmp_path` or `tmpdir`
fixtures](https://docs.pytest.org/en/stable/reference.html#tmp-path)
this pattern should be similar.

By default test directories are created as:
```
/tmp/rstest-of-$USER/$cargo_pkg_name-$N/module/path/test_name
```

Here `$N` is an integer generation number increasing with each `cargo
test` invocation.  Generations older than the 8 most recent ones are
removed on the next `cargo test` run.  Naturally `/tmp` is actually
provided by
[`std::env::temp_dir`](https://doc.rust-lang.org/std/env/fn.temp_dir.html)
and `$USER` is also cross platform using the [whoami
crate](https://crates.io/crates/whoami).

There is also a symlink pointing to the most recent generation:
```
/tmp/rstest-of-$USER/$cargo_pkg_name-current -> $cargo_pkg_name_$N`
```

## Example

Even when executing this with `cargo test --jobs=1` these tests will
pass as each gets their own unique directory:
```no_run
// E.g. in lib.rs

mod tests {
    use std::path::PathBuf;
    use testdir::testdir;

    #[test]
    fn test_write() {
        let dir: PathBuf = testdir!();
        let path = dir.join("hello.txt");
        std::fs::write(&path, "hi there").ok();
        assert!(path.exists());
    }
    
    #[test]
    fn test_read() {
        let dir: PathBuf = testdir!();
        let path = dir.join("hello.txt");
        assert!(!path.exists());
    }
}
```

Afterwards you can inspect the directories and they should look
something like this:
```sh
$ tree /tmp/rstest-of-flub/
/tmp/rstest-of-flub/
+- cargo-pkg-name-0
|    +- cratename
|         +- tests
|              +- test_read
|              +- test_write
|                   +- hello.txt
+- testdir-current -> /tmp/rstest-of-flub/cargo-pkg-name-0
```

## Feedback and contributing

The code lives in a mercurial repository at
https://hg.sr.ht/~/flub/testdir from which you can clone the
repository.

For any feedback, bug reports or patches please send an email to
[~flub/testdir@lists.sr.ht](mailto:~flub/testdir@lists.sr.ht) (or use
[u.flub.testdir@lists.sr.ht](mailto:u.flub.testdir@lists.sr.ht) if
your mail client does not accept the former).

The mailing list archive can be browsed at
[https://lists.sr.ht/~flub/testdir](https://lists.sr.ht/~flub/testdir).