Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(148)

Side by Side Diff: dart/tools/testing/architecture.py

Issue 8408002: Add a new variable environment for testing, to replace the misusage of 'arch'. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/
Patch Set: '' Created 9 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 # Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file 1 # Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
2 # for details. All rights reserved. Use of this source code is governed by a 2 # for details. All rights reserved. Use of this source code is governed by a
3 # BSD-style license that can be found in the LICENSE file. 3 # BSD-style license that can be found in the LICENSE file.
4 # 4 #
5 5
6 """Runs a Dart unit test in different configurations.
7
8 Currently supported architectures include dartium, chromium, ia32, x64,
9 arm, simarm, and dartc.
10
11 Example:
12 run.py --arch=dartium --mode=release --test=Test.dart
13
14 """
15
16 import os 6 import os
17 import platform 7 import platform
18 import re 8 import re
19 import shutil 9 import shutil
20 import subprocess 10 import subprocess
21 import sys 11 import sys
22 import tempfile 12 import tempfile
23 13
24 import utils 14 import utils
25 15
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
137 """Returns True if the source has a #library statement.""" 127 """Returns True if the source has a #library statement."""
138 if LIBRARY_DEFINITION_PATTERN.search(source): 128 if LIBRARY_DEFINITION_PATTERN.search(source):
139 return True 129 return True
140 if SOURCE_OR_IMPORT_PATTERN.search(source): 130 if SOURCE_OR_IMPORT_PATTERN.search(source):
141 print ('WARNING for %s: Browser tests need a #library ' 131 print ('WARNING for %s: Browser tests need a #library '
142 'for a file that #import or #source' % test) 132 'for a file that #import or #source' % test)
143 return False 133 return False
144 134
145 135
146 class Architecture(object): 136 class Architecture(object):
147 """Definitions for different ways to test based on the --arch flag.""" 137 """Definitions for different ways to test based on the FOOBAR flag."""
148 138
149 def __init__(self, root_path, arch, mode, test): 139 def __init__(self, root_path, arch, mode, FOOBAR, test):
150 self.root_path = root_path 140 self.root_path = root_path
151 self.arch = arch 141 self.arch = arch
152 self.mode = mode 142 self.mode = mode
143 self.FOOBAR = FOOBAR
153 self.test = test 144 self.test = test
154 self.build_root = utils.GetBuildRoot(OS_GUESS, self.mode, self.arch) 145 self.build_root = utils.GetBuildRoot(OS_GUESS, self.mode, self.arch)
155 source = file(test).read() 146 source = file(test).read()
156 self.vm_options = [] 147 self.vm_options = []
157 self.dart_options = utils.ParseTestOptions(DART_OPTIONS_PATTERN, 148 self.dart_options = utils.ParseTestOptions(DART_OPTIONS_PATTERN,
158 source, 149 source,
159 root_path) 150 root_path)
160 self.is_web_test = _IsWebTest(source) 151 self.is_web_test = _IsWebTest(source)
161 self.temp_dir = None 152 self.temp_dir = None
162 153
163 def HasFatalTypeErrors(self): 154 def HasFatalTypeErrors(self):
164 """Returns True if this type of arch supports --fatal-type-errors.""" 155 """Returns True if this type of FOOBAR supports --fatal-type-errors."""
165 return False 156 return False
166 157
167 def GetTestFrameworkPath(self): 158 def GetTestFrameworkPath(self):
168 """Path to dart source (TestFramework.dart) for testing framework.""" 159 """Path to dart source (TestFramework.dart) for testing framework."""
169 return os.path.join(self.root_path, 'tests', 'isolate', 'src', 160 return os.path.join(self.root_path, 'tests', 'isolate', 'src',
170 'TestFramework.dart') 161 'TestFramework.dart')
171 162
172 163
173 class BrowserArchitecture(Architecture): 164 class BrowserArchitecture(Architecture):
174 """Architecture that runs compiled dart->JS through a browser.""" 165 """Architecture that runs compiled dart->JS through a browser."""
175 166
176 def __init__(self, root_path, arch, mode, test): 167 def __init__(self, root_path, arch, mode, FOOBAR, test):
177 super(BrowserArchitecture, self).__init__(root_path, arch, mode, test) 168 super(BrowserArchitecture, self).__init__(root_path, arch, mode, FOOBAR, tes t)
178 self.temp_dir = tempfile.mkdtemp() 169 self.temp_dir = tempfile.mkdtemp()
179 if not self.is_web_test: self.GenerateWebTestScript() 170 if not self.is_web_test: self.GenerateWebTestScript()
180 171
181 def GetTestScriptFile(self): 172 def GetTestScriptFile(self):
182 """Returns the name of the .dart file to compile.""" 173 """Returns the name of the .dart file to compile."""
183 if self.is_web_test: return os.path.abspath(self.test) 174 if self.is_web_test: return os.path.abspath(self.test)
184 return os.path.join(self.temp_dir, 'test.dart') 175 return os.path.join(self.temp_dir, 'test.dart')
185 176
186 def GetHtmlContents(self): 177 def GetHtmlContents(self):
187 """Fills in the HTML_CONTENTS template with info for this architecture.""" 178 """Fills in the HTML_CONTENTS template with info for this architecture."""
(...skipping 24 matching lines...) Expand all
212 os.makedirs(html_path) 203 os.makedirs(html_path)
213 return html_path 204 return html_path
214 205
215 return self.temp_dir 206 return self.temp_dir
216 207
217 def GetTestContents(self, library_file): 208 def GetTestContents(self, library_file):
218 """Pastes a preamble on the front of the .dart file before testing.""" 209 """Pastes a preamble on the front of the .dart file before testing."""
219 unittest_path = os.path.join(self.root_path, 'client', 'testing', 210 unittest_path = os.path.join(self.root_path, 'client', 'testing',
220 'unittest', 'unittest.dart') 211 'unittest', 'unittest.dart')
221 212
222 if self.arch == 'chromium': 213 if self.FOOBAR == 'chromium':
223 dom_path = os.path.join(self.root_path, 'client', 'testing', 214 dom_path = os.path.join(self.root_path, 'client', 'testing',
224 'unittest', 'dom_for_unittest.dart') 215 'unittest', 'dom_for_unittest.dart')
225 else: 216 else:
226 dom_path = os.path.join('dart:dom') 217 dom_path = os.path.join('dart:dom')
227 218
228 test_framework_path = self.GetTestFrameworkPath() 219 test_framework_path = self.GetTestFrameworkPath()
229 test_path = os.path.abspath(self.test) 220 test_path = os.path.abspath(self.test)
230 221
231 inputs = { 222 inputs = {
232 'unittest': unittest_path, 223 'unittest': unittest_path,
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
317 def Cleanup(self): 308 def Cleanup(self):
318 """Removes temporary files created for the test.""" 309 """Removes temporary files created for the test."""
319 if self.temp_dir: 310 if self.temp_dir:
320 shutil.rmtree(self.temp_dir) 311 shutil.rmtree(self.temp_dir)
321 self.temp_dir = None 312 self.temp_dir = None
322 313
323 314
324 class ChromiumArchitecture(BrowserArchitecture): 315 class ChromiumArchitecture(BrowserArchitecture):
325 """Architecture that runs compiled dart->JS through a chromium DRT.""" 316 """Architecture that runs compiled dart->JS through a chromium DRT."""
326 317
327 def __init__(self, root_path, arch, mode, test): 318 def __init__(self, root_path, arch, mode, FOOBAR, test):
328 super(ChromiumArchitecture, self).__init__(root_path, arch, mode, test) 319 super(ChromiumArchitecture, self).__init__(root_path, arch, mode, FOOBAR, te st)
329 320
330 def GetScriptType(self): 321 def GetScriptType(self):
331 return 'text/javascript' 322 return 'text/javascript'
332 323
333 def GetScriptPath(self): 324 def GetScriptPath(self):
334 """Returns the name of the output .js file to create.""" 325 """Returns the name of the output .js file to create."""
335 path = self.GetTestScriptFile() 326 path = self.GetTestScriptFile()
336 return os.path.abspath(os.path.join(self.temp_dir, 327 return os.path.abspath(os.path.join(self.temp_dir,
337 os.path.basename(path) + '.js')) 328 os.path.basename(path) + '.js'))
338 329
(...skipping 22 matching lines...) Expand all
361 cmd.append(self.GetTestScriptFile()) 352 cmd.append(self.GetTestScriptFile())
362 return cmd 353 return cmd
363 354
364 def Compile(self): 355 def Compile(self):
365 return ExecuteCommand(self.GetCompileCommand()) 356 return ExecuteCommand(self.GetCompileCommand())
366 357
367 358
368 class DartiumArchitecture(BrowserArchitecture): 359 class DartiumArchitecture(BrowserArchitecture):
369 """Architecture that runs dart in an VM embedded in DumpRenderTree.""" 360 """Architecture that runs dart in an VM embedded in DumpRenderTree."""
370 361
371 def __init__(self, root_path, arch, mode, test): 362 def __init__(self, root_path, arch, mode, FOOBAR, test):
372 super(DartiumArchitecture, self).__init__(root_path, arch, mode, test) 363 super(DartiumArchitecture, self).__init__(root_path, arch, mode, FOOBAR, tes t)
373 364
374 def GetScriptType(self): 365 def GetScriptType(self):
375 return 'application/dart' 366 return 'application/dart'
376 367
377 def GetScriptPath(self): 368 def GetScriptPath(self):
378 return 'file:///' + self.GetTestScriptFile() 369 return 'file:///' + self.GetTestScriptFile()
379 370
380 def GetHtmlName(self): 371 def GetHtmlName(self):
381 path = os.path.relpath(self.test, self.root_path).replace(os.sep, '_') 372 path = os.path.relpath(self.test, self.root_path).replace(os.sep, '_')
382 return path + '.dartium.html' 373 return path + '.dartium.html'
383 374
384 def GetCompileCommand(self, fatal_static_type_errors=False): 375 def GetCompileCommand(self, fatal_static_type_errors=False):
385 fatal_static_type_errors = fatal_static_type_errors # shutup lint! 376 fatal_static_type_errors = fatal_static_type_errors # shutup lint!
386 return None 377 return None
387 378
388 def Compile(self): 379 def Compile(self):
389 return 0 380 return 0
390 381
391 382
392 class StandaloneArchitecture(Architecture): 383 class StandaloneArchitecture(Architecture):
393 """Base class for architectures that run tests without a browser.""" 384 """Base class for architectures that run tests without a browser."""
394 385
395 def __init__(self, root_path, arch, mode, test): 386 def __init__(self, root_path, arch, mode, FOOBAR, test):
396 super(StandaloneArchitecture, self).__init__(root_path, arch, mode, test) 387 super(StandaloneArchitecture, self).__init__(root_path, arch, mode, FOOBAR, test)
397 388
398 def GetCompileCommand(self, fatal_static_type_errors=False): 389 def GetCompileCommand(self, fatal_static_type_errors=False):
399 fatal_static_type_errors = fatal_static_type_errors # shutup lint! 390 fatal_static_type_errors = fatal_static_type_errors # shutup lint!
400 return None 391 return None
401 392
402 def GetRunCommand(self, fatal_static_type_errors=False): 393 def GetRunCommand(self, fatal_static_type_errors=False):
403 """Returns a command line to execute for the test.""" 394 """Returns a command line to execute for the test."""
404 dart = self.GetExecutable() 395 dart = self.GetExecutable()
405 test_name = os.path.basename(self.test) 396 test_name = os.path.basename(self.test)
406 test_path = os.path.abspath(self.test) 397 test_path = os.path.abspath(self.test)
(...skipping 23 matching lines...) Expand all
430 421
431 def Cleanup(self): 422 def Cleanup(self):
432 return 423 return
433 424
434 425
435 # Long term, we should do the running machinery that is currently in 426 # Long term, we should do the running machinery that is currently in
436 # DartRunner.java 427 # DartRunner.java
437 class DartcArchitecture(StandaloneArchitecture): 428 class DartcArchitecture(StandaloneArchitecture):
438 """Runs the Dart ->JS compiler then runs the result in a standalone JS VM.""" 429 """Runs the Dart ->JS compiler then runs the result in a standalone JS VM."""
439 430
440 def __init__(self, root_path, arch, mode, test): 431 def __init__(self, root_path, arch, mode, FOOBAR, test):
441 super(DartcArchitecture, self).__init__(root_path, arch, mode, test) 432 super(DartcArchitecture, self).__init__(root_path, arch, mode, FOOBAR, test)
442 433
443 def GetExecutable(self): 434 def GetExecutable(self):
444 """Returns the name of the executable to run the test.""" 435 """Returns the name of the executable to run the test."""
445 return os.path.abspath(os.path.join(self.build_root, 436 return os.path.abspath(os.path.join(self.build_root,
446 'compiler', 437 'compiler',
447 'bin', 438 'bin',
448 'dartc_test')) 439 'dartc_test'))
449 440
450 def GetFatalTypeErrorsFlags(self): 441 def GetFatalTypeErrorsFlags(self):
451 return ['--fatal-type-errors'] 442 return ['--fatal-type-errors']
452 443
453 def HasFatalTypeErrors(self): 444 def HasFatalTypeErrors(self):
454 return True 445 return True
455 446
456 def GetRunCommand(self, fatal_static_type_errors=False): 447 def GetRunCommand(self, fatal_static_type_errors=False):
457 """Returns a command line to execute for the test.""" 448 """Returns a command line to execute for the test."""
458 cmd = super(DartcArchitecture, self).GetRunCommand( 449 cmd = super(DartcArchitecture, self).GetRunCommand(
459 fatal_static_type_errors) 450 fatal_static_type_errors)
460 return cmd 451 return cmd
461 452
462 453
463 class RuntimeArchitecture(StandaloneArchitecture): 454 class RuntimeArchitecture(StandaloneArchitecture):
464 """Executes tests on the standalone VM (runtime).""" 455 """Executes tests on the standalone VM (runtime)."""
465 456
466 def __init__(self, root_path, arch, mode, test): 457 def __init__(self, root_path, arch, mode, FOOBAR, test):
467 super(RuntimeArchitecture, self).__init__(root_path, arch, mode, test) 458 super(RuntimeArchitecture, self).__init__(root_path, arch, mode, FOOBAR, tes t)
468 459
469 def GetExecutable(self): 460 def GetExecutable(self):
470 """Returns the name of the executable to run the test.""" 461 """Returns the name of the executable to run the test."""
471 return os.path.abspath(os.path.join(self.build_root, 'dart_bin')) 462 return os.path.abspath(os.path.join(self.build_root, 'dart_bin'))
472 463
473 464
474 def ExecutePipedCommand(cmd, verbose): 465 def ExecutePipedCommand(cmd, verbose):
475 """Execute a command in a subprocess.""" 466 """Execute a command in a subprocess."""
476 if verbose: 467 if verbose:
477 print 'Executing: ' + ' '.join(cmd) 468 print 'Executing: ' + ' '.join(cmd)
478 pipe = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 469 pipe = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
479 (output, err) = pipe.communicate() 470 (output, err) = pipe.communicate()
480 if pipe.returncode != 0 and verbose: 471 if pipe.returncode != 0 and verbose:
481 print 'Execution failed: ' + output + '\n' + err 472 print 'Execution failed: ' + output + '\n' + err
482 print output 473 print output
483 print err 474 print err
484 return pipe.returncode, output, err 475 return pipe.returncode, output, err
485 476
486 477
487 def ExecuteCommand(cmd, verbose=False): 478 def ExecuteCommand(cmd, verbose=False):
488 """Execute a command in a subprocess.""" 479 """Execute a command in a subprocess."""
489 if verbose: print 'Executing: ' + ' '.join(cmd) 480 if verbose: print 'Executing: ' + ' '.join(cmd)
490 return subprocess.call(cmd) 481 return subprocess.call(cmd)
491 482
492 483
493 def GetArchitecture(arch, mode, test): 484 def GetArchitecture(arch, mode, FOOBAR, test):
494 root_path = os.path.abspath(os.path.join(os.path.dirname(sys.argv[0]), '..')) 485 root_path = os.path.abspath(os.path.join(os.path.dirname(sys.argv[0]), '..'))
495 if arch == 'chromium': 486 if FOOBAR == 'chromium':
496 return ChromiumArchitecture(root_path, arch, mode, test) 487 return ChromiumArchitecture(root_path, arch, mode, FOOBAR, test)
497 488
498 elif arch == 'dartium': 489 elif FOOBAR == 'dartium':
499 return DartiumArchitecture(root_path, arch, mode, test) 490 return DartiumArchitecture(root_path, arch, mode, FOOBAR, test)
500 491
501 elif arch in ['ia32', 'x64', 'simarm', 'arm']: 492 elif FOOBAR in ['vm']:
502 return RuntimeArchitecture(root_path, arch, mode, test) 493 return RuntimeArchitecture(root_path, arch, mode, FOOBAR, test)
503 494
504 elif arch == 'dartc': 495 elif FOOBAR == 'dartc':
505 return DartcArchitecture(root_path, arch, mode, test) 496 return DartcArchitecture(root_path, arch, mode, FOOBAR, test)
OLDNEW
« dart/tools/test.py ('K') | « dart/tools/test.py ('k') | dart/tools/testing/test_case.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698