use docsplay::Display;
#[cfg(feature = "std")]
use std::path::PathBuf;
use std::ops::Range;
#[derive(Display)]
struct HappyStruct {
thing: &'static str,
}
#[derive(Display)]
#[ignore_extra_doc_attributes]
struct HappyStruct2 {
thing: &'static str,
}
#[derive(Display)]
enum Happy {
Variant1,
Variant2,
Variant3 { sometimes: &'static str },
Variant4,
Variant5(u32),
#[cfg(feature = "std")]
Variant6(PathBuf),
#[display("Variant7 has a parameter {0} and uses #[display]")]
Variant7(u32),
Variant8 { range: Range<u32> },
#[display("Variant9 has a range: {range.start} to {range.end}")]
Variant9 { range: Range<u32> },
Variant10 { range: Range<u32> },
}
mod inner_mod {
use super::Display;
#[derive(Display)]
pub enum InnerHappy {
Variant1,
Variant2,
Variant3 { sometimes: &'static str },
Variant4,
Variant5(u32),
Variant6,
Variant7,
Variant8,
Variant9,
#[ignore_extra_doc_attributes]
Variant10,
}
}
fn assert_display<T: std::fmt::Display>(input: T, expected: &'static str) {
use pretty_assertions::assert_eq;
let out = format!("{}", input);
assert_eq!(expected, out);
}
#[test]
fn does_it_print() {
assert_display(Happy::Variant1, "I really like Variant1");
assert_display(Happy::Variant2, "Variant2 is pretty swell 2");
assert_display(Happy::Variant3 { sometimes: "hi" }, "Variant3 is okay hi");
assert_display(
Happy::Variant4,
"Variant4 wants to have a lot of lines\n\nLets see how this works out for it",
);
assert_display(
Happy::Variant5(2),
"Variant5 has a parameter 2 and some regular comments",
);
assert_display(
Happy::Variant7(2),
"Variant7 has a parameter 2 and uses #[display]",
);
assert_display(Happy::Variant8 { range: 1..4 }, "1 to 4");
assert_display(
Happy::Variant9 { range: 1..4 },
"Variant9 has a range: 1 to 4",
);
assert_display(
Happy::Variant10 { range: 1..4 },
"Variant9 has a range:\n1\n4",
);
assert_display(HappyStruct { thing: "hi" }, "Just a basic struct hi");
assert_display(HappyStruct2 { thing: "hi2" }, "Just a basic struct hi2");
assert_display(inner_mod::InnerHappy::Variant1, "I really like Variant1");
assert_display(
inner_mod::InnerHappy::Variant2,
"Variant2 is pretty swell 2",
);
assert_display(
inner_mod::InnerHappy::Variant3 { sometimes: "hi" },
"Variant3 is okay hi",
);
assert_display(
inner_mod::InnerHappy::Variant4,
"Variant4 wants to have a lot of lines\n\nLets see how this works out for it",
);
assert_display(
inner_mod::InnerHappy::Variant5(2),
"Variant5 has a parameter 2 and some regular comments",
);
assert_display(
inner_mod::InnerHappy::Variant6,
"what happens if we\nput text on the first line?",
);
assert_display(
inner_mod::InnerHappy::Variant7,
"what happens if we don\'t use *?",
);
assert_display(
inner_mod::InnerHappy::Variant8,
"what about extra new lines?",
);
assert_display(
inner_mod::InnerHappy::Variant9,
"what about\nmultiple lines?\n\nmultiple paragraphs?",
);
assert_display(inner_mod::InnerHappy::Variant10, "what about");
}
#[test]
#[cfg(feature = "std")]
fn does_it_print_path() {
assert_display(
Happy::Variant6(PathBuf::from("/var/log/happy")),
"The path /var/log/happy",
);
}