| #!/usr/bin/env python3 | 
 | # Copyright (c) 2011, 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. | 
 |  | 
 | from contextlib import ExitStack | 
 | import os | 
 | import string | 
 | import subprocess | 
 | import sys | 
 |  | 
 | import utils | 
 |  | 
 |  | 
 | def Main(): | 
 |     args = sys.argv[1:] | 
 |  | 
 |     cleanup_dart = False | 
 |     if '--cleanup-dart-processes' in args: | 
 |         args.remove('--cleanup-dart-processes') | 
 |         cleanup_dart = True | 
 |  | 
 |     tools_dir = os.path.dirname(os.path.realpath(__file__)) | 
 |     repo_dir = os.path.dirname(tools_dir) | 
 |     dart_test_script = os.path.join(repo_dir, 'pkg', 'test_runner', 'bin', | 
 |                                     'test_runner.dart') | 
 |     command = [utils.CheckedInSdkExecutable(), dart_test_script] + args | 
 |  | 
 |     # The testing script potentially needs the android platform tools in PATH so | 
 |     # we do that in ./tools/test.py (a similar logic exists in ./tools/build.py). | 
 |     android_platform_tools = os.path.normpath( | 
 |         os.path.join(tools_dir, | 
 |                      '../third_party/android_tools/sdk/platform-tools')) | 
 |     if os.path.isdir(android_platform_tools): | 
 |         os.environ['PATH'] = '%s%s%s' % (os.environ['PATH'], os.pathsep, | 
 |                                          android_platform_tools) | 
 |  | 
 |     with utils.FileDescriptorLimitIncreaser(): | 
 |         with ExitStack() as stack: | 
 |             for ctx in utils.CoreDumpArchiver(args): | 
 |                 stack.enter_context(ctx) | 
 |             exit_code = subprocess.call(command) | 
 |  | 
 |     if cleanup_dart: | 
 |         cleanup_command = [ | 
 |             sys.executable, | 
 |             os.path.join(tools_dir, 'task_kill.py'), '--kill_dart=True', | 
 |             '--kill_vc=False' | 
 |         ] | 
 |         subprocess.call(cleanup_command) | 
 |  | 
 |     utils.DiagnoseExitCode(exit_code, command) | 
 |     return exit_code | 
 |  | 
 |  | 
 | if __name__ == '__main__': | 
 |     sys.exit(Main()) |