18d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi#!/usr/bin/env python
28d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi# Copyright 2015 The Chromium Authors. All rights reserved.
38d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi# Use of this source code is governed by a BSD-style license that can be
48d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi# found in the LICENSE file.
58d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
68d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi"""A wrapper around typ (test your projects)."""
78d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
88d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoiimport os
98d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoiimport sys
108d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
118d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
128d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoidef Run(top_level_dir, path=None):
138d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi  """Runs a set of Python tests using typ.
148d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
158d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi  Args:
168d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    top_level_dir: Directory to look for Python unit tests in.
178d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    path: A list of extra paths to add to sys.path when running the tests.
188d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
198d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi  Returns:
208d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    An exit code (0 for success, otherwise non-zero).
218d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi  """
228d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi  typ_path = os.path.abspath(os.path.join(
238d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi      os.path.dirname(__file__), os.path.pardir, 'third_party', 'typ'))
248d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi  _AddToPathIfNeeded(typ_path)
258d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi  import typ
268d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi  return typ.main(
278d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi      top_level_dir=top_level_dir,
288d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi      path=(path or []),
298d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi      coverage_source=[top_level_dir])
308d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
318d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
328d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoidef _AddToPathIfNeeded(path):
338d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi  if path not in sys.path:
348d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    sys.path.insert(0, path)
35