Commit 7b305e8c authored by maruel@chromium.org's avatar maruel@chromium.org

Add new presubmit check RunPythonUnitTests.

Review URL: http://codereview.chromium.org/115516

git-svn-id: svn://svn.chromium.org/chrome/trunk/tools/depot_tools@16390 0039d316-1c4b-4281-b951-d872f2087c98
parent 5771f262
......@@ -15,24 +15,17 @@ def CheckChangeOnUpload(input_api, output_api):
def CheckChangeOnCommit(input_api, output_api):
return (RunUnitTests(input_api, output_api) +
input_api.canned_checks.CheckDoNotSubmit(input_api, output_api))
def RunUnitTests(input_api, output_api):
import unittest
tests_suite = []
test_loader = unittest.TestLoader()
def LoadTests(module_name):
module = __import__(module_name)
for part in module_name.split('.')[1:]:
module = getattr(module, part)
tests_suite.extend(test_loader.loadTestsFromModule(module)._tests)
# List all the test modules to test here:
LoadTests('tests.gcl_unittest')
LoadTests('tests.gclient_test')
LoadTests('tests.presubmit_unittest')
LoadTests('tests.trychange_unittest')
unittest.TextTestRunner(verbosity=0).run(unittest.TestSuite(tests_suite))
# TODO(maruel): Find a way to block the check-in.
return []
unit_tests = [
'tests.gcl_unittest',
'tests.gclient_test',
'tests.presubmit_unittest',
'tests.revert_unittest',
'tests.trychange_unittest',
]
output = []
output.extend(input_api.canned_checks.RunPythonUnitTests(input_api,
output_api,
unit_tests))
output.extend(input_api.canned_checks.CheckDoNotSubmit(input_api,
output_api))
return output
......@@ -118,3 +118,30 @@ def CheckTreeIsOpen(input_api, output_api, url, closed):
except IOError:
pass
return []
def RunPythonUnitTests(input_api, output_api, unit_tests):
"""Imports the unit_tests modules and run them."""
import unittest
tests_suite = []
test_loader = unittest.TestLoader()
def LoadTests(module_name):
module = __import__(module_name)
for part in module_name.split('.')[1:]:
module = getattr(module, part)
tests_suite.extend(test_loader.loadTestsFromModule(module)._tests)
outputs = []
for unit_test in unit_tests:
try:
LoadTests(unit_test)
except ImportError:
outputs.Append(output_api.PresubmitError("Failed to load %s" % unit_test))
raise
results = unittest.TextTestRunner(verbosity=0).run(unittest.TestSuite(
tests_suite))
if not results.wasSuccessful():
outputs.append(output_api.PresubmitError(
"%d unit tests failed." % (results.failures + results.errors)))
return outputs
......@@ -592,7 +592,7 @@ class CannedChecksUnittest(PresubmitTestsBase):
'CheckChangeHasQaField', 'CheckChangeHasTestedField',
'CheckChangeHasTestField', 'CheckDoNotSubmit',
'CheckDoNotSubmitInDescription', 'CheckDoNotSubmitInFiles',
'CheckLongLines', 'CheckTreeIsOpen',
'CheckLongLines', 'CheckTreeIsOpen', 'RunPythonUnitTests',
]
# If this test fails, you should add the relevant test.
self.compareMembers(presubmit_canned_checks, members)
......@@ -693,6 +693,14 @@ class CannedChecksUnittest(PresubmitTestsBase):
self.MockInputApi(), presubmit.OutputApi, url='url_to_closed', closed='0'
))
def RunPythonUnitTests(self):
# TODO(maruel): Add real tests.
self.failIf(presubmit_canned_checks.RunPythonUnitTests(
self.MockInputApi(),
presubmit.OutputApi, []))
self.failUnless(presubmit_canned_checks.RunPythonUnitTests(
self.MockInputApi(),
presubmit.OutputApi, ['non_existent_module']))
if __name__ == '__main__':
unittest.main()
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment