# Copyright 2017 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

"""Top-level presubmit script for checkteamtags

See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts for
details on the presubmit API.
"""


def CheckChangeOnUpload(input_api, output_api):
  return _CommonChecks(input_api, output_api)


def CheckChangeOnCommit(input_api, output_api):
  return _CommonChecks(input_api, output_api)


def _CommonChecks(input_api, output_api):
  """Does all presubmit checks for chekteamtags."""
  results = []
  results.extend(_RunUnitTests(input_api, output_api))
  results.extend(_RunPyLint(input_api, output_api))
  return results


def _RunUnitTests(input_api, output_api):
  """Runs unit tests for checkteamtags."""
  repo_root = input_api.change.RepositoryRoot()
  checkteamtags_dir = input_api.os_path.join(
    repo_root, 'tools', 'checkteamtags'
  )
  test_runner = input_api.os_path.join(checkteamtags_dir, 'run_tests')
  return_code = input_api.subprocess.call(
    [input_api.python3_executable, test_runner]
  )
  if return_code:
    message = 'Checkteamtags unit tests did not all pass.'
    return [output_api.PresubmitError(message)]
  return []


def _RunPyLint(input_api, output_api):
  """Runs unit tests for checkteamtags."""
  disabled_warnings = [
    'anomalous-backslash-in-string',
    'bad-indentation',
    'consider-using-from-import',
    'consider-using-with',
    'missing-module-docstring',
    'unspecified-encoding',
  ]
  tests = input_api.canned_checks.GetPylint(
    input_api, output_api, disabled_warnings=disabled_warnings, version='3.2'
  )
  return input_api.RunTests(tests)
