diff --git a/tests/test_diagnostic_source_macro.rs b/tests/test_diagnostic_source_macro.rs index 8af2e88..0e3770f 100644 --- a/tests/test_diagnostic_source_macro.rs +++ b/tests/test_diagnostic_source_macro.rs @@ -1,5 +1,16 @@ use miette::Diagnostic; +#[derive(Debug, miette::Diagnostic, thiserror::Error)] +#[error("A complex error happened")] +struct SourceError { + #[source_code] + code: String, + #[help] + help: String, + #[label("here")] + label: (usize, usize), +} + #[derive(Debug, miette::Diagnostic, thiserror::Error)] #[error("AnErr")] struct AnErr; @@ -59,3 +70,34 @@ fn test_diagnostic_source() { let error = TestArcedError(std::sync::Arc::new(AnErr)); assert!(error.diagnostic_source().is_some()); } + +#[test] +fn test_diagnostic_source_pass_extra_info() { + let diag = TestBoxedError(Box::new(SourceError { + code: String::from("Hello\nWorld!"), + help: format!("Have you tried turning it on and off again?"), + label: (1, 4), + })); + let mut out = String::new(); + miette::GraphicalReportHandler::new_themed(miette::GraphicalTheme::unicode_nocolor()) + .with_width(80) + .with_footer("this is a footer".into()) + .render_report(&mut out, &diag) + .unwrap(); + println!("Error: {}", out); + let expected = r#" × TestError + ╰─▶ × A complex error happened + ╭─[1:1] + 1 │ Hello + · ──┬─ + · ╰── here + 2 │ World! + ╰──── + help: Have you tried turning it on and off again? + + + this is a footer +"# + .to_string(); + assert_eq!(expected, out); +}