| #!/usr/bin/env python3 | 
 |  | 
 | # Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file | 
 | # for details. All rights reserved. Use of this source code is governed by a | 
 | # BSD-style license that can be found in the LICENSE file. | 
 |  | 
 | # A script which makes it easy to execute common DOM-related tasks | 
 |  | 
 | import os | 
 | import subprocess | 
 | import sys | 
 | from sys import argv | 
 |  | 
 | sys.path.append(os.path.join(os.path.dirname(__file__), '..')) | 
 | import utils | 
 |  | 
 | dart_out_dir = utils.GetBuildRoot(utils.GuessOS(), 'release', '64') | 
 | if utils.IsWindows(): | 
 |     dart_bin = os.path.join(dart_out_dir, 'dart.exe') | 
 | else: | 
 |     dart_bin = os.path.join(dart_out_dir, 'dart') | 
 |  | 
 | dart_dir = os.path.abspath( | 
 |     os.path.join( | 
 |         os.path.dirname(os.path.realpath(__file__)), os.path.pardir, | 
 |         os.path.pardir)) | 
 |  | 
 |  | 
 | def help(): | 
 |     print('Helper script to make it easy to perform common tasks encountered ' | 
 |           'during the life of a Dart DOM developer.\n' | 
 |           '\n' | 
 |           'For example, to re-generate DOM classes then run a specific test:\n' | 
 |           '  dom.py gen test_drt html/element_test\n' | 
 |           '\n' | 
 |           'Or re-generate DOM classes and run the Dart analyzer:\n' | 
 |           '  dom.py gen analyze\n') | 
 |     print('Commands: ') | 
 |     for cmd in sorted(commands.keys()): | 
 |         print('\t%s - %s' % (cmd, commands[cmd][1])) | 
 |  | 
 |  | 
 | def analyze(): | 
 |     ''' Runs the dart analyzer. ''' | 
 |     return call([ | 
 |         os.path.join(dart_out_dir, 'dart-sdk', 'bin', 'dart'), | 
 |         'analyze', | 
 |         os.path.join('tests', 'lib', 'html', 'element_test.dart'), | 
 |     ]) | 
 |  | 
 |  | 
 | def build(): | 
 |     ''' Builds the Dart binary ''' | 
 |     return call([ | 
 |         os.path.join('tools', 'build.py'), | 
 |         '--mode=release', | 
 |         '--arch=ia32', | 
 |         'runtime', | 
 |     ]) | 
 |  | 
 |  | 
 | def dart2js(): | 
 |     compile_dart2js(argv.pop(0), True) | 
 |  | 
 |  | 
 | def compile_dart2js(dart_file, checked): | 
 |     out_file = dart_file + '.js' | 
 |     dart2js_path = os.path.join(dart_out_dir, 'dart-sdk', 'bin', 'dart2js') | 
 |     args = [dart2js_path, dart_file, '--library-root=sdk/', '-o%s' % out_file] | 
 |     if checked: | 
 |         args.append('--checked') | 
 |  | 
 |     call(args) | 
 |     return out_file | 
 |  | 
 |  | 
 | def gen(): | 
 |     os.chdir(os.path.join('tools', 'dom', 'scripts')) | 
 |     result = call([ | 
 |         os.path.join(os.getcwd(), 'dartdomgenerator.py'), '--rebuild', | 
 |         '--parallel', '--systems=htmldart2js,htmldartium' | 
 |     ]) | 
 |     os.chdir(os.path.join('..', '..', '..')) | 
 |     return result | 
 |  | 
 |  | 
 | def size_check(): | 
 |     ''' Displays the dart2js size of swarm. ''' | 
 |     dart_file = os.path.join('samples', 'swarm', 'swarm.dart') | 
 |     out_file = compile_dart2js(dart_file, False) | 
 |  | 
 |     return call([ | 
 |         'du', | 
 |         '-kh', | 
 |         '--apparent-size', | 
 |         out_file, | 
 |     ]) | 
 |  | 
 |     os.remove(out_file) | 
 |     os.remove(out_file + '.deps') | 
 |     os.remove(out_file + '.map') | 
 |  | 
 |  | 
 | def test_ff(): | 
 |     test_dart2js('ff', argv) | 
 |  | 
 |  | 
 | def test_drt(): | 
 |     test_dart2js('drt', argv) | 
 |  | 
 |  | 
 | def test_chrome(): | 
 |     test_dart2js('chrome', argv) | 
 |  | 
 |  | 
 | def test_dart2js(browser, argv): | 
 |     cmd = [ | 
 |         os.path.join('tools', 'test.py'), | 
 |         '-c', | 
 |         'dart2js', | 
 |         '-r', | 
 |         browser, | 
 |         '--mode=release', | 
 |         '--checked', | 
 |         '--arch=ia32', | 
 |         '-v', | 
 |     ] | 
 |     if argv: | 
 |         cmd.append(argv.pop(0)) | 
 |     else: | 
 |         print( | 
 |             'Test commands should be followed by tests to run. Defaulting to html' | 
 |         ) | 
 |         cmd.append('html') | 
 |     return call(cmd) | 
 |  | 
 |  | 
 | def test_server(): | 
 |     start_test_server(5400, os.path.join('out', 'ReleaseX64')) | 
 |  | 
 |  | 
 | def test_server_dartium(): | 
 |     start_test_server(5500, os.path.join('..', 'out', 'Release')) | 
 |  | 
 |  | 
 | def start_test_server(port, build_directory): | 
 |     print( | 
 |         'Browse tests at ' | 
 |         '\033[94mhttp://localhost:%d/root_build/generated_tests/\033[0m' % port) | 
 |     return call([ | 
 |         utils.CheckedInSdkExecutable(), | 
 |         os.path.join('tools', 'testing', 'dart', 'http_server.dart'), | 
 |         '--port=%d' % port, | 
 |         '--crossOriginPort=%d' % (port + 1), '--network=0.0.0.0', | 
 |         '--build-directory=%s' % build_directory | 
 |     ]) | 
 |  | 
 |  | 
 | def call(args): | 
 |     print(' '.join(args)) | 
 |     pipe = subprocess.Popen( | 
 |         args, stdout=subprocess.PIPE, stderr=subprocess.PIPE) | 
 |     output, error = pipe.communicate() | 
 |     if output: | 
 |         print(output) | 
 |     if error: | 
 |         print(error) | 
 |     return pipe.returncode | 
 |  | 
 |  | 
 | commands = { | 
 |     'analyze': [analyze, 'Run the dart analyzer'], | 
 |     'build': [build, 'Build dart in release mode'], | 
 |     'dart2js': [dart2js, 'Run dart2js on the .dart file specified'], | 
 |     'gen': [gen, 'Re-generate DOM generated files (run go.sh)'], | 
 |     'size_check': [size_check, 'Check the size of dart2js compiled Swarm'], | 
 |     'test_chrome': [ | 
 |         test_chrome, 'Run tests in checked mode in Chrome.\n' | 
 |         '\t\tOptionally provide name of test to run.' | 
 |     ], | 
 |     # TODO(antonm): fix option name. | 
 |     'test_drt': [ | 
 |         test_drt, 'Run tests in checked mode in content shell.\n' | 
 |         '\t\tOptionally provide name of test to run.' | 
 |     ], | 
 |     'test_ff': [ | 
 |         test_ff, 'Run tests in checked mode in Firefox.\n' | 
 |         '\t\tOptionally provide name of test to run.' | 
 |     ], | 
 |     'test_server': [ | 
 |         test_server, 'Starts the testing server for manually ' | 
 |         'running browser tests.' | 
 |     ], | 
 |     'test_server_dartium': [ | 
 |         test_server_dartium, 'Starts the testing server for ' | 
 |         'manually running browser tests from a dartium enlistment.' | 
 |     ], | 
 | } | 
 |  | 
 |  | 
 | def main(): | 
 |     success = True | 
 |     argv.pop(0) | 
 |  | 
 |     if not argv: | 
 |         help() | 
 |         success = False | 
 |  | 
 |     while (argv): | 
 |         # Make sure that we're always rooted in the dart root folder. | 
 |         os.chdir(dart_dir) | 
 |         command = argv.pop(0) | 
 |  | 
 |         if not command in commands: | 
 |             help() | 
 |             success = False | 
 |             break | 
 |         returncode = commands[command][0]() | 
 |         success = success and not bool(returncode) | 
 |  | 
 |     sys.exit(not success) | 
 |  | 
 |  | 
 | if __name__ == '__main__': | 
 |     main() |