Skip to content

Commit 405d950

Browse files
Move rustdoc-js testing into compiletest
1 parent 240fad0 commit 405d950

File tree

4 files changed

+42
-53
lines changed

4 files changed

+42
-53
lines changed

src/bootstrap/test.rs

+13-49
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
//! our CI.
55
66
use std::env;
7-
use std::ffi::{OsStr, OsString};
7+
use std::ffi::OsString;
88
use std::fmt;
99
use std::fs;
1010
use std::iter;
@@ -638,52 +638,15 @@ impl Step for RustdocJSNotStd {
638638
}
639639

640640
fn run(self, builder: &Builder<'_>) {
641-
if let Some(ref nodejs) = builder.config.nodejs {
642-
builder.ensure(crate::doc::Std {
641+
if builder.config.nodejs.is_some() {
642+
builder.ensure(Compiletest {
643+
compiler: self.compiler,
643644
target: self.target,
644-
stage: builder.top_stage,
645+
mode: "js-doc-test",
646+
suite: "rustdoc-js",
647+
path: None,
648+
compare_mode: None,
645649
});
646-
647-
let mut tests_to_run = Vec::new();
648-
let out = Path::new("build").join(&*self.host)
649-
.join(&format!("stage{}",
650-
builder.top_stage.to_string().as_str()))
651-
.join("tests")
652-
.join("rustdoc-js");
653-
654-
if let Ok(it) = fs::read_dir("src/test/rustdoc-js/") {
655-
for entry in it {
656-
if let Ok(entry) = entry {
657-
let path = entry.path();
658-
if path.extension() != Some(&OsStr::new("rs")) || !path.is_file() {
659-
continue
660-
}
661-
let path_clone = path.clone();
662-
let file_stem = path_clone.file_stem().expect("cannot get file stem");
663-
let out = out.join(file_stem);
664-
let mut cmd = builder.rustdoc_cmd(self.host);
665-
cmd.arg("-o");
666-
cmd.arg(out);
667-
cmd.arg(path);
668-
if if builder.config.verbose_tests {
669-
try_run(builder, &mut cmd)
670-
} else {
671-
try_run_quiet(builder, &mut cmd)
672-
} {
673-
tests_to_run.push(file_stem.to_os_string());
674-
}
675-
}
676-
}
677-
}
678-
assert!(!tests_to_run.is_empty(), "no rustdoc-js test generated...");
679-
680-
tests_to_run.insert(0, "src/tools/rustdoc-js/tester.js".into());
681-
tests_to_run.insert(1, out.into());
682-
683-
let mut command = Command::new(nodejs);
684-
command.args(&tests_to_run);
685-
686-
builder.run(&mut command);
687650
} else {
688651
builder.info(
689652
"No nodejs found, skipping \"src/test/rustdoc-js\" tests"
@@ -1070,12 +1033,13 @@ impl Step for Compiletest {
10701033
.arg(builder.sysroot_libdir(compiler, target));
10711034
cmd.arg("--rustc-path").arg(builder.rustc(compiler));
10721035

1073-
let is_rustdoc_ui = suite.ends_with("rustdoc-ui");
1036+
let is_rustdoc = suite.ends_with("rustdoc-ui") || suite.ends_with("rustdoc-js");
10741037

10751038
// Avoid depending on rustdoc when we don't need it.
10761039
if mode == "rustdoc"
10771040
|| (mode == "run-make" && suite.ends_with("fulldeps"))
1078-
|| (mode == "ui" && is_rustdoc_ui)
1041+
|| (mode == "ui" && is_rustdoc)
1042+
|| mode == "js-doc-test"
10791043
{
10801044
cmd.arg("--rustdoc-path")
10811045
.arg(builder.rustdoc(compiler.host));
@@ -1109,12 +1073,12 @@ impl Step for Compiletest {
11091073
cmd.arg("--nodejs").arg(nodejs);
11101074
}
11111075

1112-
let mut flags = if is_rustdoc_ui {
1076+
let mut flags = if is_rustdoc {
11131077
Vec::new()
11141078
} else {
11151079
vec!["-Crpath".to_string()]
11161080
};
1117-
if !is_rustdoc_ui {
1081+
if !is_rustdoc {
11181082
if builder.config.rust_optimize_tests {
11191083
flags.push("-O".to_string());
11201084
}

src/test/rustdoc-js/basic.rs

+1
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1+
/// Foo
12
pub struct Foo;

src/tools/compiletest/src/common.rs

+3
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ pub enum Mode {
2424
Incremental,
2525
RunMake,
2626
Ui,
27+
JsDocTest,
2728
MirOpt,
2829
}
2930

@@ -59,6 +60,7 @@ impl FromStr for Mode {
5960
"incremental" => Ok(Incremental),
6061
"run-make" => Ok(RunMake),
6162
"ui" => Ok(Ui),
63+
"js-doc-test" => Ok(JsDocTest),
6264
"mir-opt" => Ok(MirOpt),
6365
_ => Err(()),
6466
}
@@ -82,6 +84,7 @@ impl fmt::Display for Mode {
8284
Incremental => "incremental",
8385
RunMake => "run-make",
8486
Ui => "ui",
87+
JsDocTest => "js-doc-test",
8588
MirOpt => "mir-opt",
8689
};
8790
fmt::Display::fmt(s, f)

src/tools/compiletest/src/runtest.rs

+25-4
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use crate::common::{output_base_dir, output_base_name, output_testname_unique};
44
use crate::common::{Codegen, CodegenUnits, DebugInfoBoth, DebugInfoGdb, DebugInfoLldb, Rustdoc};
55
use crate::common::{CompileFail, Pretty, RunFail, RunPass, RunPassValgrind};
66
use crate::common::{Config, TestPaths};
7-
use crate::common::{Incremental, MirOpt, RunMake, Ui};
7+
use crate::common::{Incremental, MirOpt, RunMake, Ui, JsDocTest};
88
use diff;
99
use crate::errors::{self, Error, ErrorKind};
1010
use filetime::FileTime;
@@ -275,6 +275,7 @@ impl<'test> TestCx<'test> {
275275
RunMake => self.run_rmake_test(),
276276
RunPass | Ui => self.run_ui_test(),
277277
MirOpt => self.run_mir_opt_test(),
278+
JsDocTest => self.run_js_doc_test(),
278279
}
279280
}
280281

@@ -290,7 +291,7 @@ impl<'test> TestCx<'test> {
290291
fn should_compile_successfully(&self) -> bool {
291292
match self.config.mode {
292293
CompileFail => self.props.compile_pass,
293-
RunPass => true,
294+
RunPass | JsDocTest => true,
294295
Ui => self.props.compile_pass,
295296
Incremental => {
296297
let revision = self.revision
@@ -1712,7 +1713,8 @@ impl<'test> TestCx<'test> {
17121713
}
17131714

17141715
fn make_compile_args(&self, input_file: &Path, output_file: TargetLocation) -> Command {
1715-
let is_rustdoc = self.config.src_base.ends_with("rustdoc-ui");
1716+
let is_rustdoc = self.config.src_base.ends_with("rustdoc-ui") ||
1717+
self.config.src_base.ends_with("rustdoc-js");
17161718
let mut rustc = if !is_rustdoc {
17171719
Command::new(&self.config.rustc_path)
17181720
} else {
@@ -1802,7 +1804,7 @@ impl<'test> TestCx<'test> {
18021804
rustc.arg(dir_opt);
18031805
}
18041806
RunFail | RunPassValgrind | Pretty | DebugInfoBoth | DebugInfoGdb | DebugInfoLldb
1805-
| Codegen | Rustdoc | RunMake | CodegenUnits => {
1807+
| Codegen | Rustdoc | RunMake | CodegenUnits | JsDocTest => {
18061808
// do not use JSON output
18071809
}
18081810
}
@@ -2710,6 +2712,25 @@ impl<'test> TestCx<'test> {
27102712
fs::remove_dir(path)
27112713
}
27122714

2715+
fn run_js_doc_test(&self) {
2716+
if let Some(nodejs) = &self.config.nodejs {
2717+
let out_dir = self.output_base_dir();
2718+
2719+
self.document(&out_dir);
2720+
2721+
let root = self.config.find_rust_src_root().unwrap();
2722+
let res = self.cmd2procres(
2723+
Command::new(&nodejs)
2724+
.arg(root.join("src/tools/rustdoc-js/tester.js"))
2725+
.arg(out_dir.parent().expect("no parent"))
2726+
.arg(&self.testpaths.file.file_stem().expect("couldn't get file stem")),
2727+
);
2728+
if !res.status.success() {
2729+
self.fatal_proc_rec("rustdoc-js test failed!", &res);
2730+
}
2731+
}
2732+
}
2733+
27132734
fn run_ui_test(&self) {
27142735
// if the user specified a format in the ui test
27152736
// print the output to the stderr file, otherwise extract

0 commit comments

Comments
 (0)