blob: a5b3bd3d06d27503a173599e87a26fd3195606bb [file] [log] [blame]
#!/usr/bin/env python
#
# Copyright 2020 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""
Run tests on a pinned version of chrome.
"""
import argparse
import os
import re
from subprocess import Popen
import sys
import signal
ROOT_DIRECTORY = os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', '..')
scripts_path = os.path.join(ROOT_DIRECTORY, 'scripts')
sys.path.append(scripts_path)
import devtools_paths
import test_helpers
def parse_options(cli_args):
parser = argparse.ArgumentParser(description='Run tests')
parser.add_argument('--chrome-binary', dest='chrome_binary', help='path to Chromium binary')
parser.add_argument('--test-suite', dest='test_suite', help='path to test suite')
parser.add_argument('--test-file', dest='test_file', help='an absolute path for the file to test')
parser.add_argument(
'--target',
'-t',
default='Default',
dest='target',
help='The name of the Ninja output directory. Defaults to "Default"')
parser.add_argument(
'--chrome-features',
dest='chrome_features',
help='comma separated list of strings passed to --enable-features on the chromium commandline')
parser.add_argument(
'--jobs',
default='1',
dest='jobs',
help=
'The number of parallel runners to use (if supported). Defaults to 1')
return parser.parse_args(cli_args)
def run_tests(chrome_binary,
chrome_features,
test_suite_path,
test_suite,
jobs,
test_file=None):
env = os.environ.copy()
env['CHROME_BIN'] = chrome_binary
if chrome_features:
env['CHROME_FEATURES'] = chrome_features
if test_file is not None:
env['TEST_FILE'] = test_file
if jobs:
env['JOBS'] = jobs
cwd = devtools_paths.devtools_root_path()
exec_command = [
devtools_paths.node_path(),
devtools_paths.mocha_path(),
'--config',
os.path.join(test_suite_path, '.mocharc.js'),
]
exit_code = test_helpers.popen(exec_command, cwd=cwd, env=env)
if exit_code != 0:
return True
return False
def run_test():
OPTIONS = parse_options(sys.argv[1:])
is_cygwin = sys.platform == 'cygwin'
chrome_binary = None
test_suite = None
chrome_features = None
# Default to the downloaded / pinned Chromium binary
downloaded_chrome_binary = devtools_paths.downloaded_chrome_binary_path()
if test_helpers.check_chrome_binary(downloaded_chrome_binary):
chrome_binary = downloaded_chrome_binary
# Override with the arg value if provided.
if OPTIONS.chrome_binary:
chrome_binary = OPTIONS.chrome_binary
if not test_helpers.check_chrome_binary(chrome_binary):
print('Unable to find a Chrome binary at \'%s\'' % chrome_binary)
sys.exit(1)
if OPTIONS.chrome_features:
chrome_features = '--enable-features=%s' % OPTIONS.chrome_features
if (chrome_binary is None):
print('Unable to run, no Chrome binary provided')
sys.exit(1)
if (OPTIONS.test_suite is None):
print('Unable to run, no test suite provided')
sys.exit(1)
if OPTIONS.jobs:
jobs = OPTIONS.jobs
test_suite = OPTIONS.test_suite
test_file = OPTIONS.test_file
print('Using Chromium binary ({}{})\n'.format(chrome_binary, ' ' + chrome_features if chrome_features else ''))
print('Using Test Suite (%s)\n' % test_suite)
print('Using target (%s)\n' % OPTIONS.target)
if test_file is not None:
print('Testing file (%s)' % test_file)
cwd = devtools_paths.devtools_root_path()
test_suite_path = os.path.join(cwd, 'out', OPTIONS.target, 'gen', 'test',
test_suite)
errors_found = False
try:
errors_found = run_tests(chrome_binary,
chrome_features,
test_suite_path,
test_suite,
jobs,
test_file=test_file)
except Exception as err:
print(err)
if errors_found:
print('ERRORS DETECTED')
sys.exit(1)
if __name__ == '__main__':
run_test()