| #!/usr/bin/python |
| |
| # 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', 'ia32') |
| 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', 'dartanalyzer'), |
| os.path.join('tests', 'html', 'element_test.dart'), |
| '--dart-sdk=sdk', |
| '--show-package-warnings', |
| ]) |
| |
| 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 docs(): |
| return call([ |
| os.path.join(dart_out_dir, 'dart-sdk', 'bin', 'dart'), |
| '--package-root=%s' % os.path.join(dart_out_dir, 'packages/'), |
| os.path.join('tools', 'dom', 'docs', 'bin', 'docs.dart'), |
| ]) |
| |
| def test_docs(): |
| return call([ |
| os.path.join('tools', 'test.py'), |
| '--mode=release', |
| '--checked', |
| 'docs' |
| ]) |
| |
| 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'], |
| 'docs': [docs, 'Generates docs.json'], |
| 'gen': [gen, 'Re-generate DOM generated files (run go.sh)'], |
| 'size_check': [size_check, 'Check the size of dart2js compiled Swarm'], |
| 'test_docs': [test_docs, 'Tests docs.dart'], |
| '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() |