Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(130)

Unified Diff: presubmit_canned_checks.py

Issue 6778027: Add RunUnitTests() and RunUnitTestsInDirectory() canned checks. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/depot_tools
Patch Set: Update comment Created 9 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « .gitignore ('k') | presubmit_support.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: presubmit_canned_checks.py
diff --git a/presubmit_canned_checks.py b/presubmit_canned_checks.py
index 6fb954f1f1463ed2f366948d6e12f0038e1672dc..45f446c5800711781783e85ec3a2f6a54ea954b6 100644
--- a/presubmit_canned_checks.py
+++ b/presubmit_canned_checks.py
@@ -410,9 +410,76 @@ def CheckTreeIsOpen(input_api, output_api,
return []
+def RunUnitTestsInDirectory(
+ input_api, output_api, directory, whitelist=None, blacklist=None,
+ verbose=False):
+ """Lists all files in a directory and runs them. Doesn't recurse.
+
+ It's mainly a wrapper for RunUnitTests. USe whitelist and blacklist to filter
+ tests accordingly.
+ """
+ unit_tests = []
+ test_path = input_api.os_path.abspath(
+ input_api.os_path.join(input_api.PresubmitLocalPath(), directory))
+
+ def check(filename, filters):
+ return any(True for i in filters if input_api.re.match(i, filename))
+
+ for filename in input_api.os_listdir(test_path):
+ fullpath = input_api.os_path.join(test_path, filename)
+ if not input_api.os_path.isfile(fullpath):
+ continue
+ if whitelist and not check(filename, whitelist):
+ continue
+ if blacklist and check(filename, blacklist):
+ continue
+ unit_tests.append(input_api.os_path.join(directory, filename))
+ return RunUnitTests(input_api, output_api, unit_tests, verbose)
+
+
+def RunUnitTests(input_api, output_api, unit_tests, verbose=False):
+ """Runs all unit tests in a directory.
+
+ On Windows, sys.executable is used for unit tests ending with ".py".
+ """
+ # We don't want to hinder users from uploading incomplete patches.
+ if input_api.is_committing:
+ message_type = output_api.PresubmitError
+ else:
+ message_type = output_api.PresubmitPromptWarning
+
+ if verbose:
+ pipe = None
+ else:
+ pipe = input_api.subprocess.PIPE
+
+ results = []
+ for unit_test in unit_tests:
+ cmd = []
+ if input_api.platform == 'win32' and unit_test.endswith('.py'):
+ # Windows needs some help.
+ cmd = [input_api.python_executable]
+ cmd.append(unit_test)
+ if verbose:
+ print('Running %s' % unit_test)
+ try:
+ proc = input_api.subprocess.Popen(
+ cmd, cwd=input_api.PresubmitLocalPath(), stdout=pipe, stderr=pipe)
+ out = '\n'.join(filter(None, proc.communicate()))
+ if proc.returncode:
+ results.append(message_type(
+ '%s failed with return code %d\n%s' % (
+ unit_test, proc.returncode, out)))
+ except (OSError, input_api.subprocess.CalledProcessError):
+ results.append(message_type('%s failed' % unit_test))
+ return results
+
+
def RunPythonUnitTests(input_api, output_api, unit_tests):
"""Run the unit tests out of process, capture the output and use the result
code to determine success.
+
+ DEPRECATED.
"""
# We don't want to hinder users from uploading incomplete patches.
if input_api.is_committing:
@@ -477,10 +544,10 @@ def _FetchAllFiles(input_api, white_list, black_list):
return True
return False
- import os
files = []
path_len = len(input_api.PresubmitLocalPath())
- for dirpath, dirnames, filenames in os.walk(input_api.PresubmitLocalPath()):
+ for dirpath, dirnames, filenames in input_api.os_walk(
+ input_api.PresubmitLocalPath()):
# Passes dirnames in black list to speed up search.
for item in dirnames[:]:
filepath = input_api.os_path.join(dirpath, item)[path_len + 1:]
« no previous file with comments | « .gitignore ('k') | presubmit_support.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698