#!/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)