zulip/frontend_tests/zjsunit/finder.js

46 lines
1.4 KiB
JavaScript
Raw Normal View History

const _ = require('underscore/underscore.js');
const fs = require('fs');
const path = require('path');
exports.find_files_to_run = function () {
let oneFileFilter = [];
let testsDifference = [];
if (process.argv[2]) {
oneFileFilter = process.argv
.slice(2)
.filter(function (filename) {return (/[.]js$/).test(filename);})
.map(function (filename) {return filename.replace(/\.js$/i, '');});
}
// tests_dir is where we find our specific unit tests (as opposed
// to framework code)
const tests_dir = __dirname.replace(/zjsunit/, 'node_tests');
let tests = fs.readdirSync(tests_dir)
.filter(function (filename) {return !(/^\./i).test(filename);})
.filter(function (filename) {return (/\.js$/i).test(filename);})
.map(function (filename) {return filename.replace(/\.js$/i, '');});
if (oneFileFilter.length > 0) {
tests = tests.filter(function (filename) {
js: Convert a.indexOf(…) !== -1 to a.includes(…). Babel polyfills this for us for Internet Explorer. import * as babelParser from "recast/parsers/babel"; import * as recast from "recast"; import * as tsParser from "recast/parsers/typescript"; import { builders as b, namedTypes as n } from "ast-types"; import K from "ast-types/gen/kinds"; import fs from "fs"; import path from "path"; import process from "process"; const checkExpression = (node: n.Node): node is K.ExpressionKind => n.Expression.check(node); for (const file of process.argv.slice(2)) { console.log("Parsing", file); const ast = recast.parse(fs.readFileSync(file, { encoding: "utf8" }), { parser: path.extname(file) === ".ts" ? tsParser : babelParser, }); let changed = false; recast.visit(ast, { visitBinaryExpression(path) { const { operator, left, right } = path.node; if ( n.CallExpression.check(left) && n.MemberExpression.check(left.callee) && !left.callee.computed && n.Identifier.check(left.callee.property) && left.callee.property.name === "indexOf" && left.arguments.length === 1 && checkExpression(left.arguments[0]) && ((["===", "!==", "==", "!=", ">", "<="].includes(operator) && n.UnaryExpression.check(right) && right.operator == "-" && n.Literal.check(right.argument) && right.argument.value === 1) || ([">=", "<"].includes(operator) && n.Literal.check(right) && right.value === 0)) ) { const test = b.callExpression( b.memberExpression(left.callee.object, b.identifier("includes")), [left.arguments[0]] ); path.replace( ["!==", "!=", ">", ">="].includes(operator) ? test : b.unaryExpression("!", test) ); changed = true; } this.traverse(path); }, }); if (changed) { console.log("Writing", file); fs.writeFileSync(file, recast.print(ast).code, { encoding: "utf8" }); } } Signed-off-by: Anders Kaseorg <anders@zulipchat.com>
2020-02-08 04:55:06 +01:00
return oneFileFilter.includes(filename);
});
testsDifference = _.difference(oneFileFilter, tests);
}
testsDifference.forEach(function (filename) {
throw filename + ".js does not exist";
});
tests.sort();
const files = tests.map(function (fn) {
const obj = {};
obj.name = fn;
obj.full_name = path.join(tests_dir, fn);
return obj;
});
return files;
};