]> git.proxmox.com Git - rustc.git/blob - src/tools/cargo/tests/testsuite/rustdoc.rs
New upstream version 1.75.0+dfsg1
[rustc.git] / src / tools / cargo / tests / testsuite / rustdoc.rs
1 //! Tests for the `cargo rustdoc` command.
2
3 use cargo_test_support::{basic_manifest, cross_compile, project};
4
5 #[cargo_test]
6 fn rustdoc_simple() {
7 let p = project().file("src/lib.rs", "").build();
8
9 p.cargo("rustdoc -v")
10 .with_stderr(
11 "\
12 [DOCUMENTING] foo v0.0.1 ([CWD])
13 [RUNNING] `rustdoc [..]--crate-name foo src/lib.rs [..]\
14 -o [CWD]/target/doc \
15 [..] \
16 -L dependency=[CWD]/target/debug/deps [..]`
17 [FINISHED] dev [unoptimized + debuginfo] target(s) in [..]
18 [GENERATED] [CWD]/target/doc/foo/index.html
19 ",
20 )
21 .run();
22 }
23
24 #[cargo_test]
25 fn rustdoc_args() {
26 let p = project().file("src/lib.rs", "").build();
27
28 p.cargo("rustdoc -v -- --cfg=foo")
29 .with_stderr(
30 "\
31 [DOCUMENTING] foo v0.0.1 ([CWD])
32 [RUNNING] `rustdoc [..]--crate-name foo src/lib.rs [..]\
33 -o [CWD]/target/doc \
34 [..] \
35 --cfg=foo \
36 -C metadata=[..] \
37 -L dependency=[CWD]/target/debug/deps [..]`
38 [FINISHED] dev [unoptimized + debuginfo] target(s) in [..]
39 [GENERATED] [CWD]/target/doc/foo/index.html
40 ",
41 )
42 .run();
43 }
44
45 #[cargo_test]
46 fn rustdoc_binary_args_passed() {
47 let p = project().file("src/main.rs", "").build();
48
49 p.cargo("rustdoc -v")
50 .arg("--")
51 .arg("--markdown-no-toc")
52 .with_stderr_contains("[RUNNING] `rustdoc [..] --markdown-no-toc[..]`")
53 .run();
54 }
55
56 #[cargo_test]
57 fn rustdoc_foo_with_bar_dependency() {
58 let foo = project()
59 .file(
60 "Cargo.toml",
61 r#"
62 [package]
63 name = "foo"
64 version = "0.0.1"
65 authors = []
66
67 [dependencies.bar]
68 path = "../bar"
69 "#,
70 )
71 .file("src/lib.rs", "extern crate bar; pub fn foo() {}")
72 .build();
73 let _bar = project()
74 .at("bar")
75 .file("Cargo.toml", &basic_manifest("bar", "0.0.1"))
76 .file("src/lib.rs", "pub fn baz() {}")
77 .build();
78
79 foo.cargo("rustdoc -v -- --cfg=foo")
80 .with_stderr(
81 "\
82 [CHECKING] bar v0.0.1 ([..])
83 [RUNNING] `rustc [..]bar/src/lib.rs [..]`
84 [DOCUMENTING] foo v0.0.1 ([CWD])
85 [RUNNING] `rustdoc [..]--crate-name foo src/lib.rs [..]\
86 -o [CWD]/target/doc \
87 [..] \
88 --cfg=foo \
89 -C metadata=[..] \
90 -L dependency=[CWD]/target/debug/deps \
91 --extern [..]`
92 [FINISHED] dev [unoptimized + debuginfo] target(s) in [..]
93 [GENERATED] [CWD]/target/doc/foo/index.html
94 ",
95 )
96 .run();
97 }
98
99 #[cargo_test]
100 fn rustdoc_only_bar_dependency() {
101 let foo = project()
102 .file(
103 "Cargo.toml",
104 r#"
105 [package]
106 name = "foo"
107 version = "0.0.1"
108 authors = []
109
110 [dependencies.bar]
111 path = "../bar"
112 "#,
113 )
114 .file("src/main.rs", "extern crate bar; fn main() { bar::baz() }")
115 .build();
116 let _bar = project()
117 .at("bar")
118 .file("Cargo.toml", &basic_manifest("bar", "0.0.1"))
119 .file("src/lib.rs", "pub fn baz() {}")
120 .build();
121
122 foo.cargo("rustdoc -v -p bar -- --cfg=foo")
123 .with_stderr(
124 "\
125 [DOCUMENTING] bar v0.0.1 ([..])
126 [RUNNING] `rustdoc [..]--crate-name bar [..]bar/src/lib.rs [..]\
127 -o [CWD]/target/doc \
128 [..] \
129 --cfg=foo \
130 -C metadata=[..] \
131 -L dependency=[CWD]/target/debug/deps [..]`
132 [FINISHED] dev [unoptimized + debuginfo] target(s) in [..]
133 [GENERATED] [CWD]/target/doc/bar/index.html
134 ",
135 )
136 .run();
137 }
138
139 #[cargo_test]
140 fn rustdoc_same_name_documents_lib() {
141 let p = project()
142 .file("src/main.rs", "fn main() {}")
143 .file("src/lib.rs", r#" "#)
144 .build();
145
146 p.cargo("rustdoc -v -- --cfg=foo")
147 .with_stderr(
148 "\
149 [DOCUMENTING] foo v0.0.1 ([..])
150 [RUNNING] `rustdoc [..]--crate-name foo src/lib.rs [..]\
151 -o [CWD]/target/doc \
152 [..] \
153 --cfg=foo \
154 -C metadata=[..] \
155 -L dependency=[CWD]/target/debug/deps [..]`
156 [FINISHED] dev [unoptimized + debuginfo] target(s) in [..]
157 [GENERATED] [CWD]/target/doc/foo/index.html
158 ",
159 )
160 .run();
161 }
162
163 #[cargo_test]
164 fn features() {
165 let p = project()
166 .file(
167 "Cargo.toml",
168 r#"
169 [package]
170 name = "foo"
171 version = "0.0.1"
172 authors = []
173
174 [features]
175 quux = []
176 "#,
177 )
178 .file("src/lib.rs", "")
179 .build();
180
181 p.cargo("rustdoc --verbose --features quux")
182 .with_stderr_contains("[..]feature=[..]quux[..]")
183 .run();
184 }
185
186 #[cargo_test]
187 fn proc_macro_crate_type() {
188 let p = project()
189 .file(
190 "Cargo.toml",
191 r#"
192 [package]
193 name = "foo"
194 version = "0.0.1"
195 authors = []
196
197 [lib]
198 proc-macro = true
199
200 "#,
201 )
202 .file("src/lib.rs", "")
203 .build();
204
205 p.cargo("rustdoc --verbose")
206 .with_stderr_contains(
207 "\
208 [RUNNING] `rustdoc --crate-type proc-macro [..]`
209 ",
210 )
211 .run();
212 }
213
214 #[cargo_test]
215 fn rustdoc_target() {
216 if cross_compile::disabled() {
217 return;
218 }
219
220 let p = project().file("src/lib.rs", "").build();
221
222 p.cargo("rustdoc --verbose --target")
223 .arg(cross_compile::alternate())
224 .with_stderr(format!(
225 "\
226 [DOCUMENTING] foo v0.0.1 ([..])
227 [RUNNING] `rustdoc [..]--crate-name foo src/lib.rs [..]\
228 --target {target} \
229 -o [CWD]/target/{target}/doc \
230 [..] \
231 -L dependency=[CWD]/target/{target}/debug/deps \
232 -L dependency=[CWD]/target/debug/deps[..]`
233 [FINISHED] dev [unoptimized + debuginfo] target(s) in [..]
234 [GENERATED] [CWD]/target/[..]/doc/foo/index.html",
235 target = cross_compile::alternate()
236 ))
237 .run();
238 }
239
240 #[cargo_test]
241 fn fail_with_glob() {
242 let p = project()
243 .file(
244 "Cargo.toml",
245 r#"
246 [workspace]
247 members = ["bar"]
248 "#,
249 )
250 .file("bar/Cargo.toml", &basic_manifest("bar", "0.1.0"))
251 .file("bar/src/lib.rs", "pub fn bar() { break_the_build(); }")
252 .build();
253
254 p.cargo("rustdoc -p '*z'")
255 .with_status(101)
256 .with_stderr("[ERROR] Glob patterns on package selection are not supported.")
257 .run();
258 }