1 use displaydoc::Display;
2
3 #[cfg(feature = "std")]
4 use std::path::PathBuf;
5
6 #[derive(Display)]
7 /// Just a basic struct {thing}
8 struct HappyStruct {
9 thing: &'static str,
10 }
11
12 #[derive(Display)]
13 #[ignore_extra_doc_attributes]
14 /// Just a basic struct {thing}
15 /// and this line should get ignored
16 struct HappyStruct2 {
17 thing: &'static str,
18 }
19
20 #[derive(Display)]
21 enum Happy {
22 /// I really like Variant1
23 Variant1,
24 /// Variant2 is pretty swell 2
25 Variant2,
26 /// Variant3 is okay {sometimes}
27 Variant3 { sometimes: &'static str },
28 /**
29 * Variant4 wants to have a lot of lines
30 *
31 * Lets see how this works out for it
32 */
33 Variant4,
34 /// Variant5 has a parameter {0} and some regular comments
35 // A regular comment that won't get picked
36 Variant5(u32),
37
38 /// The path {0}
39 #[cfg(feature = "std")]
40 Variant6(PathBuf),
41
42 /// These docs are ignored
43 #[displaydoc("Variant7 has a parameter {0} and uses #[displaydoc]")]
44 /// These docs are also ignored
45 Variant7(u32),
46 }
47
48 // Used for testing indented doc comments
49 mod inner_mod {
50 use super::Display;
51
52 #[derive(Display)]
53 pub enum InnerHappy {
54 /// I really like Variant1
55 Variant1,
56 /// Variant2 is pretty swell 2
57 Variant2,
58 /// Variant3 is okay {sometimes}
59 Variant3 { sometimes: &'static str },
60 /**
61 * Variant4 wants to have a lot of lines
62 *
63 * Lets see how this works out for it
64 */
65 Variant4,
66 /// Variant5 has a parameter {0} and some regular comments
67 // A regular comment that won't get picked
68 Variant5(u32),
69
70 /** what happens if we
71 * put text on the first line?
72 */
73 Variant6,
74
75 /**
76 what happens if we don't use *?
77 */
78 Variant7,
79
80 /**
81 *
82 * what about extra new lines?
83 */
84 Variant8,
85 }
86 }
87
assert_display<T: std::fmt::Display>(input: T, expected: &'static str)88 fn assert_display<T: std::fmt::Display>(input: T, expected: &'static str) {
89 let out = format!("{}", input);
90 assert_eq!(expected, out);
91 }
92
93 #[test]
does_it_print()94 fn does_it_print() {
95 assert_display(Happy::Variant1, "I really like Variant1");
96 assert_display(Happy::Variant2, "Variant2 is pretty swell 2");
97 assert_display(Happy::Variant3 { sometimes: "hi" }, "Variant3 is okay hi");
98 assert_display(
99 Happy::Variant4,
100 "Variant4 wants to have a lot of lines\n\nLets see how this works out for it",
101 );
102 assert_display(
103 Happy::Variant5(2),
104 "Variant5 has a parameter 2 and some regular comments",
105 );
106 assert_display(
107 Happy::Variant7(2),
108 "Variant7 has a parameter 2 and uses #[displaydoc]",
109 );
110 assert_display(HappyStruct { thing: "hi" }, "Just a basic struct hi");
111
112 assert_display(HappyStruct2 { thing: "hi2" }, "Just a basic struct hi2");
113
114 assert_display(inner_mod::InnerHappy::Variant1, "I really like Variant1");
115 assert_display(
116 inner_mod::InnerHappy::Variant2,
117 "Variant2 is pretty swell 2",
118 );
119 assert_display(
120 inner_mod::InnerHappy::Variant3 { sometimes: "hi" },
121 "Variant3 is okay hi",
122 );
123 assert_display(
124 inner_mod::InnerHappy::Variant4,
125 "Variant4 wants to have a lot of lines\n\nLets see how this works out for it",
126 );
127 assert_display(
128 inner_mod::InnerHappy::Variant5(2),
129 "Variant5 has a parameter 2 and some regular comments",
130 );
131 assert_display(
132 inner_mod::InnerHappy::Variant6,
133 "what happens if we\nput text on the first line?",
134 );
135 assert_display(
136 inner_mod::InnerHappy::Variant7,
137 "what happens if we don\'t use *?",
138 );
139 assert_display(
140 inner_mod::InnerHappy::Variant8,
141 "what about extra new lines?",
142 );
143 }
144
145 #[test]
146 #[cfg(feature = "std")]
does_it_print_path()147 fn does_it_print_path() {
148 assert_display(
149 Happy::Variant6(PathBuf::from("/var/log/happy")),
150 "The path /var/log/happy",
151 );
152 }
153