]> git.lizzy.rs Git - rust.git/blob - src/tools/rustdoc-gui/tester.js
Don't stop running rustdoc-gui tests at first failure
[rust.git] / src / tools / rustdoc-gui / tester.js
1 // This package needs to be install:
2 //
3 // ```
4 // npm install browser-ui-test
5 // ```
6 const fs = require("fs");
7 const path = require("path");
8 const {Options, runTest} = require('browser-ui-test');
9
10 function showHelp() {
11     console.log("rustdoc-js options:");
12     console.log("  --doc-folder [PATH]        : location of the generated doc folder");
13     console.log("  --help                     : show this message then quit");
14     console.log("  --tests-folder [PATH]      : location of the .GOML tests folder");
15 }
16
17 function parseOptions(args) {
18     var opts = {
19         "doc_folder": "",
20         "tests_folder": "",
21     };
22     var correspondances = {
23         "--doc-folder": "doc_folder",
24         "--tests-folder": "tests_folder",
25     };
26
27     for (var i = 0; i < args.length; ++i) {
28         if (args[i] === "--doc-folder"
29             || args[i] === "--tests-folder") {
30             i += 1;
31             if (i >= args.length) {
32                 console.log("Missing argument after `" + args[i - 1] + "` option.");
33                 return null;
34             }
35             opts[correspondances[args[i - 1]]] = args[i];
36         } else if (args[i] === "--help") {
37             showHelp();
38             process.exit(0);
39         } else {
40             console.log("Unknown option `" + args[i] + "`.");
41             console.log("Use `--help` to see the list of options");
42             return null;
43         }
44     }
45     if (opts["tests_folder"].length < 1) {
46         console.log("Missing `--tests-folder` option.");
47     } else if (opts["doc_folder"].length < 1) {
48         console.log("Missing `--doc-folder` option.");
49     } else {
50         return opts;
51     }
52     return null;
53 }
54
55 async function main(argv) {
56     let opts = parseOptions(argv.slice(2));
57     if (opts === null) {
58         process.exit(1);
59     }
60
61     const options = new Options();
62     try {
63         // This is more convenient that setting fields one by one.
64         options.parseArguments([
65             "--no-screenshot",
66             "--variable", "DOC_PATH", opts["doc_folder"],
67         ]);
68     } catch (error) {
69         console.error(`invalid argument: ${error}`);
70         process.exit(1);
71     }
72
73     let failed = false;
74     let files = fs.readdirSync(opts["tests_folder"]).filter(file => path.extname(file) == ".goml");
75
76     files.sort();
77     for (var i = 0; i < files.length; ++i) {
78         const testPath = path.join(opts["tests_folder"], files[i]);
79         await runTest(testPath, options).then(out => {
80             const [output, nb_failures] = out;
81             console.log(output);
82             if (nb_failures > 0) {
83                 failed = true;
84             }
85         }).catch(err => {
86             console.error(err);
87             failed = true;
88         });
89     }
90     if (failed) {
91         process.exit(1);
92     }
93 }
94
95 main(process.argv);