Skip to content

Commit

Permalink
Add tools/test.py test runner. (denoland#384)
Browse files Browse the repository at this point in the history
  • Loading branch information
ry committed Jul 21, 2018
1 parent 709b0cb commit dff5c16
Show file tree
Hide file tree
Showing 9 changed files with 90 additions and 12 deletions.
7 changes: 1 addition & 6 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
2 changes: 0 additions & 2 deletions src/from_filesystem.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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));

Expand Down
File renamed without changes.
1 change: 1 addition & 0 deletions tests/001_hello.js.out
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Hello World
File renamed without changes.
1 change: 1 addition & 0 deletions tests/002_hello.ts.out
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Hello World
41 changes: 41 additions & 0 deletions tools/check_output_test.py
Original file line number Diff line number Diff line change
@@ -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 changes: 41 additions & 0 deletions tools/test.py
Original file line number Diff line number Diff line change
@@ -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))
9 changes: 5 additions & 4 deletions tools/util.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,18 @@
import os
import subprocess

executable_suffix = ".exe" if os.name == "nt" else ""


def run(args, quiet=False, envs={}):
if not quiet:
print " ".join(args)
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):
Expand Down

0 comments on commit dff5c16

Please sign in to comment.