Skip to content

Commit 1f6d4be

Browse files
committed
test(doc): show scenarios cargo doc not rebuild
1 parent 3530a26 commit 1f6d4be

File tree

1 file changed

+265
-0
lines changed

1 file changed

+265
-0
lines changed

tests/testsuite/doc.rs

+265
Original file line numberDiff line numberDiff line change
@@ -2914,3 +2914,268 @@ See https://doc.rust-lang.org/book/appendix-07-nightly-rust.html for more inform
29142914
"#]])
29152915
.run();
29162916
}
2917+
2918+
#[cargo_test(nightly, reason = "`rustdoc --emit` is unstable")]
2919+
fn rebuild_tracks_target_src_outside_package_root() {
2920+
let p = cargo_test_support::project_in("parent")
2921+
.file(
2922+
"Cargo.toml",
2923+
r#"
2924+
[package]
2925+
name = "foo"
2926+
edition = "2015"
2927+
[lib]
2928+
path = "../lib.rs"
2929+
"#,
2930+
)
2931+
.file("../lib.rs", "//! # depinfo-before")
2932+
.build();
2933+
2934+
p.cargo("doc -Zrustdoc-depinfo")
2935+
.masquerade_as_nightly_cargo(&["rustdoc-depinfo"])
2936+
.with_stderr_data(str![[r#"
2937+
[DOCUMENTING] foo v0.0.0 ([ROOT]/parent/foo)
2938+
[FINISHED] `dev` profile [unoptimized + debuginfo] target(s) in [ELAPSED]s
2939+
[GENERATED] [ROOT]/parent/foo/target/doc/foo/index.html
2940+
2941+
"#]])
2942+
.run();
2943+
2944+
let doc_html = p.read_file("target/doc/foo/index.html");
2945+
assert!(doc_html.contains("depinfo-before"));
2946+
2947+
p.change_file("../lib.rs", "//! # depinfo-after");
2948+
2949+
p.cargo("doc --verbose -Zrustdoc-depinfo")
2950+
.masquerade_as_nightly_cargo(&["rustdoc-depinfo"])
2951+
.with_stderr_data(str![[r#"
2952+
[FRESH] foo v0.0.0 ([ROOT]/parent/foo)
2953+
[FINISHED] `dev` profile [unoptimized + debuginfo] target(s) in [ELAPSED]s
2954+
[GENERATED] [ROOT]/parent/foo/target/doc/foo/index.html
2955+
2956+
"#]])
2957+
.run();
2958+
2959+
let doc_html = p.read_file("target/doc/foo/index.html");
2960+
assert!(!doc_html.contains("depinfo-after"));
2961+
}
2962+
2963+
#[cargo_test(nightly, reason = "`rustdoc --emit` is unstable")]
2964+
fn rebuild_tracks_include_str() {
2965+
let p = cargo_test_support::project_in("parent")
2966+
.file("Cargo.toml", &basic_lib_manifest("foo"))
2967+
.file("src/lib.rs", r#"#![doc = include_str!("../../README")]"#)
2968+
.file("../README", "# depinfo-before")
2969+
.build();
2970+
2971+
p.cargo("doc -Zrustdoc-depinfo")
2972+
.masquerade_as_nightly_cargo(&["rustdoc-depinfo"])
2973+
.with_stderr_data(str![[r#"
2974+
[DOCUMENTING] foo v0.5.0 ([ROOT]/parent/foo)
2975+
[FINISHED] `dev` profile [unoptimized + debuginfo] target(s) in [ELAPSED]s
2976+
[GENERATED] [ROOT]/parent/foo/target/doc/foo/index.html
2977+
2978+
"#]])
2979+
.run();
2980+
2981+
let doc_html = p.read_file("target/doc/foo/index.html");
2982+
assert!(doc_html.contains("depinfo-before"));
2983+
2984+
p.change_file("../README", "# depinfo-after");
2985+
2986+
p.cargo("doc --verbose -Zrustdoc-depinfo")
2987+
.masquerade_as_nightly_cargo(&["rustdoc-depinfo"])
2988+
.with_stderr_data(str![[r#"
2989+
[FRESH] foo v0.5.0 ([ROOT]/parent/foo)
2990+
[FINISHED] `dev` profile [unoptimized + debuginfo] target(s) in [ELAPSED]s
2991+
[GENERATED] [ROOT]/parent/foo/target/doc/foo/index.html
2992+
2993+
"#]])
2994+
.run();
2995+
2996+
let doc_html = p.read_file("target/doc/foo/index.html");
2997+
assert!(!doc_html.contains("depinfo-after"));
2998+
}
2999+
3000+
#[cargo_test(nightly, reason = "`rustdoc --emit` is unstable")]
3001+
fn rebuild_tracks_path_attr() {
3002+
let p = cargo_test_support::project_in("parent")
3003+
.file("Cargo.toml", &basic_lib_manifest("foo"))
3004+
.file("src/lib.rs", r#"#[path = "../../bar.rs"] pub mod bar;"#)
3005+
.file("../bar.rs", "//! # depinfo-before")
3006+
.build();
3007+
3008+
p.cargo("doc -Zrustdoc-depinfo")
3009+
.masquerade_as_nightly_cargo(&["rustdoc-depinfo"])
3010+
.with_stderr_data(str![[r#"
3011+
[DOCUMENTING] foo v0.5.0 ([ROOT]/parent/foo)
3012+
[FINISHED] `dev` profile [unoptimized + debuginfo] target(s) in [ELAPSED]s
3013+
[GENERATED] [ROOT]/parent/foo/target/doc/foo/index.html
3014+
3015+
"#]])
3016+
.run();
3017+
3018+
let doc_html = p.read_file("target/doc/foo/index.html");
3019+
assert!(doc_html.contains("depinfo-before"));
3020+
3021+
p.change_file("../bar.rs", "//! # depinfo-after");
3022+
3023+
p.cargo("doc --verbose -Zrustdoc-depinfo")
3024+
.masquerade_as_nightly_cargo(&["rustdoc-depinfo"])
3025+
.with_stderr_data(str![[r#"
3026+
[FRESH] foo v0.5.0 ([ROOT]/parent/foo)
3027+
[FINISHED] `dev` profile [unoptimized + debuginfo] target(s) in [ELAPSED]s
3028+
[GENERATED] [ROOT]/parent/foo/target/doc/foo/index.html
3029+
3030+
"#]])
3031+
.run();
3032+
3033+
let doc_html = p.read_file("target/doc/foo/index.html");
3034+
assert!(!doc_html.contains("depinfo-after"));
3035+
}
3036+
3037+
#[cargo_test(nightly, reason = "`rustdoc --emit` is unstable")]
3038+
fn rebuild_tracks_env() {
3039+
let env = "__RUSTDOC_INJECTED";
3040+
let p = project()
3041+
.file("Cargo.toml", &basic_lib_manifest("foo"))
3042+
.file("src/lib.rs", &format!(r#"#![doc = env!("{env}")]"#))
3043+
.build();
3044+
3045+
p.cargo("doc -Zrustdoc-depinfo")
3046+
.env(env, "# depinfo-before")
3047+
.masquerade_as_nightly_cargo(&["rustdoc-depinfo"])
3048+
.with_stderr_data(str![[r#"
3049+
[DOCUMENTING] foo v0.5.0 ([ROOT]/foo)
3050+
[FINISHED] `dev` profile [unoptimized + debuginfo] target(s) in [ELAPSED]s
3051+
[GENERATED] [ROOT]/foo/target/doc/foo/index.html
3052+
3053+
"#]])
3054+
.run();
3055+
3056+
let doc_html = p.read_file("target/doc/foo/index.html");
3057+
assert!(doc_html.contains("depinfo-before"));
3058+
3059+
p.cargo("doc --verbose -Zrustdoc-depinfo")
3060+
.env(env, "# depinfo-after")
3061+
.masquerade_as_nightly_cargo(&["rustdoc-depinfo"])
3062+
.with_stderr_data(str![[r#"
3063+
[FRESH] foo v0.5.0 ([ROOT]/foo)
3064+
[FINISHED] `dev` profile [unoptimized + debuginfo] target(s) in [ELAPSED]s
3065+
[GENERATED] [ROOT]/foo/target/doc/foo/index.html
3066+
3067+
"#]])
3068+
.run();
3069+
3070+
let doc_html = p.read_file("target/doc/foo/index.html");
3071+
assert!(!doc_html.contains("depinfo-after"));
3072+
}
3073+
3074+
#[cargo_test(nightly, reason = "`rustdoc --emit` is unstable")]
3075+
fn rebuild_tracks_env_in_dep() {
3076+
let env = "__RUSTDOC_INJECTED";
3077+
Package::new("bar", "0.1.0")
3078+
.file("src/lib.rs", &format!(r#"#![doc = env!("{env}")]"#))
3079+
.publish();
3080+
3081+
let env = "__RUSTDOC_INJECTED";
3082+
let p = project()
3083+
.file(
3084+
"Cargo.toml",
3085+
r#"
3086+
[package]
3087+
name = "foo"
3088+
edition = "2015"
3089+
[dependencies]
3090+
bar = "0.1.0"
3091+
"#,
3092+
)
3093+
.file("src/lib.rs", "")
3094+
.build();
3095+
3096+
p.cargo("doc -Zrustdoc-depinfo")
3097+
.env(env, "# depinfo-before")
3098+
.masquerade_as_nightly_cargo(&["rustdoc-depinfo"])
3099+
.with_stderr_data(
3100+
str![[r#"
3101+
[UPDATING] `dummy-registry` index
3102+
[LOCKING] 1 package to latest compatible version
3103+
[DOWNLOADING] crates ...
3104+
[DOWNLOADED] bar v0.1.0 (registry `dummy-registry`)
3105+
[CHECKING] bar v0.1.0
3106+
[DOCUMENTING] bar v0.1.0
3107+
[DOCUMENTING] foo v0.0.0 ([ROOT]/foo)
3108+
[FINISHED] `dev` profile [unoptimized + debuginfo] target(s) in [ELAPSED]s
3109+
[GENERATED] [ROOT]/foo/target/doc/foo/index.html
3110+
3111+
"#]]
3112+
.unordered(),
3113+
)
3114+
.run();
3115+
3116+
let doc_html = p.read_file("target/doc/bar/index.html");
3117+
assert!(doc_html.contains("depinfo-before"));
3118+
3119+
p.cargo("doc --verbose -Zrustdoc-depinfo")
3120+
.env(env, "# depinfo-after")
3121+
.masquerade_as_nightly_cargo(&["rustdoc-depinfo"])
3122+
.with_stderr_data(str![[r#"
3123+
[DIRTY] bar v0.1.0: the environment variable __RUSTDOC_INJECTED changed
3124+
[CHECKING] bar v0.1.0
3125+
[RUNNING] `rustc --crate-name bar [..]`
3126+
[DIRTY] foo v0.0.0 ([ROOT]/foo): the dependency bar was rebuilt
3127+
[DOCUMENTING] foo v0.0.0 ([ROOT]/foo)
3128+
[RUNNING] `rustdoc [..]--crate-name foo [..]`
3129+
[FINISHED] `dev` profile [unoptimized + debuginfo] target(s) in [ELAPSED]s
3130+
[GENERATED] [ROOT]/foo/target/doc/foo/index.html
3131+
3132+
"#]])
3133+
.run();
3134+
3135+
let doc_html = p.read_file("target/doc/bar/index.html");
3136+
assert!(!doc_html.contains("depinfo-after"));
3137+
}
3138+
3139+
#[cargo_test(
3140+
nightly,
3141+
reason = "`rustdoc --emit` is unstable; requires -Zchecksum-hash-algorithm"
3142+
)]
3143+
fn rebuild_tracks_checksum() {
3144+
let p = cargo_test_support::project_in("parent")
3145+
.file("Cargo.toml", &basic_lib_manifest("foo"))
3146+
.file("src/lib.rs", r#"#![doc = include_str!("../../README")]"#)
3147+
.file("../README", "# depinfo-before")
3148+
.build();
3149+
3150+
p.cargo("doc -Zrustdoc-depinfo -Zchecksum-freshness")
3151+
.masquerade_as_nightly_cargo(&["rustdoc-depinfo", "checksum-freshness"])
3152+
.with_stderr_data(str![[r#"
3153+
[DOCUMENTING] foo v0.5.0 ([ROOT]/parent/foo)
3154+
[FINISHED] `dev` profile [unoptimized + debuginfo] target(s) in [ELAPSED]s
3155+
[GENERATED] [ROOT]/parent/foo/target/doc/foo/index.html
3156+
3157+
"#]])
3158+
.run();
3159+
3160+
let doc_html = p.read_file("target/doc/foo/index.html");
3161+
assert!(doc_html.contains("depinfo-before"));
3162+
3163+
p.change_file("../README", "# depinfo-after");
3164+
// Change mtime into the future
3165+
p.root().move_into_the_future();
3166+
3167+
p.cargo("doc --verbose -Zrustdoc-depinfo -Zchecksum-freshness")
3168+
.masquerade_as_nightly_cargo(&["rustdoc-depinfo"])
3169+
.with_stderr_data(str![[r#"
3170+
[DIRTY] foo v0.5.0 ([ROOT]/parent/foo): the precalculated components changed
3171+
[DOCUMENTING] foo v0.5.0 ([ROOT]/parent/foo)
3172+
[RUNNING] `rustdoc [..]`
3173+
[FINISHED] `dev` profile [unoptimized + debuginfo] target(s) in [ELAPSED]s
3174+
[GENERATED] [ROOT]/parent/foo/target/doc/foo/index.html
3175+
3176+
"#]])
3177+
.run();
3178+
3179+
let doc_html = p.read_file("target/doc/foo/index.html");
3180+
assert!(doc_html.contains("depinfo-after"));
3181+
}

0 commit comments

Comments
 (0)