diff options
author | Bartek IwaĆczuk <biwanczuk@gmail.com> | 2019-06-03 18:35:55 +0200 |
---|---|---|
committer | Ryan Dahl <ry@tinyclouds.org> | 2019-06-03 12:35:55 -0400 |
commit | 43c6c1a9f58a8d423a2d55092609e620f9765bcf (patch) | |
tree | f0bc5783b40bbde27dc52ff01552e21258e59324 /tools/test.py | |
parent | bbc8de0c7a6a086ea7b0b79c6f5b005f9f374a7d (diff) |
Refactor test infrastructure (#2432)
* use subclass of unittest.TestCase for all test cases
* allow to run single test file (eg. python tools/integration_tests.py)
* test filtering (via --pattern/-p CLI flag)
* use common CLI parser for all tests:
usage: test.py [-h] [--failfast] [--verbose] [--executable EXECUTABLE]
[--release] [--pattern PATTERN] [--build-dir BUILD_DIR]
optional arguments:
-h, --help show this help message and exit
--failfast, -f Stop on first failure
--verbose, -v Verbose output
--executable EXECUTABLE
Use external executable of Deno
--release Test against release executable
--pattern PATTERN, -p PATTERN
Run tests that match provided pattern
--build-dir BUILD_DIR
Deno build directory
* respect NO_COLOR variable
Diffstat (limited to 'tools/test.py')
-rwxr-xr-x | tools/test.py | 119 |
1 files changed, 27 insertions, 92 deletions
diff --git a/tools/test.py b/tools/test.py index 3a44748a2..ad45f186a 100755 --- a/tools/test.py +++ b/tools/test.py @@ -3,9 +3,6 @@ # Runs the full test suite. # Usage: ./tools/test.py out/Debug import os -import subprocess -import sys -import unittest from benchmark_test import TestBenchmark from deno_dir_test import TestDenoDir @@ -14,73 +11,22 @@ from fmt_test import FmtTest from integration_tests import TestIntegrations from repl_test import TestRepl from setup_test import TestSetup +from target_test import TestTarget from unit_tests import JsUnitTests from util_test import TestUtil - -from is_tty_test import TestIsTty # NOTE: These tests are skipped on Windows +from is_tty_test import TestIsTty from permission_prompt_test import permission_prompt_tests from complex_permissions_test import complex_permissions_tests -from http_server import spawn -from util import (DenoTestCase, ColorTextTestRunner, enable_ansi_colors, - executable_suffix, run, run_output, rmtree, tests_path, - test_args) - - -class TestTarget(DenoTestCase): - @staticmethod - def check_exists(filename): - if not os.path.exists(filename): - print "Required target doesn't exist:", filename - print "Run ./tools/build.py" - sys.exit(1) - - def test_executable_exists(self): - self.check_exists(self.deno_exe) - - def _test(self, executable): - "Test executable runs and exits with code 0." - bin_file = os.path.join(self.build_dir, executable + executable_suffix) - self.check_exists(bin_file) - run([bin_file]) - - def test_libdeno(self): - self._test("libdeno_test") +import http_server +from util import (enable_ansi_colors, build_path, RESET, FG_RED, FG_GREEN, + executable_suffix, run, run_output, rmtree, tests_path) +from test_util import parse_test_args, run_tests - def test_cli(self): - self._test("cli_test") - def test_core(self): - self._test("deno_core_test") - - def test_core_http_benchmark(self): - self._test("deno_core_http_bench_test") - - def test_ts_library_builder(self): - run([ - "node", "./node_modules/.bin/ts-node", "--project", - "tools/ts_library_builder/tsconfig.json", - "tools/ts_library_builder/test.ts" - ]) - - def test_no_color(self): - t = os.path.join(tests_path, "no_color.js") - output = run_output([self.deno_exe, "run", t], - merge_env={"NO_COLOR": "1"}) - assert output.strip() == "noColor true" - t = os.path.join(tests_path, "no_color.js") - output = run_output([self.deno_exe, "run", t]) - assert output.strip() == "noColor false" - - def test_exec_path(self): - cmd = [self.deno_exe, "run", "tests/exec_path.ts"] - output = run_output(cmd) - assert self.deno_exe in output.strip() - - -def main(argv): - args = test_args(argv) +def main(): + args = parse_test_args() deno_dir = os.path.join(args.build_dir, ".deno_test") if os.path.isdir(deno_dir): @@ -89,36 +35,25 @@ def main(argv): enable_ansi_colors() - with spawn(): - test_cases = [ - TestSetup, - TestUtil, - TestTarget, - JsUnitTests, - FetchTest, - FmtTest, - TestIntegrations, - TestRepl, - TestDenoDir, - TestBenchmark, - ] - # These tests are skipped, but to make the test output less noisy - # we'll avoid triggering them. - if os.name != 'nt': - test_cases.append(TestIsTty) - test_cases += permission_prompt_tests() - test_cases += complex_permissions_tests() - - suite = unittest.TestSuite([ - unittest.TestLoader().loadTestsFromTestCase(tc) - for tc in test_cases - ]) - - result = ColorTextTestRunner( - verbosity=args.verbosity + 1, failfast=args.failfast).run(suite) - if not result.wasSuccessful(): - sys.exit(1) + test_cases = [ + TestSetup, + TestUtil, + TestTarget, + JsUnitTests, + FetchTest, + FmtTest, + TestIntegrations, + TestRepl, + TestDenoDir, + TestBenchmark, + TestIsTty, + ] + test_cases += permission_prompt_tests() + test_cases += complex_permissions_tests() + + with http_server.spawn(): + run_tests(test_cases) if __name__ == '__main__': - main(sys.argv[1:]) + main() |