blob: 0c4144ac9e73dfe971083991d0d7f4883c29facb [file] [log] [blame]
#!/usr/bin/env python
# Copyright (c) 2015 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.
import argparse
import logging
import os
import subprocess
import sys
_RUN_PY_TESTS_DIR = os.path.join(os.path.dirname(__file__), 'run_py_tests')
_RUN_D8_TESTS_DIR = os.path.join(os.path.dirname(__file__), 'run_d8_tests')
_RUN_DEV_SERVER_DIR = os.path.join(os.path.dirname(__file__), 'run_dev_server')
class bcolors(object):
HEADER = '\033[95m'
OKBLUE = '\033[94m'
OKGREEN = '\033[92m'
WARNING = '\033[93m'
FAIL = '\033[91m'
ENDC = '\033[0m'
BOLD = '\033[1m'
UNDERLINE = '\033[4m'
def _RunPyTests():
return subprocess.call([_RUN_PY_TESTS_DIR])
def _RunD8Tests():
return subprocess.call([_RUN_D8_TESTS_DIR])
def _RunDevServer(chrome_command):
if (sys.platform.startswith('linux') and os.getenv('DISPLAY') is None):
logging.warning(
'Browser found but cannot run browser tests because you do not have a '
'DISPLAY environment set.')
return 0
args = [
chrome_command, '--no-sandbox', '--no-experiments', '--no-first-run',
'--noerrdialogs',
'http://localhost:8003/base/tests.html?headless=true&testTypeToRun=all']
chrome_proc = subprocess.Popen(args)
exit_code = subprocess.call([_RUN_DEV_SERVER_DIR])
chrome_proc.terminate()
if chrome_proc.poll() is None:
chrome_proc.kill()
return exit_code
def _TryGettingChromeCommand():
if sys.platform.startswith('darwin'): # Mac
chrome_path = (
'/Applications/Google Chrome.app/Contents/MacOS/Google Chrome')
if os.path.isfile(chrome_path):
return chrome_path
elif sys.platform.startswith('linux'):
found = False
try:
with open(os.devnull, 'w') as devnull:
found = subprocess.call(['google-chrome', '--version'],
stdout=devnull, stderr=devnull) == 0
except OSError:
pass
if found:
return 'google-chrome'
# TODO(nedn): Find the default path to chrome on win platform.
return None
if __name__ == '__main__':
parser = argparse.ArgumentParser(
description='Run all tests of tracing project.')
parser.add_argument('--chrome_path', type=str,
help='Path to Chrome browser binary.')
args = parser.parse_args()
chrome_command = args.chrome_path
if not chrome_command:
chrome_command = _TryGettingChromeCommand()
run_py_tests_exit_code = _RunPyTests()
run_d8_tests_exit_code = _RunD8Tests()
if chrome_command:
run_dev_server_exit_code = _RunDevServer(chrome_command)
else:
logging.warning(
'Could not run browser tests because chrome is missing.')
run_dev_server_exit_code = 0
exit_code = (run_py_tests_exit_code | run_dev_server_exit_code |
run_d8_tests_exit_code)
if exit_code:
print (bcolors.FAIL +
'Oooops! Looks like some of your tests have failed.' +
bcolors.ENDC), u'\U0001F631'.encode('utf-8')
else:
print (bcolors.OKGREEN +
'Woho! All the tests have passed. You are awesome!' +
bcolors.ENDC), u'\U0001F601'.encode('utf-8')
if run_py_tests_exit_code:
sys.stderr.write(
'run_py_tests have some failed tests. Rerun run_py_tests script '
'to see those.\n')
if run_d8_tests_exit_code:
sys.stderr.write(
'run_d8_tests have some failed tests. Rerun run_d8_tests script '
'to see those.\n')
if run_dev_server_exit_code:
sys.stderr.write(
'run_dev_server have some failed tests. Rerun run_dev_server script '
'and open the browser to see those.\n')
sys.exit(exit_code)