| #!/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 os |
| import subprocess |
| import sys |
| |
| FAIL_EMOJI = u'\U0001F631'.encode('utf-8') |
| PASS_EMOJI = u'\U0001F601'.encode('utf-8') |
| |
| GREEN = '\033[92m' |
| RED = '\033[91m' |
| END_CODE = '\033[0m' |
| |
| |
| def _Color(s, color): |
| """Adds ANSI escape codes to color a string printed to the terminal.""" |
| return color + s + END_CODE |
| |
| |
| def _RunTest(test, chrome_command): |
| if sys.platform in test.get('disabled_platforms', {}): |
| return 0 |
| command = [test['path']] |
| if sys.platform == 'win32': |
| command = ['python'] + command |
| if test.get('chrome_path_arg') and chrome_command: |
| command += ['--chrome_path', chrome_command] |
| try: |
| return subprocess.call(command) |
| except OSError: |
| return 1 |
| |
| |
| def Main(name, tests, argv): |
| parser = argparse.ArgumentParser( |
| description='Run all tests of %s project.' % name) |
| parser.add_argument( |
| '--chrome_path', type=str, |
| help='Path to Chrome browser binary for dev_server tests.') |
| args = parser.parse_args(argv[1:]) |
| |
| exit_code = 0 |
| errors = [] |
| for test in tests: |
| new_exit_code = _RunTest(test, args.chrome_path) |
| if new_exit_code != 0: |
| exit_code |= new_exit_code |
| errors += '%s failed some tests. Re-run %s script to see those.\n' % ( |
| os.path.basename(test['path']), test['path']) |
| |
| if exit_code: |
| print _Color('Oops! Some tests failed.', RED), FAIL_EMOJI |
| sys.stderr.writelines(errors) |
| else: |
| print _Color('Woho! All tests passed.', GREEN), PASS_EMOJI |
| |
| sys.exit(exit_code) |