From d6d4a5a7c43bdfbcde7f01f5c98fcc0d42a5c83e Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Tue, 14 Aug 2018 00:34:57 +0200 Subject: [PATCH 1/2] Add doc ui tests --- .gitignore | 2 + src/bootstrap/builder.rs | 1 + src/bootstrap/test.rs | 41 +++ src/test/doc-ui/images/struct-syntax.png | Bin 0 -> 113499 bytes src/test/doc-ui/lib/lib.rs | 14 ++ src/test/doc-ui/struct-syntax.js | 13 + src/tools/doc-ui/package-lock.json | 305 +++++++++++++++++++++++ src/tools/doc-ui/script.js | 142 +++++++++++ src/tools/rustdoc-js/tester.js | 3 +- 9 files changed, 520 insertions(+), 1 deletion(-) create mode 100644 src/test/doc-ui/images/struct-syntax.png create mode 100644 src/test/doc-ui/lib/lib.rs create mode 100644 src/test/doc-ui/struct-syntax.js create mode 100644 src/tools/doc-ui/package-lock.json create mode 100644 src/tools/doc-ui/script.js diff --git a/.gitignore b/.gitignore index 9ffaa82e1c8b5..2a9084d1d9f49 100644 --- a/.gitignore +++ b/.gitignore @@ -109,3 +109,5 @@ version.texi no_llvm_build +**node_modules/ +**doc-ui/.lock diff --git a/src/bootstrap/builder.rs b/src/bootstrap/builder.rs index dc0b0aaf0bb3c..cf83fae4d75ba 100644 --- a/src/bootstrap/builder.rs +++ b/src/bootstrap/builder.rs @@ -421,6 +421,7 @@ impl<'a> Builder<'a> { test::Clippy, test::RustdocJS, test::RustdocTheme, + test::DocUI, // Run bootstrap close to the end as it's unlikely to fail test::Bootstrap, // Run run-make last, since these won't pass without make on Windows diff --git a/src/bootstrap/test.rs b/src/bootstrap/test.rs index c86010379f495..50b0fff06182f 100644 --- a/src/bootstrap/test.rs +++ b/src/bootstrap/test.rs @@ -584,6 +584,47 @@ impl Step for RustdocJS { } } +#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] +pub struct DocUI { + pub host: Interned, + pub target: Interned, +} + +impl Step for DocUI { + type Output = (); + const DEFAULT: bool = true; + const ONLY_HOSTS: bool = true; + + fn should_run(run: ShouldRun) -> ShouldRun { + run.path("src/test/doc-ui") + } + + fn make_run(run: RunConfig) { + run.builder.ensure(DocUI { + host: run.host, + target: run.target, + }); + } + + fn run(self, builder: &Builder) { + if let Some(ref nodejs) = builder.config.nodejs { + let mut command = Command::new(nodejs); + command.args(&["src/tools/doc-ui/script.js", + &*self.host, + &builder.top_stage.to_string()]); + builder.ensure(::doc::Std { + target: self.target, + stage: builder.top_stage, + }); + builder.run(&mut command); + } else { + builder.info(&format!( + "No nodejs found, skipping \"src/test/doc-ui\" tests" + )); + } + } +} + #[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] pub struct RustdocUi { pub host: Interned, diff --git a/src/test/doc-ui/images/struct-syntax.png b/src/test/doc-ui/images/struct-syntax.png new file mode 100644 index 0000000000000000000000000000000000000000..a7c59f5cc9e7f7fa06ebf4140765a00097008559 GIT binary patch literal 113499 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%0DM(UTh$sF>o~SZs~_<`A|KTv0$kde9ac8& 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 UJC)xh5 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub struct Foo { + pub damn: u32, + pub foo: Option, +} diff --git a/src/test/doc-ui/struct-syntax.js b/src/test/doc-ui/struct-syntax.js new file mode 100644 index 0000000000000..10b89194a6b5b --- /dev/null +++ b/src/test/doc-ui/struct-syntax.js @@ -0,0 +1,13 @@ +// Copyright 2018 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +var TEST = { + "path": "struct.Foo.html", +}; diff --git a/src/tools/doc-ui/package-lock.json b/src/tools/doc-ui/package-lock.json new file mode 100644 index 0000000000000..a7c543c3666f6 --- /dev/null +++ b/src/tools/doc-ui/package-lock.json @@ -0,0 +1,305 @@ +{ + "requires": true, + "lockfileVersion": 1, + "dependencies": { + "agent-base": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz", + "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==", + "requires": { + "es6-promisify": "^5.0.0" + } + }, + "async-limiter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", + "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "es6-promise": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.4.tgz", + "integrity": "sha512-/NdNZVJg+uZgtm9eS3O6lrOLYmQag2DjdEXuPaHlZ6RuVqgqaVZfgYCepEIKsLqwdQArOPtC3XzRLqGGfT8KQQ==" + }, + "es6-promisify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", + "requires": { + "es6-promise": "^4.0.3" + } + }, + "extract-zip": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.7.tgz", + "integrity": "sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k=", + "requires": { + "concat-stream": "1.6.2", + "debug": "2.6.9", + "mkdirp": "0.5.1", + "yauzl": "2.4.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + } + } + }, + "fd-slicer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", + "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", + "requires": { + "pend": "~1.2.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "https-proxy-agent": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz", + "integrity": "sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==", + "requires": { + "agent-base": "^4.1.0", + "debug": "^3.1.0" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "mime": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.3.1.tgz", + "integrity": "sha512-OEUllcVoydBHGN1z84yfQDimn58pZNNNXgZlHXSboxMlFvgI6MXSWpWKpFRra7H1HxpVhHTkrghfRW49k6yjeg==" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" + }, + "png-js": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/png-js/-/png-js-0.1.1.tgz", + "integrity": "sha1-HMfCEjA6yr50Jj7DrHgAlYAkLZM=" + }, + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" + }, + "progress": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz", + "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=" + }, + "proxy-from-env": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", + "integrity": "sha1-M8UDmPcOp+uW0h97gXYwpVeRx+4=" + }, + "puppeteer": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-1.7.0.tgz", + "integrity": "sha512-f+1DxKHPqce6CXUBz2eVO2WcATeVeQSOPG9GYaGObEZDCiCEUwG+gogjMsrvn7he2wHTqNVb5p6RUrwmr8XFBA==", + "requires": { + "debug": "^3.1.0", + "extract-zip": "^1.6.6", + "https-proxy-agent": "^2.2.1", + "mime": "^2.0.3", + "progress": "^2.0.0", + "proxy-from-env": "^1.0.0", + "rimraf": "^2.6.1", + "ws": "^5.1.1" + } + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "rimraf": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "requires": { + "glob": "^7.0.5" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "ws": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", + "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", + "requires": { + "async-limiter": "~1.0.0" + } + }, + "yauzl": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz", + "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=", + "requires": { + "fd-slicer": "~1.0.1" + } + } + } +} diff --git a/src/tools/doc-ui/script.js b/src/tools/doc-ui/script.js new file mode 100644 index 0000000000000..e4f3ce23a4c0b --- /dev/null +++ b/src/tools/doc-ui/script.js @@ -0,0 +1,142 @@ +// Copyright 2018 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +const puppeteer = require('puppeteer'); +const fs = require('fs'); +const execFileSync = require('child_process').execFileSync; +const PNG = require('png-js'); + +const TEST_FOLDER = 'src/test/doc-ui/'; + + +function loadContent(content) { + var Module = module.constructor; + var m = new Module(); + m._compile(content, "tmp.js"); + return m.exports; +} + +function readFile(filePath) { + return fs.readFileSync(filePath, 'utf8'); +} + +function comparePixels(img1, img2) { + return img1.equals(img2); +} + +function main(argv) { + /*if (argv.length !== 4) { + console.error("Expected 2 arguments, received " + (argv.length - 2) + ":"); + console.error(" - first argument : toolchain to check as argument (for example " + + "'x86_64-apple-darwin')"); + console.error(" - second argument: browser path (chrome or chromium)"); + process.exitCode = 1; // exiting + }*/ + var toolchain = argv[2]; + var stage = argv[3]; + + if (stage != "0" && stage != "1" && stage != "2") { + console.error("second argument (stage) should be either '0', '1' or '2'"); + process.exitCode = 1; // exiting + } + + var browserPath = undefined; + + if (argv.length > 4) { + browserPath = argv[4]; + try { + fs.accessSync(browserPath, fs.constants.X_OK); + } catch (err) { + console.error('"' + browserPath + '" is not executable! Aborting.'); + process.exitCode = 2; // exiting + } + } + + var outPath = "build/" + toolchain + "/stage" + stage; + execFileSync(outPath + "/bin/rustdoc", + ["src/test/doc-ui/lib/lib.rs", "-o", outPath + "/doc-ui"], {}, + function(error, stdout, stderr) { + if (error) { + console.error(error); + process.exitCode = 1; // exiting + } + }); + + var imageFolder = outPath + "/doc-ui/images/"; + fs.mkdir(imageFolder, function() {}); + + console.log("=> Starting doc-ui tests..."); + + var loaded = []; + var failures = 0; + var output = []; + fs.readdirSync(TEST_FOLDER).forEach(function(file) { + var fullPath = TEST_FOLDER + file; + if (file.endsWith(".js") && fs.lstatSync(fullPath).isFile()) { + var content = readFile(fullPath) + 'exports.TEST = TEST;'; + loaded.push([file, loadContent(content).TEST]); + } + }); + + puppeteer.launch({executablePath: browserPath}).then(async browser => { + var docPath = 'file://' + process.cwd() + '/' + outPath + '/doc-ui/lib/'; + for (var i = 0; i < loaded.length; ++i) { + process.stdout.write(loaded[i][0] + "... "); + try { + if (!('path' in loaded[i][1])) { + failures += 1; + console.log('FAILED (missing "path" key from test file)'); + continue; + } + if (typeof loaded[i][1]['path'] !== "string" || loaded[i][1]['path'].length < 1) { + failures += 1; + console.log('FAILED (invalid "path" key from test file)'); + continue; + } + const page = await browser.newPage(); + await page.goto(docPath + loaded[i][1]['path']); + await page.waitFor(5000); + var newImage = imageFolder + loaded[i][0].replace(".js", ".png"); + await page.screenshot({ + path: newImage, + fullPage: true, + }); + var originalImage = TEST_FOLDER + "images/" + loaded[i][0].replace(".js", ".png"); + if (fs.existsSync(originalImage) === false) { + console.log('ignored ("' + originalImage + '" not found)'); + continue; + } + if (comparePixels(PNG.load(newImage).imgData, + PNG.load(originalImage).imgData) === false) { + failures += 1; + console.log('FAILED (images "' + newImage + '" and "' + originalImage + + '" are different)'); + continue; + } + } catch (err) { + failures += 1; + console.log("FAILED"); + output.push(loaded[i][0] + " output:\n" + err + '\n'); + continue; + } + console.log("ok"); + } + if (failures > 0) { + console.log("\n=== ERROR OUTPUT ===\n"); + console.log(output.join("\n")); + } + await browser.close(); + console.log("<= doc-ui tests done: " + (loaded.length - failures) + " succeeded, " + + failures + " failed"); + process.exitCode = failures; // exiting + }); +} + +main(process.argv); diff --git a/src/tools/rustdoc-js/tester.js b/src/tools/rustdoc-js/tester.js index c8ce4cf8bb5be..f693570c90805 100644 --- a/src/tools/rustdoc-js/tester.js +++ b/src/tools/rustdoc-js/tester.js @@ -216,7 +216,8 @@ function lookForEntry(entry, data) { function main(argv) { if (argv.length !== 3) { - console.error("Expected toolchain to check as argument (for example 'x86_64-apple-darwin'"); + console.error("Expected toolchain to check as argument (for example " + + "'x86_64-apple-darwin')"); return 1; } var toolchain = argv[2]; From 7e61e9cd89730f7a5d9f199791cb9034da55b412 Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Sun, 26 Aug 2018 16:54:55 +0200 Subject: [PATCH 2/2] Check if puppeteer is installed before launching tests --- src/bootstrap/test.rs | 41 ++++++++++++++++++++++++++++++++--------- 1 file changed, 32 insertions(+), 9 deletions(-) diff --git a/src/bootstrap/test.rs b/src/bootstrap/test.rs index 50b0fff06182f..8cbee8833765c 100644 --- a/src/bootstrap/test.rs +++ b/src/bootstrap/test.rs @@ -608,15 +608,38 @@ impl Step for DocUI { fn run(self, builder: &Builder) { if let Some(ref nodejs) = builder.config.nodejs { - let mut command = Command::new(nodejs); - command.args(&["src/tools/doc-ui/script.js", - &*self.host, - &builder.top_stage.to_string()]); - builder.ensure(::doc::Std { - target: self.target, - stage: builder.top_stage, - }); - builder.run(&mut command); + let mut found_puppeteer = false; + // Check if puppeteer is installed locally. + if let Ok(output) = Command::new("npm") + .args(&["ls", "puppeteer", "puppeteer-core"]) + .current_dir("src/tools/doc-ui") + .output() { + found_puppeteer = String::from_utf8_lossy(&output.stdout).contains("puppeteer"); + } + if !found_puppeteer { + // Check if puppeteer is installed "globally". + if let Ok(output) = Command::new("npm") + .args(&["ls", "-g", "puppeteer", "puppeteer-core"]) + .output() { + found_puppeteer = String::from_utf8_lossy(&output.stdout).contains("puppeteer"); + } + } + if !found_puppeteer { + let mut command = Command::new(nodejs); + command.args(&["src/tools/doc-ui/script.js", + &*self.host, + &builder.top_stage.to_string()]); + builder.ensure(::doc::Std { + target: self.target, + stage: builder.top_stage, + }); + builder.run(&mut command); + } else { + builder.info(&format!( + "No puppeteer found (maybe try installing it with `npm install puppeteer`?), \ + skipping \"src/test/doc-ui\" tests" + )); + } } else { builder.info(&format!( "No nodejs found, skipping \"src/test/doc-ui\" tests"