#!/usr/bin/env python
#
# Copyright (c) 2016, 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 os.path
import shutil
import sys
import subprocess

import bot
import bot_utils

TARGETS = [
  'language_2',
  'corelib_2',
  'lib_2'
]

FLAGS = [
  '--strong'
]

if __name__ == '__main__':
  with bot.BuildStep('Build SDK and dartdevc test packages'):
    bot.RunProcess([sys.executable, './tools/build.py', '--mode=release',
         '--arch=x64', 'dartdevc_test'])

  with bot.BuildStep('Run tests'):
    (bot_name, _) = bot.GetBotName()
    system = bot_utils.GetSystemFromName(bot_name)
    if system == 'linux':
      bot.RunProcess([
        'xvfb-run', sys.executable, './tools/test.py', '--strong', '-mrelease',
        '-cdartdevc', '-rchrome', '-ax64', '--report', '--time', '--checked',
        '--progress=buildbot', '--write-result-log'] + TARGETS )
    else:
      info = bot.BuildInfo('dartdevc', 'chrome', 'release', system,
          arch='x64', checked=True)
      bot.RunTest('dartdevc', info, TARGETS, flags=FLAGS)
