| #!/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() |