diff --git a/frontend_tests/zjsunit/finder.js b/frontend_tests/zjsunit/finder.js deleted file mode 100644 index c1eadba325..0000000000 --- a/frontend_tests/zjsunit/finder.js +++ /dev/null @@ -1,47 +0,0 @@ -"use strict"; - -const fs = require("fs"); -const path = require("path"); - -const _ = require("lodash"); - -exports.find_files_to_run = function () { - let oneFileFilter = []; - let testsDifference = []; - if (process.argv[2]) { - oneFileFilter = process.argv - .slice(2) - .filter((filename) => /[.]js$/.test(filename)) - .map((filename) => 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((filename) => !/^\./i.test(filename)) - .filter((filename) => /\.js$/i.test(filename)) - .map((filename) => filename.replace(/\.js$/i, "")); - - if (oneFileFilter.length > 0) { - tests = tests.filter((filename) => oneFileFilter.includes(filename)); - testsDifference = _.difference(oneFileFilter, tests); - } - - testsDifference.forEach((filename) => { - throw filename + ".js does not exist"; - }); - - tests.sort(); - - const files = tests.map((fn) => { - const obj = {}; - obj.name = fn; - obj.full_name = path.join(tests_dir, fn); - return obj; - }); - - return files; -}; diff --git a/frontend_tests/zjsunit/index.js b/frontend_tests/zjsunit/index.js index fbc685cccd..1790bc7c68 100644 --- a/frontend_tests/zjsunit/index.js +++ b/frontend_tests/zjsunit/index.js @@ -7,7 +7,6 @@ const path = require("path"); const Handlebars = require("handlebars/runtime"); const _ = require("lodash"); -const finder = require("./finder"); const handlebars = require("./handlebars"); const stub_i18n = require("./i18n"); const namespace = require("./namespace"); @@ -34,7 +33,7 @@ function immediate(f) { } // Find the files we need to run. -const files = finder.find_files_to_run(); // may write to console +const files = process.argv.slice(2); if (files.length === 0) { throw "No tests found"; } @@ -100,9 +99,9 @@ global.markdown_assert = require("./markdown_assert"); let current_file_name; function run_one_module(file) { - console.info("running tests for " + file.name); - current_file_name = file.name; - require(file.full_name); + console.info("running test " + path.basename(file, ".js")); + current_file_name = file; + require(file); } global.run_test = (label, f) => { diff --git a/tools/test-js-with-node b/tools/test-js-with-node index 1100020079..fcefc3d301 100755 --- a/tools/test-js-with-node +++ b/tools/test-js-with-node @@ -5,7 +5,7 @@ import os import pwd import subprocess import sys -from typing import Any, Dict +from typing import Any, Dict, List TOOLS_DIR = os.path.dirname(os.path.abspath(__file__)) sys.path.insert(0, os.path.dirname(TOOLS_DIR)) @@ -203,24 +203,37 @@ def get_dev_host() -> str: def print_error(msg: str) -> None: print(BOLDRED + 'ERROR:' + ENDC + ' ' + msg) +def clean_file(orig_fn: str) -> str: + fn = orig_fn + if not fn.endswith(".js"): + fn += ".js" + if "frontend_tests/" not in fn: + fn = os.path.join(ROOT_DIR, "frontend_tests", "node_tests", fn) + fn = os.path.abspath(fn) + if not os.path.exists(fn): + print(f"Cannot find {orig_fn} ({fn})") + sys.exit(1) + return fn + +def clean_files(fns: List[str]) -> List[str]: + cleaned_files = [clean_file(fn) for fn in fns] + return cleaned_files + def run_tests_via_node_js() -> int: os.environ['TZ'] = 'UTC' - # Add ".js" to the end of all the file arguments, so index.js - # can actually verify if the file exists or not. - for index, arg in enumerate(options.args): - if not arg.endswith('.js') and not arg.endswith('.ts'): - # If it doesn't end with ".js" or ".ts", assume it is a JS file, - # since most files are currently JS files. - options.args[index] = arg + '.js' - # The index.js test runner is the real "driver" here, and we launch # with either nyc or node, depending on whether we want coverage # reports. Running under nyc is slower and creates funny # tracebacks, so you generally want to get coverage reports only # after making sure tests will pass. node_tests_cmd = ['node', '--stack-trace-limit=100', INDEX_JS] - node_tests_cmd += individual_files + if individual_files: + files = individual_files + else: + files = sorted(glob.glob("frontend_tests/node_tests/*.js")) + + node_tests_cmd += clean_files(files) if options.coverage: coverage_dir = os.path.join(ROOT_DIR, 'var/node-coverage')