| #!/usr/bin/env python | |
| # Copyright (c) 2012 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 under this base directory.""" | |
| import os | |
| import subprocess | |
| import sys | |
| import unittest | |
| NO_CRAWL_DIRS = [ | |
| '.git', | |
| '.svn', | |
| ] | |
| SEARCH_PATH = os.path.dirname(os.path.abspath(__file__)) | |
| def FilterDirectory(dirpath, filenames): | |
| """ Determine whether to look for tests in the given directory. | |
| dirpath: string; path of the directory in question. | |
| filenames: list of strings; the files in the directory. | |
| """ | |
| if not dirpath or not filenames: | |
| return False | |
| for no_crawl_dir in NO_CRAWL_DIRS: | |
| if no_crawl_dir in dirpath: | |
| return False | |
| return True | |
| if __name__ == '__main__': | |
| print 'Searching for tests.' | |
| tests_to_run = [] | |
| for (dirpath, dirnames, filenames) in os.walk(SEARCH_PATH, topdown=True): | |
| dirnames[:] = [d for d in dirnames if not d in NO_CRAWL_DIRS] | |
| test_modules = [os.path.join(dirpath, filename) for filename in filenames | |
| if filename.endswith('_test.py')] | |
| if not test_modules: | |
| continue | |
| tests_to_run.extend(test_modules) | |
| print 'Found %d tests.' % len(tests_to_run) | |
| errors = [] | |
| for test in tests_to_run: | |
| proc = subprocess.Popen(['python', test], stdout=subprocess.PIPE, | |
| stderr=subprocess.STDOUT) | |
| if proc.wait() != 0: | |
| errors.append(proc.communicate()[0]) | |
| if errors: | |
| for error in errors: | |
| print error | |
| print 'Failed %d of %d.' % (len(errors), len(test_modules)) | |
| sys.exit(1) | |
| else: | |
| print 'All tests succeeded.' |