assert_fs/
lib.rs

1//! Filesystem fixtures and assertions for testing.
2//!
3//! `assert_fs` aims to simplify
4//! - Setting up files for your tests to consume
5//! - Asserting on files produced by your tests
6//!
7//! ## Overview
8//!
9//! Setting up a fixture
10//! - [`TempDir`] or [`NamedTempFile`] for a sandbox to test in.
11//! - [`touch`][`FileTouch`] a [`ChildPath`] or [`NamedTempFile`]
12//! - [`write_binary`][`FileWriteBin`] a [`ChildPath`] or [`NamedTempFile`]
13//! - [`write_str`][`FileWriteStr`] a [`ChildPath`] or [`NamedTempFile`]
14//! - [`write_file`][`FileWriteFile`] a [`ChildPath`] or [`NamedTempFile`]
15//! - [`copy_from`][`PathCopy`] a pristine folder to a [`ChildPath`] or [`TempDir`]
16//! - [`symlink_to_file`][`SymlinkToFile`] a [`ChildPath`] or [`NamedTempFile`]
17//! - [`symlink_to_dir`][`SymlinkToDir`] a [`ChildPath`] or [`TempDir`]
18//!
19//! Validating
20//! - [`assert`][`PathAssert`] a [`ChildPath`], [`TempDir`], or [`NamedTempFile`]
21//!
22//! ## Example
23//!
24//! Here is a trivial example:
25//!
26//! ```rust
27//! use assert_fs::prelude::*;
28//! use predicates::prelude::*;
29//!
30//! let temp = assert_fs::TempDir::new().unwrap();
31//! let input_file = temp.child("foo.txt");
32//! input_file.touch().unwrap();
33//!
34//! // ... do something with input_file ...
35//!
36//! input_file.assert("");
37//! temp.child("bar.txt").assert(predicate::path::missing());
38//!
39//! temp.close().unwrap();
40//! ```
41//!
42//! [`ChildPath`]: fixture::ChildPath
43//! [`FileTouch`]: fixture::FileTouch
44//! [`FileWriteBin`]: fixture::FileWriteBin
45//! [`FileWriteStr`]: fixture::FileWriteStr
46//! [`FileWriteFile`]: fixture::FileWriteFile
47//! [`SymlinkToDir`]: fixture::SymlinkToDir
48//! [`SymlinkToFile`]: fixture::SymlinkToFile
49//! [`PathCopy`]: fixture::PathCopy
50//! [`PathAssert`]: assert::PathAssert
51//! [dir-diff]: https://crates.io/crates/dir-diff
52
53#![cfg_attr(docsrs, feature(doc_auto_cfg))]
54#![warn(clippy::print_stderr)]
55#![warn(clippy::print_stdout)]
56
57pub mod assert;
58pub mod fixture;
59
60// Pulling this in for convenience-sake
61#[doc(inline)]
62pub use crate::fixture::TempDir;
63
64// Pulling this in for convenience-sake
65#[doc(inline)]
66pub use crate::fixture::NamedTempFile;
67
68/// Extension traits that are useful to have available.
69pub mod prelude {
70    pub use crate::assert::PathAssert;
71    pub use crate::fixture::FileTouch;
72    pub use crate::fixture::FileWriteBin;
73    pub use crate::fixture::FileWriteFile;
74    pub use crate::fixture::FileWriteStr;
75    pub use crate::fixture::PathChild;
76    pub use crate::fixture::PathCopy;
77    pub use crate::fixture::PathCreateDir;
78    pub use crate::fixture::SymlinkToDir;
79    pub use crate::fixture::SymlinkToFile;
80}
81
82mod color;
83use color::Palette;
84
85#[macro_use]
86extern crate doc_comment;
87doctest!("../README.md");