| 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", | |
| ); | |
| } |