| #!/usr/bin/env vpython3 |
| # |
| # 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. |
| |
| DEPRECATED: please use run_test_suite.js instead. |
| """ |
| |
| import argparse |
| import os |
| import sys |
| |
| 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= |
| 'test suite name. DEPRECATED: please use --test-suite-path instead.') |
| parser.add_argument( |
| '--test-suite-path', |
| dest='test_suite_path', |
| help= |
| 'path to test suite, starting from the out/TARGET directory. Should use Linux path separators.' |
| ) |
| 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') |
| parser.add_argument('--cwd', |
| dest='cwd', |
| help='Path to the directory containing the out dir', |
| default=devtools_paths.devtools_root_path()) |
| parser.add_argument( |
| '--node_modules-path', |
| dest='node_modules_path', |
| help= |
| 'Path to the node_modules directory for Node to use. Will use Node defaults if not set.', |
| default=None) |
| parser.add_argument('test_patterns', nargs='*') |
| return parser.parse_args(cli_args) |
| |
| |
| def run_tests(chrome_binary, |
| chrome_features, |
| test_suite_path, |
| test_suite, |
| jobs, |
| target, |
| cwd=None, |
| node_modules_path=None, |
| test_patterns=None): |
| env = os.environ.copy() |
| env['CHROME_BIN'] = chrome_binary |
| if chrome_features: |
| env['CHROME_FEATURES'] = chrome_features |
| |
| if test_patterns: |
| env['TEST_PATTERNS'] = ';'.join(test_patterns) |
| |
| if jobs: |
| env['JOBS'] = jobs |
| |
| if target: |
| env['TARGET'] = target |
| |
| if node_modules_path is not None: |
| # Node requires the path to be absolute |
| env['NODE_PATH'] = os.path.abspath(node_modules_path) |
| |
| if not cwd: |
| cwd = devtools_paths.devtools_root_path() |
| |
| exec_command = [devtools_paths.node_path()] |
| |
| if 'DEBUG_TEST' in env: |
| exec_command.append('--inspect') |
| |
| exec_command = exec_command + [ |
| 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(): |
| print( |
| "DEPRECATED: run_test_suite.py is deprecated and will be removed in the future.\nPlease use run_test_suite.js which is newer and more robust with handling paths." |
| ) |
| 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 = OPTIONS.chrome_features |
| |
| if (chrome_binary is None): |
| print('Unable to run, no Chrome binary provided') |
| sys.exit(1) |
| |
| if OPTIONS.jobs: |
| jobs = OPTIONS.jobs |
| |
| test_file = OPTIONS.test_file |
| test_patterns = OPTIONS.test_patterns |
| if test_file: |
| test_patterns.append(test_file) |
| |
| print('Using Chromium binary ({}{})\n'.format( |
| chrome_binary, ' ' + chrome_features if chrome_features else '')) |
| print('Using target (%s)\n' % OPTIONS.target) |
| |
| if test_file is not None: |
| print( |
| 'The test_file argument is obsolete, just pass the filename as positional argument' |
| ) |
| if test_patterns: |
| print('Testing file(s) (%s)' % ', '.join(test_patterns)) |
| |
| cwd = OPTIONS.cwd |
| target = OPTIONS.target |
| node_modules_path = OPTIONS.node_modules_path |
| |
| print('Running tests from %s\n' % cwd) |
| |
| test_suite_path_input = OPTIONS.test_suite_path |
| test_suite = OPTIONS.test_suite |
| test_suite_parts = None |
| if test_suite: |
| # test-suite is deprecated and will be removed, but we support it for now to not break the bots until their recipes are updated. |
| test_suite_parts = ['gen', 'test', test_suite] |
| elif test_suite_path_input: |
| # We take the input with Linux path separators, but need to split and join to make sure this works on Windows. |
| test_suite_parts = test_suite_path_input.split('/') |
| else: |
| print( |
| 'Unable to run, require one of --test-suite or --test-suite-path to be provided.' |
| ) |
| sys.exit(1) |
| |
| print('Using Test Suite (%s)\n' % os.path.join(*test_suite_parts)) |
| |
| test_suite_path = os.path.join(os.path.abspath(cwd), 'out', OPTIONS.target, |
| *test_suite_parts) |
| |
| errors_found = False |
| try: |
| errors_found = run_tests(chrome_binary, |
| chrome_features, |
| test_suite_path, |
| test_suite, |
| jobs, |
| target, |
| cwd, |
| node_modules_path, |
| test_patterns=test_patterns) |
| except Exception as err: |
| print(err) |
| |
| if errors_found: |
| print('ERRORS DETECTED') |
| sys.exit(1) |
| |
| |
| if __name__ == '__main__': |
| run_test() |