OLD | NEW |
1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
2 # Copyright (c) 2006-2009 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2006-2009 The Chromium Authors. All rights reserved. |
3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
5 | 5 |
6 """Generic presubmit checks that can be reused by other presubmit checks.""" | 6 """Generic presubmit checks that can be reused by other presubmit checks.""" |
7 | 7 |
8 | 8 |
9 def CheckChangeHasTestField(input_api, output_api): | 9 def CheckChangeHasTestField(input_api, output_api): |
10 """Requires that the changelist have a TEST= field.""" | 10 """Requires that the changelist have a TEST= field.""" |
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
118 | 118 |
119 def _RunPythonUnitTests_LoadTests(input_api, module_name): | 119 def _RunPythonUnitTests_LoadTests(input_api, module_name): |
120 """Meant to be stubbed out during unit testing.""" | 120 """Meant to be stubbed out during unit testing.""" |
121 module = __import__(module_name) | 121 module = __import__(module_name) |
122 for part in module_name.split('.')[1:]: | 122 for part in module_name.split('.')[1:]: |
123 module = getattr(module, part) | 123 module = getattr(module, part) |
124 return input_api.unittest.TestLoader().loadTestsFromModule(module)._tests | 124 return input_api.unittest.TestLoader().loadTestsFromModule(module)._tests |
125 | 125 |
126 def RunPythonUnitTests(input_api, output_api, unit_tests): | 126 def RunPythonUnitTests(input_api, output_api, unit_tests): |
127 """Imports the unit_tests modules and run them.""" | 127 """Imports the unit_tests modules and run them.""" |
| 128 # We don't want to hinder users from uploading incomplete patches. |
| 129 if input_api.is_committing: |
| 130 message_type = output_api.PresubmitError |
| 131 else: |
| 132 message_type = output_api.PresubmitNotifyResult |
128 tests_suite = [] | 133 tests_suite = [] |
129 outputs = [] | 134 outputs = [] |
130 for unit_test in unit_tests: | 135 for unit_test in unit_tests: |
131 try: | 136 try: |
132 tests_suite.extend(_RunPythonUnitTests_LoadTests(unit_test)) | 137 tests_suite.extend(_RunPythonUnitTests_LoadTests(unit_test)) |
133 except ImportError: | 138 except ImportError: |
134 outputs.append(output_api.PresubmitError("Failed to load %s" % unit_test)) | 139 outputs.append(message_type("Failed to load %s" % unit_test, |
| 140 long_text=input_api.traceback.format_exc())) |
135 | 141 |
136 results = input_api.unittest.TextTestRunner(verbosity=0).run( | 142 results = input_api.unittest.TextTestRunner(verbosity=0).run( |
137 input_api.unittest.TestSuite(tests_suite)) | 143 input_api.unittest.TestSuite(tests_suite)) |
138 if not results.wasSuccessful(): | 144 if not results.wasSuccessful(): |
139 outputs.append(output_api.PresubmitError( | 145 outputs.append(message_type( |
140 "%d unit tests failed." % (results.failures + results.errors))) | 146 "%d unit tests failed." % (results.failures + results.errors))) |
141 return outputs | 147 return outputs |
OLD | NEW |