bolero_engine/
failure.rs

1use crate::{
2    panic::{rust_backtrace, PanicError},
3    Seed,
4};
5use core::fmt::{Debug, Display};
6
7/// Contains information about a test failure
8#[derive(Debug)]
9pub struct Failure<Input> {
10    pub error: PanicError,
11    pub input: Input,
12    pub seed: Option<Seed>,
13}
14
15impl<Input: Debug> Display for Failure<Input> {
16    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
17        writeln!(
18            f,
19            "\n======================== Test Failure ========================\n"
20        )?;
21        if let Some(seed) = &self.seed {
22            writeln!(f, "BOLERO_RANDOM_SEED={seed}\n")?;
23        }
24
25        writeln!(f, "Input: \n{:#?}\n", self.input)?;
26        writeln!(f, "Error: \n{}", self.error)?;
27
28        if f.alternate() {
29            if let Some(backtrace) = self.error.backtrace.as_ref().filter(|_| rust_backtrace()) {
30                writeln!(f, "{backtrace}")?;
31            } else {
32                writeln!(f, "note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace.")?;
33            }
34        }
35
36        writeln!(
37            f,
38            "\n=============================================================="
39        )?;
40        Ok(())
41    }
42}
43
44impl<Input: Debug> std::error::Error for Failure<Input> {}