Index: blimp/PRESUBMIT.py |
diff --git a/blimp/PRESUBMIT.py b/blimp/PRESUBMIT.py |
index ae90d459bc91a181eb154ae1f6652b91c5eb80a5..021592a729d914ed9228adeff998d3e1bd4727f8 100644 |
--- a/blimp/PRESUBMIT.py |
+++ b/blimp/PRESUBMIT.py |
@@ -19,7 +19,33 @@ def CheckChangeLintsClean(input_api, output_api): |
return input_api.canned_checks.CheckChangeLintsClean( |
input_api, output_api, source_filter, lint_filters=[], verbose_level=1) |
+def CheckNewFilesHaveTests(input_api, output_api): |
+ unittest_files = set() |
+ files_needing_unittest = set() |
+ |
+ for source_file in input_api.AffectedFiles(): |
+ if source_file.Action() == 'A': |
+ name = source_file.LocalPath() |
+ if name.endswith('_unittest.cc'): |
+ unittest_files.add(name) |
+ elif name.endswith('.cc') and not name.endswith('test.cc'): |
+ files_needing_unittest.add(name) |
+ |
+ missing_unittest_files = [] |
+ |
+ for name in files_needing_unittest: |
+ unittest_name = re.sub(r'\.cc$', '_unittest.cc', name) |
+ if unittest_name not in unittest_files: |
+ missing_unittest_files.append(name) |
+ |
+ if missing_unittest_files: |
+ message = 'The following new files are missing unit tests:' |
+ return [output_api.PresubmitPromptWarning(message, missing_unittest_files)] |
+ else: |
+ return [] |
+ |
def CheckChangeOnUpload(input_api, output_api): |
results = [] |
results += CheckChangeLintsClean(input_api, output_api) |
+ results += CheckNewFilesHaveTests(input_api, output_api) |
return results |