Add tools/test.py test runner. (#384)

This commit is contained in:
Ryan Dahl 2018-07-21 19:08:24 -04:00 committed by GitHub
parent 709b0cb90c
commit dff5c16e85
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 90 additions and 12 deletions

View file

@ -47,9 +47,4 @@ install:
- ninja -j2 -C $BUILD_PATH :all
script:
- ./tools/lint.py
- $BUILD_PATH/test_cc
- $BUILD_PATH/handlers_test
- $BUILD_PATH/deno ./testdata/001_hello.js
- $BUILD_PATH/deno ./testdata/002_hello.ts
- $BUILD_PATH/deno_ns ./testdata/001_hello.js
- $BUILD_PATH/deno_ns ./testdata/002_hello.ts
- ./tools/test.py $BUILD_PATH

View file

@ -15,8 +15,6 @@
namespace deno {
Deno* NewFromFileSystem(void* data, deno_recv_cb cb) {
printf("load bundle " BUNDLE_LOCATION "\n");
std::string js_source;
CHECK(deno::ReadFileToString(BUNDLE_LOCATION, &js_source));

1
tests/001_hello.js.out Normal file
View file

@ -0,0 +1 @@
Hello World

1
tests/002_hello.ts.out Normal file
View file

@ -0,0 +1 @@
Hello World

41
tools/check_output_test.py Executable file
View file

@ -0,0 +1,41 @@
#!/usr/bin/env python
# Given a deno executable, this script execute several integration tests
# with it. The tests are stored in //tests/ and each script has a corresponding
# .out file which specifies what the stdout should be.
#
# Usage: check_output_test.py [path to deno executable]
import os
import sys
import subprocess
root_path = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
tests_path = os.path.join(root_path, "tests")
def check_output_test(deno_exe_filename):
assert os.path.isfile(deno_exe_filename)
outs = [
filename for filename in os.listdir(tests_path)
if filename.endswith(".out")
]
assert len(outs) > 1
tests = [(os.path.splitext(filename)[0], filename) for filename in outs]
for (script, out_filename) in tests:
script_abs = os.path.join(tests_path, script)
out_abs = os.path.join(tests_path, out_filename)
with open(out_abs, 'r') as f:
expected_out = f.read()
cmd = [deno_exe_filename, script_abs]
print " ".join(cmd)
actual_out = subprocess.check_output(cmd)
if expected_out != actual_out:
print "Expected output does not match actual."
sys.exit(1)
def main(argv):
check_output_test(argv[1])
if __name__ == '__main__':
sys.exit(main(sys.argv))

41
tools/test.py Executable file
View file

@ -0,0 +1,41 @@
#!/usr/bin/env python
# Runs the full test suite.
# Usage: ./tools/test.py out/Debug
import os
import sys
from check_output_test import check_output_test
from util import executable_suffix, run
def check_exists(filename):
if not os.path.exists(filename):
print "Required target doesn't exist:", filename
print "Build target :all"
sys.exit(1)
def main(argv):
if len(argv) != 2:
print "Usage: tools/test.py [build dir]"
sys.exit(1)
build_dir = argv[1]
test_cc = os.path.join(build_dir, "test_cc" + executable_suffix)
check_exists(test_cc)
run([test_cc])
handlers_test = os.path.join(build_dir, "handlers_test" + executable_suffix)
check_exists(handlers_test)
run([handlers_test])
deno_exe = os.path.join(build_dir, "deno" + executable_suffix)
check_exists(deno_exe)
check_output_test(deno_exe)
deno_ns_exe = os.path.join(build_dir, "deno_ns" + executable_suffix)
check_exists(deno_ns_exe)
check_output_test(deno_ns_exe)
if __name__ == '__main__':
sys.exit(main(sys.argv))

View file

@ -3,6 +3,8 @@
import os
import subprocess
executable_suffix = ".exe" if os.name == "nt" else ""
def run(args, quiet=False, envs={}):
if not quiet:
@ -10,10 +12,9 @@ def run(args, quiet=False, envs={}):
env = os.environ.copy()
for key in envs.keys():
env[key] = envs[key]
if os.name == "nt":
# Run through shell to make .bat/.cmd files work.
args = ["cmd", "/c"] + args
subprocess.check_call(args, env=env)
args[0] = os.path.normpath(args[0])
shell = os.name == "nt" # Run through shell to make .bat/.cmd files work.
subprocess.check_call(args, env=env, shell=shell)
def remove_and_symlink(target, name, target_is_dir=False):