| OLD | NEW |
| 1 # Copyright 2015 The Chromium Authors. All rights reserved. | 1 # Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
| 4 | 4 |
| 5 """Top-level presubmit script for blimp. | 5 """Top-level presubmit script for blimp. |
| 6 | 6 |
| 7 See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts | 7 See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts |
| 8 for more details about the presubmit API built into depot_tools. | 8 for more details about the presubmit API built into depot_tools. |
| 9 """ | 9 """ |
| 10 | 10 |
| 11 import re | 11 import re |
| 12 | 12 |
| 13 BLIMP_SOURCE_FILES=(r'^blimp[\\/].*\.(cc|h)$',) | 13 BLIMP_SOURCE_FILES=(r'^blimp[\\/].*\.(cc|h)$',) |
| 14 | 14 |
| 15 def CheckChangeLintsClean(input_api, output_api): | 15 def CheckChangeLintsClean(input_api, output_api): |
| 16 source_filter = lambda x: input_api.FilterSourceFile( | 16 source_filter = lambda x: input_api.FilterSourceFile( |
| 17 x, white_list=BLIMP_SOURCE_FILES, black_list=None) | 17 x, white_list=BLIMP_SOURCE_FILES, black_list=None) |
| 18 | 18 |
| 19 return input_api.canned_checks.CheckChangeLintsClean( | 19 return input_api.canned_checks.CheckChangeLintsClean( |
| 20 input_api, output_api, source_filter, lint_filters=[], verbose_level=1) | 20 input_api, output_api, source_filter, lint_filters=[], verbose_level=1) |
| 21 | 21 |
| 22 def CheckNewFilesHaveTests(input_api, output_api): |
| 23 unittest_files = set() |
| 24 files_needing_unittest = set() |
| 25 |
| 26 for source_file in input_api.AffectedFiles(): |
| 27 if source_file.Action() == 'A': |
| 28 name = source_file.LocalPath() |
| 29 if name.endswith('_unittest.cc'): |
| 30 unittest_files.add(name) |
| 31 elif name.endswith('.cc') and not name.endswith('test.cc'): |
| 32 files_needing_unittest.add(name) |
| 33 |
| 34 missing_unittest_files = [] |
| 35 |
| 36 for name in files_needing_unittest: |
| 37 unittest_name = re.sub(r'\.cc$', '_unittest.cc', name) |
| 38 if unittest_name not in unittest_files: |
| 39 missing_unittest_files.append(name) |
| 40 |
| 41 if missing_unittest_files: |
| 42 message = 'The following new files are missing unit tests:' |
| 43 return [output_api.PresubmitPromptWarning(message, missing_unittest_files)] |
| 44 else: |
| 45 return [] |
| 46 |
| 22 def CheckChangeOnUpload(input_api, output_api): | 47 def CheckChangeOnUpload(input_api, output_api): |
| 23 results = [] | 48 results = [] |
| 24 results += CheckChangeLintsClean(input_api, output_api) | 49 results += CheckChangeLintsClean(input_api, output_api) |
| 50 results += CheckNewFilesHaveTests(input_api, output_api) |
| 25 return results | 51 return results |
| OLD | NEW |