mirror of https://github.com/zkat/miette.git
157 lines
3.3 KiB
Rust
157 lines
3.3 KiB
Rust
use miette::{Diagnostic, Severity};
|
|
use thiserror::Error;
|
|
|
|
#[test]
|
|
fn basic_struct() {
|
|
#[derive(Debug, Diagnostic, Error)]
|
|
#[error("welp")]
|
|
#[diagnostic(
|
|
code = "foo::bar::baz",
|
|
severity = "Error",
|
|
help = "try doing it better"
|
|
)]
|
|
struct Foo;
|
|
|
|
assert_eq!("foo::bar::baz".to_string(), Foo.code().to_string());
|
|
|
|
assert_eq!(Some(Severity::Error), Foo.severity());
|
|
|
|
assert_eq!(
|
|
"try doing it better".to_string(),
|
|
Foo.help().unwrap().to_string()
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn basic_enum() {
|
|
|
|
#[derive(Debug, Diagnostic, Error)]
|
|
#[error("welp")]
|
|
enum Foo {
|
|
#[diagnostic(
|
|
code = "foo::x",
|
|
severity = "Warning",
|
|
help = "Try using Foo::Y instead"
|
|
)]
|
|
X,
|
|
#[diagnostic(code = "foo::y")]
|
|
Y,
|
|
}
|
|
|
|
assert_eq!("foo::x".to_string(), Foo::X.code().to_string());
|
|
assert_eq!("foo::y".to_string(), Foo::Y.code().to_string());
|
|
|
|
assert_eq!(Some(Severity::Warning), Foo::X.severity());
|
|
assert_eq!(None, Foo::Y.severity());
|
|
}
|
|
|
|
#[test]
|
|
fn path_code() {
|
|
#[derive(Debug, Diagnostic, Error)]
|
|
#[error("welp")]
|
|
#[diagnostic(code(foo::bar::baz))]
|
|
struct FooStruct;
|
|
|
|
assert_eq!("foo::bar::baz".to_string(), FooStruct.code().to_string());
|
|
|
|
#[derive(Debug, Diagnostic, Error)]
|
|
#[error("welp")]
|
|
enum FooEnum {
|
|
#[diagnostic(code(foo::x))]
|
|
X,
|
|
}
|
|
|
|
assert_eq!("foo::x".to_string(), FooEnum::X.code().to_string());
|
|
}
|
|
|
|
#[test]
|
|
fn path_severity() {
|
|
#[derive(Debug, Diagnostic, Error)]
|
|
#[error("welp")]
|
|
#[diagnostic(
|
|
code(foo::bar::baz),
|
|
severity(Warning)
|
|
)]
|
|
struct FooStruct;
|
|
|
|
assert_eq!(Some(Severity::Warning), FooStruct.severity());
|
|
|
|
#[derive(Debug, Diagnostic, Error)]
|
|
#[error("welp")]
|
|
enum FooEnum {
|
|
#[diagnostic(
|
|
code(foo::x),
|
|
severity(Warning),
|
|
)]
|
|
X,
|
|
}
|
|
|
|
assert_eq!(Some(Severity::Warning), FooEnum::X.severity());
|
|
}
|
|
|
|
#[test]
|
|
fn list_help() {
|
|
#[derive(Debug, Diagnostic, Error)]
|
|
#[error("welp")]
|
|
#[diagnostic(
|
|
code(foo::bar::baz),
|
|
help("try doing it better"),
|
|
)]
|
|
struct FooStruct;
|
|
|
|
assert_eq!(
|
|
"try doing it better".to_string(),
|
|
FooStruct.help().unwrap().to_string()
|
|
);
|
|
|
|
#[derive(Debug, Diagnostic, Error)]
|
|
#[error("welp")]
|
|
enum FooEnum {
|
|
#[diagnostic(
|
|
code(foo::x),
|
|
help("try doing it better"),
|
|
)]
|
|
X,
|
|
}
|
|
|
|
assert_eq!(
|
|
"try doing it better".to_string(),
|
|
FooEnum::X.help().unwrap().to_string()
|
|
);
|
|
}
|
|
|
|
// TODO: Darling doesn't support this, apparently:
|
|
// https://github.com/TedDriggs/darling/issues/145
|
|
/*
|
|
#[test]
|
|
fn fmt_help() {
|
|
#[derive(Debug, Diagnostic, Error)]
|
|
#[error("welp")]
|
|
#[diagnostic(
|
|
code(foo::bar::baz),
|
|
help("{} {}", 1, "bar"),
|
|
)]
|
|
struct FooStruct;
|
|
|
|
assert_eq!(
|
|
"1 bar".to_string(),
|
|
FooStruct.help().unwrap().to_string()
|
|
);
|
|
|
|
#[derive(Debug, Diagnostic, Error)]
|
|
#[error("welp")]
|
|
enum FooEnum {
|
|
#[diagnostic(
|
|
code(foo::x),
|
|
help("{} {}", 1, "bar"),
|
|
)]
|
|
X,
|
|
}
|
|
|
|
assert_eq!(
|
|
"1 bar".to_string(),
|
|
FooEnum::X.help().unwrap().to_string()
|
|
);
|
|
}
|
|
*/
|