#!/usr/bin/env python
# Copyright (c) 2015 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

"""Runs all unit tests in catapult."""

import os
import sys


_CATAPULT_PATH = os.path.abspath(
    os.path.join(os.path.dirname(__file__), os.path.pardir))
_TESTS = [
    {'path': os.path.join(_CATAPULT_PATH, 'tracing', 'bin', 'run_tests')},
    {'path': os.path.join(
        _CATAPULT_PATH, 'third_party', 'py_vulcanize', 'run_py_tests')},
    {'path': os.path.join(_CATAPULT_PATH, 'perf_insights', 'bin', 'run_tests')},
    {'path': os.path.join(
        _CATAPULT_PATH, 'catapult_build', 'bin', 'run_py_tests')},
    {'path': os.path.join(_CATAPULT_PATH, 'catapult_base', 'bin', 'run_tests')},
    {'path': os.path.join(_CATAPULT_PATH, 'dependency_manager', 'bin', 'run_tests')},
    {'path': os.path.join(_CATAPULT_PATH, 'telemetry', 'bin', 'run_tests')},
    {'path': os.path.join(_CATAPULT_PATH, 'third_party', 'vinn', 'run_test')},
    # TODO(anniesullie): Add dashboard tests when SDK issues are sorted out.
]


if __name__ == '__main__':
  sys.path.append(_CATAPULT_PATH)
  from catapult_build import test_runner
  sys.exit(test_runner.Main('project', _TESTS, sys.argv))
