/tests/testsuite/rustdoc.rs

https://gitlab.com/frewsxcv/cargo · Rust · 252 lines · 229 code · 22 blank · 1 comment · 1 complexity · 399b2f278c6a206f83fda1e7ebeacd43 MD5 · raw file

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