#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Copyright 2018 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

"""Wrapper to run all tests with default settings."""

from __future__ import print_function

import os
import subprocess
import sys


CHROMITE_DIR = os.path.dirname(os.path.abspath(__file__))
SCRIPTS_DIR = os.path.join(CHROMITE_DIR, 'scripts')
LEGACY_TEST_RUNNER = os.path.join(SCRIPTS_DIR, 'run_tests')
PYTEST_RUNNER = os.path.join(SCRIPTS_DIR, 'run_pytest')


def main(argv):
  if argv:
    print(
        'ERROR: This script takes no arguments. If you want to pass arguments\n'
        'to the test suite, try running `scripts/run_tests` or `run_pytest`.',
        file=sys.stderr)
    sys.exit(1)

  py2_tests_result = run_legacy_tests()
  print('')
  py3_tests_result = run_pytest()
  return py2_tests_result or py3_tests_result


def run_legacy_tests():
  print('Running legacy Python 2 tests:')
  print('')
  res = subprocess.run([LEGACY_TEST_RUNNER, '--py2'])
  return res.returncode


def run_pytest():
  print('Running pytest under Python 3:')
  print('')
  res = subprocess.run([PYTEST_RUNNER])
  return res.returncode


if __name__ == '__main__':
  sys.exit(main(sys.argv[1:]))
