61 lines
1.6 KiB
Python
61 lines
1.6 KiB
Python
#!/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)
|