152 lines
4 KiB
Rust
152 lines
4 KiB
Rust
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",
|
|
);
|
|
}
|