From 7b305e8c18d109c01926a956bdf47619bab54c4a Mon Sep 17 00:00:00 2001 From: "maruel@chromium.org" Date: Tue, 19 May 2009 18:24:20 +0000 Subject: [PATCH] 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 --- PRESUBMIT.py | 35 ++++++++++++++--------------------- presubmit_canned_checks.py | 27 +++++++++++++++++++++++++++ tests/presubmit_unittest.py | 10 +++++++++- 3 files changed, 50 insertions(+), 22 deletions(-) diff --git a/PRESUBMIT.py b/PRESUBMIT.py index 4694a28617..66692d2d3f 100755 --- a/PRESUBMIT.py +++ b/PRESUBMIT.py @@ -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 diff --git a/presubmit_canned_checks.py b/presubmit_canned_checks.py index c1f9f16662..1b6d6465bd 100755 --- a/presubmit_canned_checks.py +++ b/presubmit_canned_checks.py @@ -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 diff --git a/tests/presubmit_unittest.py b/tests/presubmit_unittest.py index 2eb1ec428c..c449c710f1 100755 --- a/tests/presubmit_unittest.py +++ b/tests/presubmit_unittest.py @@ -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()