1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
//! The crate's wiki.
//!
//! Get started
//! -----------
//!
//! As a general advice, it should not be forgotten that everything related to
//! this crate must be used only within a test config
//! (*i.e.*, with a `#[cfg(test)]` attribute).
//! Otherwise, the library sources are mixed with the tests ones.
//!
//! Add the crate in the Cargo.toml as a dev dependency:
//!
//! ```toml
//! [dev-dependencies]
//! fluid = "0.4"
//! ```
//!
//! For those stuck in the 2015 edition, reference the crate in the main file:
//!
//! ```rust
//! #[cfg(test)] extern crate fluid;
//! ```
//!
//! Import the needed content in scope of the test files:
//!
//! ```rust
//! use fluid::prelude::*;
//! ```
//!
//! [The tests](assertions_list/index.html) can then be written:
//!
//! Facts and theories
//! ------------------
//!
//! ### Fact
//!
//!
//! ```rust
//! # use fluid::prelude::*;
//! # fn number_of_faces(_: &str) -> u8 { 3 }
//! #[fact]
//! fn cerberus_has_3_heads() {
//! number_of_faces("Cerberus").should().be_equal_to(3);
//! }
//! ```
//!
//! [More about facts](fact/index.html).
//!
//! ### Theory
//!
//! ```rust
//! # use fluid::prelude::*;
//! #[theory]
//! #[case("Cerberus", 3)]
//! #[case("Hydra", 7)]
//! #[case("Janus", 2)]
//! #[case("Normal guy", 1)]
//! fn each_creature_has_a_correct_number_of_faces(name: &str, nbr_faces: u8) {
//! number_of_faces(name).should().be_equal_to(nbr_faces);
//! }
//! ```
//!
//! [More about theories](theory/index.html).
//!
//! Setup and teardown
//! ------------------
//!
//! Tests sessions are available: they allow to add a setup, a teardown, and a context to the tests:
//!
//! ```rust
//! use fluid::prelude::*;
//!
//! struct FooTests {
//! // The needed context.
//! }
//!
//! impl Default for FooTests {
//! fn default() -> Self {
//! // Here goes the setup.
//! FooTests {
//! // ...
//! }
//! }
//! }
//!
//! impl Drop for FooTests {
//! fn drop(&mut self) {
//! // Here goes the teardown.
//! }
//! }
//!
//! // Here go the tests:
//! #[session]
//! impl FooTests {
//! #[fact]
//! fn dummy_example(self) {
//! // The context can be used through `self` for the tests.
//! }
//! }
//! ```
//!
//! [More about sessions](session/index.html).