use displaydoc::Display; | |
#[cfg(feature = "std")] | |
use std::path::PathBuf; | |
#[derive(Display)] | |
/// Just a basic struct {thing} | |
struct HappyStruct { | |
thing: &'static str, | |
} | |
#[derive(Display)] | |
#[ignore_extra_doc_attributes] | |
/// Just a basic struct {thing} | |
/// and this line should get ignored | |
struct HappyStruct2 { | |
thing: &'static str, | |
} | |
#[derive(Display)] | |
enum Happy { | |
/// I really like Variant1 | |
Variant1, | |
/// Variant2 is pretty swell 2 | |
Variant2, | |
/// Variant3 is okay {sometimes} | |
Variant3 { sometimes: &'static str }, | |
/** | |
* Variant4 wants to have a lot of lines | |
* | |
* Lets see how this works out for it | |
*/ | |
Variant4, | |
/// Variant5 has a parameter {0} and some regular comments | |
// A regular comment that won't get picked | |
Variant5(u32), | |
/// The path {0} | |
#[cfg(feature = "std")] | |
Variant6(PathBuf), | |
/// These docs are ignored | |
#[displaydoc("Variant7 has a parameter {0} and uses #[displaydoc]")] | |
/// These docs are also ignored | |
Variant7(u32), | |
} | |
// Used for testing indented doc comments | |
mod inner_mod { | |
use super::Display; | |
#[derive(Display)] | |
pub enum InnerHappy { | |
/// I really like Variant1 | |
Variant1, | |
/// Variant2 is pretty swell 2 | |
Variant2, | |
/// Variant3 is okay {sometimes} | |
Variant3 { sometimes: &'static str }, | |
/** | |
* Variant4 wants to have a lot of lines | |
* | |
* Lets see how this works out for it | |
*/ | |
Variant4, | |
/// Variant5 has a parameter {0} and some regular comments | |
// A regular comment that won't get picked | |
Variant5(u32), | |
/** what happens if we | |
* put text on the first line? | |
*/ | |
Variant6, | |
/** | |
what happens if we don't use *? | |
*/ | |
Variant7, | |
/** | |
* | |
* what about extra new lines? | |
*/ | |
Variant8, | |
} | |
} | |
fn assert_display<T: std::fmt::Display>(input: T, expected: &'static str) { | |
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 #[displaydoc]", | |
); | |
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?", | |
); | |
} | |
#[test] | |
#[cfg(feature = "std")] | |
fn does_it_print_path() { | |
assert_display( | |
Happy::Variant6(PathBuf::from("/var/log/happy")), | |
"The path /var/log/happy", | |
); | |
} |