[][src]Crate testdir

Semi-persistent, scoped test directories

This module provides a convenient way to have an empty directory for tests which can be inspected after the test run in a predicatable location. On subsequent test runs the directory trees of previous runs will be cleaned up to keep the total number of directories limited.

Quickstart

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_nonexisting() {
        let dir: PathBuf = testdir!();
        let path = dir.join("not-here.txt");
        assert!(!path.exists());
    }
}

If it does not yet exist this will create a directory called rstest-of-$USER in you system's temporary directory. Inside there you will find subdirectories named after your crate name and with a number suffix which increases each time your run the tests. There is also a -current suffix which symlinks to the most recent numbered directory.

Inside the numbered directory you will find a directory structure resembling your crate's modules structure. For example if the above tests are in lib.rs of a crate called mycrate, than on my UNIX system it looks like this:

$ tree /tmp/rstest-of-flub/
/tmp/rstest-of-flub/
+- mycrate-0/
|    +- mycrate/
|         +- tests/
|              +- test_nonexisting/
|              +- test_write/
|                   +- hello.txt
+- testdir-current -> /tmp/rstest-of-flub/mycrate-0

Macros

init_testdir

Initialises the global NumberedDir used by the testdir macro.

testdir

Creates a test directory at the requested scope.

Structs

NumberedDir

A sequentially numbered directory.

NumberedDirBuilder

Builder to create a NumberedDir.

NumberedDirIter

Iterator of NumberedDir entries.

Constants

KEEP_DEFAULT

The default number of test directories retained by NumberedDirBuilder and testdir!: 8.

ROOT_DEFAULT

Default to build the root for NumberedDirBuilder and testdir! from: testdir.

Functions

with_testdir

Executes a function passing the global NumberedDir instance.