#!/usr/bin/env python
# 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.

import os
import string
import subprocess
import sys

import utils


def Main():
  args = sys.argv[1:]
  tools_dir = os.path.dirname(os.path.realpath(__file__))
  dart_test_script = string.join(
      [tools_dir, 'testing', 'dart', 'main.dart'], os.sep)
  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 utils.CoreDumpArchiver(args):
      exit_code = subprocess.call(command)

  utils.DiagnoseExitCode(exit_code, command)
  return exit_code


if __name__ == '__main__':
  sys.exit(Main())
