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 |