about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorGuillaume Gomez <guillaume1.gomez@gmail.com>2019-02-24 01:04:07 +0100
committerGuillaume Gomez <guillaume1.gomez@gmail.com>2019-02-25 17:46:06 +0100
commitbe23cd9a2d32295240e265aa2ed38bace71aca65 (patch)
tree3d6c330b06f9885405c261087c1fe7d269b031f5 /src
parentaa3ca321e92c541dce363634c9cea7cf23689a5e (diff)
downloadrust-be23cd9a2d32295240e265aa2ed38bace71aca65.tar.gz
rust-be23cd9a2d32295240e265aa2ed38bace71aca65.zip
Move documentation build into bootstrap
Diffstat (limited to 'src')
-rw-r--r--src/bootstrap/test.rs46
-rw-r--r--src/tools/rustdoc-js/tester.js58
2 files changed, 58 insertions, 46 deletions
diff --git a/src/bootstrap/test.rs b/src/bootstrap/test.rs
index c724d75c2dc..83066468cd4 100644
--- a/src/bootstrap/test.rs
+++ b/src/bootstrap/test.rs
@@ -4,7 +4,7 @@
 //! our CI.
 
 use std::env;
-use std::ffi::OsString;
+use std::ffi::{OsStr, OsString};
 use std::fmt;
 use std::fs;
 use std::iter;
@@ -639,14 +639,50 @@ impl Step for RustdocJSNotStd {
 
     fn run(self, builder: &Builder) {
         if let Some(ref nodejs) = builder.config.nodejs {
-            let mut command = Command::new(nodejs);
-            command.args(&["src/tools/rustdoc-js/tester.js",
-                           &*self.host,
-                           builder.top_stage.to_string().as_str()]);
             builder.ensure(crate::doc::Std {
                 target: self.target,
                 stage: builder.top_stage,
             });
+
+            let mut tests_to_run = Vec::new();
+            let out = Path::new("build").join(&*self.host)
+                                        .join(&format!("stage{}",
+                                                       builder.top_stage.to_string().as_str()))
+                                        .join("tests")
+                                        .join("rustdoc-js");
+
+            if let Ok(it) = fs::read_dir("src/test/rustdoc-js/") {
+                for entry in it {
+                    if let Ok(entry) = entry {
+                        let path = entry.path();
+                        if path.extension() != Some(&OsStr::new("rs")) || !path.is_file() {
+                            continue
+                        }
+                        let path_clone = path.clone();
+                        let file_stem = path_clone.file_stem().expect("cannot get file stem");
+                        let out = out.join(file_stem);
+                        let mut cmd = builder.rustdoc_cmd(self.host);
+                        cmd.arg("-o");
+                        cmd.arg(out);
+                        cmd.arg(path);
+                        if if builder.config.verbose_tests {
+                            try_run(builder, &mut cmd)
+                        } else {
+                            try_run_quiet(builder, &mut cmd)
+                        } {
+                            tests_to_run.push(file_stem.to_os_string());
+                        }
+                    }
+                }
+            }
+            assert!(!tests_to_run.is_empty(), "no rustdoc-js test generated...");
+
+            tests_to_run.insert(0, "src/tools/rustdoc-js/tester.js".into());
+            tests_to_run.insert(1, out.into());
+
+            let mut command = Command::new(nodejs);
+            command.args(&tests_to_run);
+
             builder.run(&mut command);
         } else {
             builder.info(
diff --git a/src/tools/rustdoc-js/tester.js b/src/tools/rustdoc-js/tester.js
index f7c15eaf1b0..833ce5d1370 100644
--- a/src/tools/rustdoc-js/tester.js
+++ b/src/tools/rustdoc-js/tester.js
@@ -220,18 +220,6 @@ function lookForEntry(entry, data) {
     return null;
 }
 
-function build_docs(out_dir, rustdoc_path, file_to_document) {
-    var c = spawnSync(rustdoc_path, [file_to_document, '-o', out_dir]);
-    var s = '';
-    if (c.error || c.stderr.length > 0) {
-        if (c.stderr.length > 0) {
-            s += '==> STDERR: ' + c.stderr + '\n';
-        }
-        s += '==> ERROR: ' + c.error;
-    }
-    return s;
-}
-
 function load_files(out_folder, crate) {
     var mainJs = readFile(out_folder + "/main.js");
     var ALIASES = readFile(out_folder + "/aliases.js");
@@ -266,44 +254,32 @@ function load_files(out_folder, crate) {
 }
 
 function main(argv) {
-    if (argv.length !== 4) {
-        console.error("USAGE: node tester.js [TOOLCHAIN] [STAGE]");
+    if (argv.length < 4) {
+        console.error("USAGE: node tester.js OUT_FOLDER [TESTS]");
         return 1;
     }
-    const toolchain = argv[2];
-    const stage = argv[3];
-    const rustdoc_path = './build/' + toolchain + '/stage' + stage + '/bin/rustdoc';
+    if (argv[2].substr(-1) !== "/") {
+        argv[2] += "/";
+    }
+    const out_folder = argv[2];
 
     var errors = 0;
 
-    fs.readdirSync(TEST_FOLDER).forEach(function(file) {
-        if (!file.endsWith('.js')) {
-            return;
-        }
-        var test_name = file.substring(0, file.length - 3);
-        process.stdout.write('Checking "' + test_name + '" ... ');
-        var rust_file = TEST_FOLDER + test_name + '.rs';
+    for (var j = 3; j < argv.length; ++j) {
+        const test_name = argv[j];
 
-        if (!fs.existsSync(rust_file)) {
-            console.error("FAILED");
-            console.error("==> Missing '" + test_name + ".rs' file...");
+        process.stdout.write('Checking "' + test_name + '" ... ');
+        if (!fs.existsSync(TEST_FOLDER + test_name + ".js")) {
             errors += 1;
-            return;
-        }
-
-        var out_folder = "build/" + toolchain + "/stage" + stage + "/tests/rustdoc-js/" +
-                         test_name;
-
-        var ret = build_docs(out_folder, rustdoc_path, rust_file);
-        if (ret.length > 0) {
             console.error("FAILED");
-            console.error(ret);
-            errors += 1;
-            return;
+            console.error("==> Missing '" + test_name + ".js' file...");
+            continue;
         }
 
-        var [loaded, index] = load_files(out_folder, test_name);
-        var loadedFile = loadContent(readFile(TEST_FOLDER + file) +
+        const test_out_folder = out_folder + test_name;
+
+        var [loaded, index] = load_files(test_out_folder, test_name);
+        var loadedFile = loadContent(readFile(TEST_FOLDER + test_name + ".js") +
                                'exports.QUERY = QUERY;exports.EXPECTED = EXPECTED;');
         const expected = loadedFile.EXPECTED;
         const query = loadedFile.QUERY;
@@ -351,7 +327,7 @@ function main(argv) {
         } else {
             console.log("OK");
         }
-    });
+    }
     return errors;
 }