about summary refs log tree commit diff
path: root/src/tools/rustdoc-js-std/tester.js
blob: 6f730b0fdbbaae5eec9982a9c995339e9e34221b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
const fs = require('fs');
const path = require('path');
const tools = require('../rustdoc-js-common/lib.js');


function findFile(dir, name, extension) {
    var entries = fs.readdirSync(dir);
    var matches = [];
    for (var i = 0; i < entries.length; ++i) {
        var entry = entries[i];
        var file_type = fs.statSync(dir + entry);
        if (file_type.isDirectory()) {
            continue;
        }
        if (entry.startsWith(name) && entry.endsWith(extension)) {
            var version = entry.slice(name.length, entry.length - extension.length);
            version = version.split(".").map(function(x) {
                return parseInt(x);
            });
            var total = 0;
            var mult = 1;
            for (var j = version.length - 1; j >= 0; --j) {
                total += version[j] * mult;
                mult *= 1000;
            }
            matches.push([entry, total]);
        }
    }
    if (matches.length === 0) {
        return null;
    }
    // We make a reverse sort to have the "highest" file. Very useful in case you didn't clean up
    // you std doc folder...
    matches.sort(function(a, b) {
        return b[1] - a[1];
    });
    return matches[0][0];
}

function readFileMatching(dir, name, extension) {
    if (dir.endsWith("/") === false) {
        dir += "/";
    }
    var f = findFile(dir, name, extension);
    if (f === null) {
        return "";
    }
    return tools.readFile(dir + f);
}

function main(argv) {
    if (argv.length !== 4) {
        console.error("USAGE: node tester.js STD_DOCS TEST_FOLDER");
        return 1;
    }
    var std_docs = argv[2];
    var test_folder = argv[3];

    var mainJs = readFileMatching(std_docs, "main", ".js");
    var aliases = readFileMatching(std_docs, "aliases", ".js");
    var searchIndex = readFileMatching(std_docs, "search-index", ".js").split("\n");

    var [loaded, index] = tools.loadMainJsAndIndex(mainJs, aliases, searchIndex, "std");

    var errors = 0;

    fs.readdirSync(test_folder).forEach(function(file) {
        process.stdout.write('Checking "' + file + '" ... ');
        errors += tools.runChecks(path.join(test_folder, file), loaded, index);
    });
    return errors > 0 ? 1 : 0;
}

process.exit(main(process.argv));