blob: 807b9132a66c9fc5ace6d30e9a66fc16d75a071c [file]
#!/usr/bin/env vpython3
#
# Copyright 2019 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 unit tests on a pinned version of chrome.
"""
import os
import sys
import argparse
scripts_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(scripts_path)
import test_helpers
import devtools_paths
def run_tests(chrome_binary, target, no_text_coverage, no_html_coverage,
coverage, expanded_reporting, cwd, mocha_fgrep):
karmaconfig_path = os.path.join(cwd, 'out', target, 'gen', 'test',
'unittests', 'karma.conf.js')
if not os.path.exists(karmaconfig_path):
print('Unable to find Karma config at ' + karmaconfig_path)
print('Make sure to set the --ninja-build-name argument to the folder name of "out/target"')
sys.exit(1)
print('Using karma config ' + karmaconfig_path)
exec_command = [devtools_paths.node_path(), devtools_paths.karma_path(), 'start', test_helpers.to_platform_path_exact(karmaconfig_path)]
env = os.environ.copy()
env['NODE_PATH'] = devtools_paths.node_path()
if (no_text_coverage is not False):
env['NO_TEXT_COVERAGE'] = '1'
if (no_html_coverage is not False):
env['NO_HTML_COVERAGE'] = '1'
if (coverage is True):
env['COVERAGE'] = '1'
if (expanded_reporting is True):
env['EXPANDED_REPORTING'] = '1'
if (chrome_binary is not None):
env['CHROME_BIN'] = chrome_binary
if (mocha_fgrep is not None):
print('Using Mocha --fgrep flag ' + mocha_fgrep)
env['MOCHA_FGREP'] = mocha_fgrep
exit_code = test_helpers.popen(exec_command, cwd=cwd, env=env)
if exit_code == 1:
return True
return False
def run_unit_tests_on_ninja_build_target(target,
no_text_coverage=True,
no_html_coverage=True,
coverage=False,
expanded_reporting=False,
chrome_binary=None,
cwd=None,
mocha_fgrep=None):
if chrome_binary and not test_helpers.check_chrome_binary(chrome_binary):
print(
'Chrome binary argument path does not exist or is not executable, reverting to downloaded binary'
)
chrome_binary = None
if not chrome_binary:
# 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
if (chrome_binary is None):
print('Unable to run, no Chrome binary provided')
sys.exit(1)
print('Using Chromium binary (%s)' % chrome_binary)
if not cwd:
cwd = devtools_paths.devtools_root_path()
print('Running tests from %s\n' % cwd)
errors_found = run_tests(chrome_binary, target, no_text_coverage,
no_html_coverage, coverage, expanded_reporting,
cwd, mocha_fgrep)
if coverage and not no_html_coverage:
print('')
print(
' You can see the coverage results by opening \033[1mkarma-coverage/index.html\033[0m in a browser'
)
print('')
if errors_found:
print('ERRORS DETECTED')
if not expanded_reporting:
print('')
print(
' Run with \033[1m--expanded-reporting\033[0m to get better information about why the tests failed.'
)
print('')
sys.exit(1)
def main():
parser = argparse.ArgumentParser(description='Run unittests on Ninja targets.')
parser.add_argument(
'--target', '-t', default='Default', dest='target', help='The name of the Ninja output directory. Defaults to "Default"')
parser.add_argument(
'--no-text-coverage', action='store_true', default=False, dest='no_text_coverage', help='Whether to output text coverage')
parser.add_argument('--no-html-coverage',
action='store_true',
default=False,
dest='no_html_coverage',
help='Whether to output html coverage')
parser.add_argument('--coverage',
action='store_true',
default=False,
dest='coverage',
help='Whether to output coverage')
parser.add_argument('--expanded-reporting',
action='store_true',
default=False,
dest='expanded_reporting',
help='Whether to output expanded report info')
parser.add_argument('--chrome-binary',
dest='chrome_binary',
help='Path to Chromium binary')
parser.add_argument('--cwd',
dest='cwd',
help='Path to the directory containing the out dir',
default=devtools_paths.devtools_root_path())
parser.add_argument('--mocha-fgrep',
dest='mocha_fgrep',
help='Run only tests that match this string.')
args = parser.parse_args(sys.argv[1:])
run_unit_tests_on_ninja_build_target(args.target, args.no_text_coverage,
args.no_html_coverage, args.coverage,
args.expanded_reporting,
args.chrome_binary, args.cwd,
args.mocha_fgrep)
if __name__ == '__main__':
main()