| OLD | NEW |
| (Empty) |
| 1 #!/usr/bin/env python | |
| 2 # | |
| 3 # Copyright 2011 Google Inc. All Rights Reserved. | |
| 4 | |
| 5 import fnmatch | |
| 6 import optparse | |
| 7 import os | |
| 8 import re | |
| 9 import shutil | |
| 10 import subprocess | |
| 11 import sys | |
| 12 import urllib | |
| 13 import utils | |
| 14 | |
| 15 SCRIPT_TAG = '<script type="application/%s" src="%s"></script>\n' | |
| 16 | |
| 17 DART_TEST_DIR = os.path.join('dart') | |
| 18 | |
| 19 DART_VM_FLAGS = [ | |
| 20 ] | |
| 21 DART_VM_CHECKED_FLAGS = DART_VM_FLAGS + [ | |
| 22 '--enable_type_checks', | |
| 23 '--warning_as_error', | |
| 24 ] | |
| 25 | |
| 26 TEST_DRT_FLAGS = [ | |
| 27 '--compiler=none', | |
| 28 '--runtime=drt', | |
| 29 '--drt=%(drt)s', | |
| 30 '--mode=%(mode)s', | |
| 31 '--arch=%(arch)s', | |
| 32 '--build-directory=%(build_dir)s', | |
| 33 '--report', | |
| 34 '--time', | |
| 35 ] | |
| 36 | |
| 37 TEST_DRT_CHECKED_FLAGS = TEST_DRT_FLAGS + [ | |
| 38 '--checked', | |
| 39 ] | |
| 40 | |
| 41 TEST_DARTIUM_FLAGS = [ | |
| 42 '--compiler=none', | |
| 43 '--runtime=dartium', | |
| 44 '--dartium=%(dartium)s', | |
| 45 '--mode=%(mode)s', | |
| 46 '--build-directory=%(build_dir)s', | |
| 47 '--report', | |
| 48 '--time', | |
| 49 ] | |
| 50 | |
| 51 TEST_DARTIUM_CHECKED_FLAGS = TEST_DARTIUM_FLAGS + [ | |
| 52 '--checked', | |
| 53 ] | |
| 54 | |
| 55 TEST_INFO = { | |
| 56 'dartium': { | |
| 57 'core': { | |
| 58 'checked': TEST_DARTIUM_CHECKED_FLAGS, | |
| 59 'unchecked': TEST_DARTIUM_FLAGS, | |
| 60 }, | |
| 61 }, | |
| 62 'drt': { | |
| 63 'layout': { | |
| 64 'checked': DART_VM_CHECKED_FLAGS, | |
| 65 'unchecked': DART_VM_FLAGS, | |
| 66 }, | |
| 67 'core': { | |
| 68 'checked': TEST_DRT_CHECKED_FLAGS, | |
| 69 'unchecked': TEST_DRT_FLAGS, | |
| 70 }, | |
| 71 }, | |
| 72 } | |
| 73 | |
| 74 COMPONENTS = TEST_INFO.keys() | |
| 75 SUITES = [ 'layout', 'core' ] | |
| 76 | |
| 77 def main(): | |
| 78 parser = optparse.OptionParser() | |
| 79 parser.add_option('--mode', dest='mode', | |
| 80 action='store', type='string', | |
| 81 help='Test mode (Debug or Release)') | |
| 82 parser.add_option('--component', dest='component', | |
| 83 default='drt', | |
| 84 action='store', type='string', | |
| 85 help='Execution mode (dartium, drt or all)') | |
| 86 parser.add_option('--suite', dest='suite', | |
| 87 default='all', | |
| 88 action='store', type='string', | |
| 89 help='Test suite (layout, core, or all)') | |
| 90 parser.add_option('--arch', dest='arch', | |
| 91 default='ia32', | |
| 92 action='store', type='string', | |
| 93 help='Target architecture') | |
| 94 parser.add_option('--no-show-results', action='store_false', | |
| 95 default=True, dest='show_results', | |
| 96 help='Don\'t launch a browser with results ' | |
| 97 'after the tests are done') | |
| 98 parser.add_option('--checked', action='store_true', | |
| 99 default=False, dest='checked', | |
| 100 help='Run Dart code in checked mode') | |
| 101 parser.add_option('--unchecked', action='store_true', | |
| 102 default=False, dest='unchecked', | |
| 103 help='Run Dart code in unchecked mode') | |
| 104 parser.add_option('--buildbot', action='store_true', | |
| 105 default=False, dest='buildbot', | |
| 106 help='Print results in buildbot format') | |
| 107 parser.add_option('--layout-test', dest='layout_test', | |
| 108 default=None, | |
| 109 action='store', type='string', | |
| 110 help='Single layout test to run if set') | |
| 111 parser.add_option('--test-filter', dest='test_filter', | |
| 112 default=None, | |
| 113 action='store', type='string', | |
| 114 help='Test filter for core tests') | |
| 115 parser.add_option('--win-ninja-build', action='store_true', | |
| 116 default=False, dest='is_win_ninja', | |
| 117 help='We are on windows and use ninja for building.') | |
| 118 | |
| 119 (options, args) = parser.parse_args() | |
| 120 mode = options.mode | |
| 121 if not (mode in ['Debug', 'Release']): | |
| 122 raise Exception('Invalid test mode') | |
| 123 | |
| 124 if options.component == 'all': | |
| 125 components = COMPONENTS | |
| 126 elif not (options.component in COMPONENTS): | |
| 127 raise Exception('Invalid component %s' % options.component) | |
| 128 else: | |
| 129 components = [ options.component ] | |
| 130 | |
| 131 if options.suite == 'all': | |
| 132 suites = SUITES | |
| 133 elif not (options.suite in SUITES): | |
| 134 raise Exception('Invalid suite %s' % options.suite) | |
| 135 else: | |
| 136 suites = [ options.suite ] | |
| 137 | |
| 138 # If --checked or --unchecked not present, run with both. | |
| 139 checkmodes = ['unchecked', 'checked'] | |
| 140 if options.checked or options.unchecked: | |
| 141 checkmodes = [] | |
| 142 if options.unchecked: checkmodes.append('unchecked') | |
| 143 if options.checked: checkmodes.append('checked') | |
| 144 | |
| 145 pathname = os.path.dirname(sys.argv[0]) | |
| 146 fullpath = os.path.abspath(pathname) | |
| 147 srcpath = os.path.normpath(os.path.join(fullpath, '..')) | |
| 148 | |
| 149 test_mode = '' | |
| 150 timeout = 30000 | |
| 151 if mode == 'Debug': | |
| 152 test_mode = '--debug' | |
| 153 timeout = 60000 | |
| 154 | |
| 155 show_results = '' | |
| 156 if not options.show_results: | |
| 157 show_results = '--no-show-results' | |
| 158 | |
| 159 host_os = utils.guessOS() | |
| 160 if options.is_win_ninja: | |
| 161 host_os = 'win-ninja' | |
| 162 build_root, drt_path, dartium_path, dart_path = { | |
| 163 'mac': ( | |
| 164 'out', | |
| 165 os.path.join('Content Shell.app', 'Contents', 'MacOS', 'Content Shell'), | |
| 166 os.path.join('Chromium.app', 'Contents', 'MacOS', 'Chromium'), | |
| 167 'dart', | |
| 168 ), | |
| 169 'linux': ('out', 'content_shell', 'chrome', 'dart'), | |
| 170 'win': ('out', 'content_shell.exe', 'chrome.exe', 'dart.exe'), | |
| 171 'win-ninja': ('out', 'content_shell.exe', 'chrome.exe', 'dart.exe'), | |
| 172 }[host_os] | |
| 173 | |
| 174 build_dir = os.path.join(srcpath, build_root, mode) | |
| 175 | |
| 176 executable_map = { | |
| 177 'mode': mode.lower(), | |
| 178 'build_dir': os.path.relpath(build_dir), | |
| 179 'drt': os.path.join(build_dir, drt_path), | |
| 180 'dartium': os.path.join(build_dir, dartium_path), | |
| 181 'dart': os.path.join(build_dir, dart_path), | |
| 182 'arch': options.arch, | |
| 183 } | |
| 184 | |
| 185 test_script = os.path.join(srcpath, 'webkit', 'tools', 'layout_tests', | |
| 186 'run_webkit_tests.py') | |
| 187 | |
| 188 errors = False | |
| 189 for component in components: | |
| 190 for checkmode in checkmodes: | |
| 191 # Capture errors and report at the end. | |
| 192 try: | |
| 193 if ('layout' in suites and | |
| 194 'layout' in TEST_INFO[component] and | |
| 195 checkmode in TEST_INFO[component]['layout']): | |
| 196 # Run layout tests in this mode | |
| 197 dart_flags = ' '.join(TEST_INFO[component]['layout'][checkmode]) | |
| 198 | |
| 199 if options.layout_test: | |
| 200 test = os.path.join(DART_TEST_DIR, options.layout_test) | |
| 201 else: | |
| 202 test = DART_TEST_DIR | |
| 203 package_root = os.path.join(build_dir, 'packages') | |
| 204 utils.runCommand(['python', | |
| 205 test_script, | |
| 206 test_mode, | |
| 207 show_results, | |
| 208 '--time-out-ms', str(timeout), | |
| 209 # Temporary hack to fix issue with svn vs. svn.bat. | |
| 210 '--builder-name', 'BuildBot', | |
| 211 '--additional-env-var', | |
| 212 'DART_FLAGS=%s' % dart_flags, | |
| 213 '--additional-env-var', | |
| 214 'DART_PACKAGE_ROOT=file://%s' % package_root, | |
| 215 test]) | |
| 216 | |
| 217 # Run core dart tests | |
| 218 if ('core' in suites and | |
| 219 'core' in TEST_INFO[component] and | |
| 220 checkmode in TEST_INFO[component]['core']): | |
| 221 core_flags = TEST_INFO[component]['core'][checkmode] | |
| 222 core_flags = map(lambda flag: flag % executable_map, core_flags) | |
| 223 if options.buildbot: | |
| 224 core_flags = ['--progress=buildbot'] + core_flags | |
| 225 tester = os.path.join(srcpath, 'dart', 'tools', 'test.py') | |
| 226 test_filter = [options.test_filter] if options.test_filter else [] | |
| 227 utils.runCommand(['python', tester] + core_flags + test_filter) | |
| 228 except (StandardError, Exception) as e: | |
| 229 print 'Fail: ' + str(e) | |
| 230 errors = True | |
| 231 | |
| 232 if errors: | |
| 233 return 1 | |
| 234 else: | |
| 235 return 0 | |
| 236 | |
| 237 if __name__ == '__main__': | |
| 238 try: | |
| 239 sys.exit(main()) | |
| 240 except StandardError as e: | |
| 241 print 'Fail: ' + str(e) | |
| 242 sys.exit(1) | |
| OLD | NEW |