Skip to content

Commit 8f08156

Browse files
committed
compiletest: Isolate APIs used by rustdoc-gui-test
1 parent b6f0945 commit 8f08156

File tree

6 files changed

+146
-114
lines changed

6 files changed

+146
-114
lines changed

Cargo.lock

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4805,7 +4805,6 @@ name = "rustdoc-gui-test"
48054805
version = "0.1.0"
48064806
dependencies = [
48074807
"build_helper",
4808-
"camino",
48094808
"compiletest",
48104809
"getopts",
48114810
"walkdir",

src/tools/compiletest/src/common.rs

Lines changed: 0 additions & 104 deletions
Original file line numberDiff line numberDiff line change
@@ -686,110 +686,6 @@ pub struct Config {
686686
}
687687

688688
impl Config {
689-
/// Incomplete config intended for `src/tools/rustdoc-gui-test` **only** as
690-
/// `src/tools/rustdoc-gui-test` wants to reuse `compiletest`'s directive -> test property
691-
/// handling for `//@ {compile,run}-flags`, do not use for any other purpose.
692-
///
693-
/// FIXME(#143827): this setup feels very hacky. It so happens that `tests/rustdoc-gui/`
694-
/// **only** uses `//@ {compile,run}-flags` for now and not any directives that actually rely on
695-
/// info that is assumed available in a fully populated [`Config`].
696-
pub fn incomplete_for_rustdoc_gui_test() -> Config {
697-
// FIXME(#143827): spelling this out intentionally, because this is questionable.
698-
//
699-
// For instance, `//@ ignore-stage1` will not work at all.
700-
Config {
701-
mode: TestMode::Rustdoc,
702-
// E.g. this has no sensible default tbh.
703-
suite: TestSuite::Ui,
704-
705-
// Dummy values.
706-
edition: Default::default(),
707-
bless: Default::default(),
708-
fail_fast: Default::default(),
709-
compile_lib_path: Utf8PathBuf::default(),
710-
run_lib_path: Utf8PathBuf::default(),
711-
rustc_path: Utf8PathBuf::default(),
712-
cargo_path: Default::default(),
713-
stage0_rustc_path: Default::default(),
714-
query_rustc_path: Default::default(),
715-
rustdoc_path: Default::default(),
716-
coverage_dump_path: Default::default(),
717-
python: Default::default(),
718-
jsondocck_path: Default::default(),
719-
jsondoclint_path: Default::default(),
720-
llvm_filecheck: Default::default(),
721-
llvm_bin_dir: Default::default(),
722-
run_clang_based_tests_with: Default::default(),
723-
src_root: Utf8PathBuf::default(),
724-
src_test_suite_root: Utf8PathBuf::default(),
725-
build_root: Utf8PathBuf::default(),
726-
build_test_suite_root: Utf8PathBuf::default(),
727-
sysroot_base: Utf8PathBuf::default(),
728-
stage: Default::default(),
729-
stage_id: String::default(),
730-
debugger: Default::default(),
731-
run_ignored: Default::default(),
732-
with_rustc_debug_assertions: Default::default(),
733-
with_std_debug_assertions: Default::default(),
734-
filters: Default::default(),
735-
skip: Default::default(),
736-
filter_exact: Default::default(),
737-
force_pass_mode: Default::default(),
738-
run: Default::default(),
739-
runner: Default::default(),
740-
host_rustcflags: Default::default(),
741-
target_rustcflags: Default::default(),
742-
rust_randomized_layout: Default::default(),
743-
optimize_tests: Default::default(),
744-
target: Default::default(),
745-
host: Default::default(),
746-
cdb: Default::default(),
747-
cdb_version: Default::default(),
748-
gdb: Default::default(),
749-
gdb_version: Default::default(),
750-
lldb_version: Default::default(),
751-
llvm_version: Default::default(),
752-
system_llvm: Default::default(),
753-
android_cross_path: Default::default(),
754-
adb_path: Default::default(),
755-
adb_test_dir: Default::default(),
756-
adb_device_status: Default::default(),
757-
lldb_python_dir: Default::default(),
758-
verbose: Default::default(),
759-
color: Default::default(),
760-
remote_test_client: Default::default(),
761-
compare_mode: Default::default(),
762-
rustfix_coverage: Default::default(),
763-
has_html_tidy: Default::default(),
764-
has_enzyme: Default::default(),
765-
channel: Default::default(),
766-
git_hash: Default::default(),
767-
cc: Default::default(),
768-
cxx: Default::default(),
769-
cflags: Default::default(),
770-
cxxflags: Default::default(),
771-
ar: Default::default(),
772-
target_linker: Default::default(),
773-
host_linker: Default::default(),
774-
llvm_components: Default::default(),
775-
nodejs: Default::default(),
776-
npm: Default::default(),
777-
force_rerun: Default::default(),
778-
only_modified: Default::default(),
779-
target_cfgs: Default::default(),
780-
builtin_cfg_names: Default::default(),
781-
supported_crate_types: Default::default(),
782-
nocapture: Default::default(),
783-
nightly_branch: Default::default(),
784-
git_merge_commit_email: Default::default(),
785-
profiler_runtime: Default::default(),
786-
diff_command: Default::default(),
787-
minicore_path: Default::default(),
788-
default_codegen_backend: CodegenBackend::Llvm,
789-
override_codegen_backend: None,
790-
}
791-
}
792-
793689
/// FIXME: this run scheme is... confusing.
794690
pub fn run_enabled(&self) -> bool {
795691
self.run.unwrap_or_else(|| {

src/tools/compiletest/src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ mod panic_hook;
1616
mod raise_fd_limit;
1717
mod read2;
1818
pub mod runtest;
19+
pub mod rustdoc_gui_test;
1920
pub mod util;
2021

2122
use core::panic;
Lines changed: 143 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,143 @@
1+
//! This module isolates the compiletest APIs used by the rustdoc-gui-test tool.
2+
//!
3+
//! Thanks to this isolation layer, changes to compiletest directive parsing
4+
//! might require changes to the items in this module, but shouldn't require
5+
//! changes to rustdoc-gui-test itself.
6+
//!
7+
//! The current relationship between compiletest and rustdoc-gui-test is
8+
//! awkward. Ideally, rustdoc-gui-test should either split off its own
9+
//! directive parser and become fully independent, or be incorporated into
10+
//! compiletest as another test mode.
11+
//!
12+
//! See <https://github.com/rust-lang/rust/issues/143827> for more context.
13+
14+
use std::path::Path;
15+
16+
use camino::{Utf8Path, Utf8PathBuf};
17+
18+
use crate::common::{CodegenBackend, Config, TestMode, TestSuite};
19+
use crate::directives::TestProps;
20+
21+
/// Subset of compiletest directive values that are actually used by
22+
/// rustdoc-gui-test.
23+
#[derive(Debug)]
24+
pub struct RustdocGuiTestProps {
25+
pub compile_flags: Vec<String>,
26+
pub run_flags: Vec<String>,
27+
}
28+
29+
impl RustdocGuiTestProps {
30+
pub fn from_file(test_file_path: &Path) -> Self {
31+
let test_file_path = Utf8Path::from_path(test_file_path).unwrap();
32+
let config = incomplete_config_for_rustdoc_gui_test();
33+
34+
let props = TestProps::from_file(test_file_path, None, &config);
35+
36+
let TestProps { compile_flags, run_flags, .. } = props;
37+
Self { compile_flags, run_flags }
38+
}
39+
}
40+
41+
/// Incomplete config intended for `src/tools/rustdoc-gui-test` **only** as
42+
/// `src/tools/rustdoc-gui-test` wants to reuse `compiletest`'s directive -> test property
43+
/// handling for `//@ {compile,run}-flags`, do not use for any other purpose.
44+
///
45+
/// FIXME(#143827): this setup feels very hacky. It so happens that `tests/rustdoc-gui/`
46+
/// **only** uses `//@ {compile,run}-flags` for now and not any directives that actually rely on
47+
/// info that is assumed available in a fully populated [`Config`].
48+
fn incomplete_config_for_rustdoc_gui_test() -> Config {
49+
// FIXME(#143827): spelling this out intentionally, because this is questionable.
50+
//
51+
// For instance, `//@ ignore-stage1` will not work at all.
52+
Config {
53+
mode: TestMode::Rustdoc,
54+
// E.g. this has no sensible default tbh.
55+
suite: TestSuite::Ui,
56+
57+
// Dummy values.
58+
edition: Default::default(),
59+
bless: Default::default(),
60+
fail_fast: Default::default(),
61+
compile_lib_path: Utf8PathBuf::default(),
62+
run_lib_path: Utf8PathBuf::default(),
63+
rustc_path: Utf8PathBuf::default(),
64+
cargo_path: Default::default(),
65+
stage0_rustc_path: Default::default(),
66+
query_rustc_path: Default::default(),
67+
rustdoc_path: Default::default(),
68+
coverage_dump_path: Default::default(),
69+
python: Default::default(),
70+
jsondocck_path: Default::default(),
71+
jsondoclint_path: Default::default(),
72+
llvm_filecheck: Default::default(),
73+
llvm_bin_dir: Default::default(),
74+
run_clang_based_tests_with: Default::default(),
75+
src_root: Utf8PathBuf::default(),
76+
src_test_suite_root: Utf8PathBuf::default(),
77+
build_root: Utf8PathBuf::default(),
78+
build_test_suite_root: Utf8PathBuf::default(),
79+
sysroot_base: Utf8PathBuf::default(),
80+
stage: Default::default(),
81+
stage_id: String::default(),
82+
debugger: Default::default(),
83+
run_ignored: Default::default(),
84+
with_rustc_debug_assertions: Default::default(),
85+
with_std_debug_assertions: Default::default(),
86+
filters: Default::default(),
87+
skip: Default::default(),
88+
filter_exact: Default::default(),
89+
force_pass_mode: Default::default(),
90+
run: Default::default(),
91+
runner: Default::default(),
92+
host_rustcflags: Default::default(),
93+
target_rustcflags: Default::default(),
94+
rust_randomized_layout: Default::default(),
95+
optimize_tests: Default::default(),
96+
target: Default::default(),
97+
host: Default::default(),
98+
cdb: Default::default(),
99+
cdb_version: Default::default(),
100+
gdb: Default::default(),
101+
gdb_version: Default::default(),
102+
lldb_version: Default::default(),
103+
llvm_version: Default::default(),
104+
system_llvm: Default::default(),
105+
android_cross_path: Default::default(),
106+
adb_path: Default::default(),
107+
adb_test_dir: Default::default(),
108+
adb_device_status: Default::default(),
109+
lldb_python_dir: Default::default(),
110+
verbose: Default::default(),
111+
color: Default::default(),
112+
remote_test_client: Default::default(),
113+
compare_mode: Default::default(),
114+
rustfix_coverage: Default::default(),
115+
has_html_tidy: Default::default(),
116+
has_enzyme: Default::default(),
117+
channel: Default::default(),
118+
git_hash: Default::default(),
119+
cc: Default::default(),
120+
cxx: Default::default(),
121+
cflags: Default::default(),
122+
cxxflags: Default::default(),
123+
ar: Default::default(),
124+
target_linker: Default::default(),
125+
host_linker: Default::default(),
126+
llvm_components: Default::default(),
127+
nodejs: Default::default(),
128+
npm: Default::default(),
129+
force_rerun: Default::default(),
130+
only_modified: Default::default(),
131+
target_cfgs: Default::default(),
132+
builtin_cfg_names: Default::default(),
133+
supported_crate_types: Default::default(),
134+
nocapture: Default::default(),
135+
nightly_branch: Default::default(),
136+
git_merge_commit_email: Default::default(),
137+
profiler_runtime: Default::default(),
138+
diff_command: Default::default(),
139+
minicore_path: Default::default(),
140+
default_codegen_backend: CodegenBackend::Llvm,
141+
override_codegen_backend: None,
142+
}
143+
}

src/tools/rustdoc-gui-test/Cargo.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ edition = "2021"
55

66
[dependencies]
77
build_helper = { path = "../../build_helper" }
8-
camino = "1"
98
compiletest = { path = "../compiletest" }
109
getopts = "0.2"
1110
walkdir = "2"

src/tools/rustdoc-gui-test/src/main.rs

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use std::sync::Arc;
55

66
use build_helper::npm;
77
use build_helper::util::try_run;
8-
use compiletest::directives::TestProps;
8+
use compiletest::rustdoc_gui_test::RustdocGuiTestProps;
99
use config::Config;
1010

1111
mod config;
@@ -43,13 +43,7 @@ fn main() -> Result<(), ()> {
4343
.current_dir(path);
4444

4545
if let Some(librs) = find_librs(entry.path()) {
46-
let compiletest_c = compiletest::common::Config::incomplete_for_rustdoc_gui_test();
47-
48-
let test_props = TestProps::from_file(
49-
&camino::Utf8PathBuf::try_from(librs).unwrap(),
50-
None,
51-
&compiletest_c,
52-
);
46+
let test_props = RustdocGuiTestProps::from_file(&librs);
5347

5448
if !test_props.compile_flags.is_empty() {
5549
cargo.env("RUSTDOCFLAGS", test_props.compile_flags.join(" "));

0 commit comments

Comments
 (0)