blob: d879d6e631651cd23fe8d0ea8eee72b66211de6c [file] [log] [blame]
#!/usr/bin/env python
#
# Copyright 2011 Google Inc. All Rights Reserved.
import fnmatch
import optparse
import os
import re
import shutil
import subprocess
import sys
import urllib
import utils
SCRIPT_TAG = '<script type="application/%s" src="%s"></script>\n'
DART_TEST_DIR = os.path.join('dart')
DART_VM_FLAGS = [
]
DART_VM_CHECKED_FLAGS = DART_VM_FLAGS + [
'--enable_type_checks',
'--warning_as_error',
]
TEST_DRT_FLAGS = [
'--compiler=none',
'--runtime=drt',
'--drt=%(drt)s',
'--mode=%(mode)s',
'--arch=%(arch)s',
'--build-directory=%(build_dir)s',
'--report',
'--time',
]
TEST_DRT_CHECKED_FLAGS = TEST_DRT_FLAGS + [
'--checked',
]
TEST_DARTIUM_FLAGS = [
'--compiler=none',
'--runtime=dartium',
'--dartium=%(dartium)s',
'--mode=%(mode)s',
'--build-directory=%(build_dir)s',
'--report',
'--time',
]
TEST_DARTIUM_CHECKED_FLAGS = TEST_DARTIUM_FLAGS + [
'--checked',
]
TEST_INFO = {
'dartium': {
'core': {
'checked': TEST_DARTIUM_CHECKED_FLAGS,
'unchecked': TEST_DARTIUM_FLAGS,
},
},
'drt': {
'layout': {
'checked': DART_VM_CHECKED_FLAGS,
'unchecked': DART_VM_FLAGS,
},
'core': {
'checked': TEST_DRT_CHECKED_FLAGS,
'unchecked': TEST_DRT_FLAGS,
},
},
}
COMPONENTS = TEST_INFO.keys()
SUITES = [ 'layout', 'core' ]
def main():
parser = optparse.OptionParser()
parser.add_option('--mode', dest='mode',
action='store', type='string',
help='Test mode (Debug or Release)')
parser.add_option('--component', dest='component',
default='drt',
action='store', type='string',
help='Execution mode (dartium, drt or all)')
parser.add_option('--suite', dest='suite',
default='all',
action='store', type='string',
help='Test suite (layout, core, or all)')
parser.add_option('--arch', dest='arch',
default='ia32',
action='store', type='string',
help='Target architecture')
parser.add_option('--no-show-results', action='store_false',
default=True, dest='show_results',
help='Don\'t launch a browser with results '
'after the tests are done')
parser.add_option('--checked', action='store_true',
default=False, dest='checked',
help='Run Dart code in checked mode')
parser.add_option('--unchecked', action='store_true',
default=False, dest='unchecked',
help='Run Dart code in unchecked mode')
parser.add_option('--buildbot', action='store_true',
default=False, dest='buildbot',
help='Print results in buildbot format')
parser.add_option('--layout-test', dest='layout_test',
default=None,
action='store', type='string',
help='Single layout test to run if set')
parser.add_option('--test-filter', dest='test_filter',
default=None,
action='store', type='string',
help='Test filter for core tests')
parser.add_option('--win-ninja-build', action='store_true',
default=False, dest='is_win_ninja',
help='We are on windows and use ninja for building.')
(options, args) = parser.parse_args()
mode = options.mode
if not (mode in ['Debug', 'Release']):
raise Exception('Invalid test mode')
if options.component == 'all':
components = COMPONENTS
elif not (options.component in COMPONENTS):
raise Exception('Invalid component %s' % options.component)
else:
components = [ options.component ]
if options.suite == 'all':
suites = SUITES
elif not (options.suite in SUITES):
raise Exception('Invalid suite %s' % options.suite)
else:
suites = [ options.suite ]
# If --checked or --unchecked not present, run with both.
checkmodes = ['unchecked', 'checked']
if options.checked or options.unchecked:
checkmodes = []
if options.unchecked: checkmodes.append('unchecked')
if options.checked: checkmodes.append('checked')
# We are in src/dart/tools/dartium/test.py.
pathname = os.path.dirname(sys.argv[0])
fullpath = os.path.abspath(pathname)
srcpath = os.path.normpath(os.path.join(fullpath, '..', '..', '..'))
test_mode = ''
timeout = 30000
if mode == 'Debug':
test_mode = '--debug'
timeout = 60000
show_results = ''
if not options.show_results:
show_results = '--no-show-results'
host_os = utils.guessOS()
if options.is_win_ninja:
host_os = 'win-ninja'
build_root, drt_path, dartium_path, dart_path = {
'mac': (
'out',
os.path.join('Content Shell.app', 'Contents', 'MacOS', 'Content Shell'),
os.path.join('Chromium.app', 'Contents', 'MacOS', 'Chromium'),
'dart',
),
'linux': ('out', 'content_shell', 'chrome', 'dart'),
'win': ('out', 'content_shell.exe', 'chrome.exe', 'dart.exe'),
'win-ninja': ('out', 'content_shell.exe', 'chrome.exe', 'dart.exe'),
}[host_os]
build_dir = os.path.join(srcpath, build_root, mode)
executable_map = {
'mode': mode.lower(),
'build_dir': os.path.relpath(build_dir),
'drt': os.path.join(build_dir, drt_path),
'dartium': os.path.join(build_dir, dartium_path),
'dart': os.path.join(build_dir, dart_path),
'arch': options.arch,
}
test_script = os.path.join(srcpath, 'webkit', 'tools', 'layout_tests',
'run_webkit_tests.py')
errors = False
for component in components:
for checkmode in checkmodes:
# Capture errors and report at the end.
try:
if ('layout' in suites and
'layout' in TEST_INFO[component] and
checkmode in TEST_INFO[component]['layout']):
# Run layout tests in this mode
dart_flags = ' '.join(TEST_INFO[component]['layout'][checkmode])
if options.layout_test:
test = os.path.join(DART_TEST_DIR, options.layout_test)
else:
test = DART_TEST_DIR
package_root = os.path.join(build_dir, 'packages')
utils.runCommand(['python',
test_script,
test_mode,
show_results,
'--time-out-ms', str(timeout),
# Temporary hack to fix issue with svn vs. svn.bat.
'--builder-name', 'BuildBot',
'--additional-env-var',
'DART_FLAGS=%s' % dart_flags,
'--additional-env-var',
'DART_PACKAGE_ROOT=file://%s' % package_root,
test])
# Run core dart tests
if ('core' in suites and
'core' in TEST_INFO[component] and
checkmode in TEST_INFO[component]['core']):
core_flags = TEST_INFO[component]['core'][checkmode]
core_flags = map(lambda flag: flag % executable_map, core_flags)
if options.buildbot:
core_flags = ['--progress=buildbot'] + core_flags
tester = os.path.join(srcpath, 'dart', 'tools', 'test.py')
test_filter = [options.test_filter] if options.test_filter else []
utils.runCommand(['python', tester] + core_flags + test_filter)
except (StandardError, Exception) as e:
print 'Fail: ' + str(e)
errors = True
if errors:
return 1
else:
return 0
if __name__ == '__main__':
try:
sys.exit(main())
except StandardError as e:
print 'Fail: ' + str(e)
sys.exit(1)