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() | |
Kevin M
2016/05/23 23:57:39
Does this check files that live outside of blimp/
Wez
2016/05/24 00:44:54
path/PRESUBMIT.py only gets called for files that
Brian Goldman
2016/06/01 22:56:57
I tested this. It only checks files under blimp.
| |
24 files_needing_unittest = set() | |
Wez
2016/05/24 00:44:54
nit: How about new_unittest_files and new_source_f
Brian Goldman
2016/06/01 22:56:57
I'm going to leave the names as-is even though I d
| |
25 | |
Kevin M
2016/05/23 23:57:39
Also need something analogous for Java tests, whic
Wez
2016/05/24 00:44:54
Feels like a follow-up CL?
Brian Goldman
2016/06/01 22:56:57
Yes :)
| |
26 for source_file in input_api.AffectedFiles(): | |
27 if source_file.Action() == 'A': | |
28 name = source_file.LocalPath() | |
29 if re.search(r'_unittest\.cc$', name): | |
Kevin M
2016/05/23 23:57:39
Can we be consistent with search vs match?
Kevin M
2016/05/23 23:57:39
Should we also exclude anything with "test" in the
Wez
2016/05/24 00:44:54
And use re.compile() to compile the REs once each,
Wez
2016/05/24 00:44:54
This is only generating a warning, though, so it w
Brian Goldman
2016/06/01 22:56:57
I ended up getting rid of regex for this section e
Brian Goldman
2016/06/01 22:56:57
I'm going with the assumption that if it ends in "
Brian Goldman
2016/06/01 22:56:57
No more regexes in this section. I do use one for
| |
30 unittest_files.add(name) | |
31 elif re.match(r'^blimp[\\/].*\.cc$', name): | |
32 files_needing_unittest.add(name) | |
33 | |
34 missing = [] | |
Wez
2016/05/24 00:44:54
nit: 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.append(name) | |
40 | |
41 if missing: | |
42 message = 'The following new files are missing unit tests:' | |
43 return [output_api.PresubmitPromptWarning(message, missing)] | |
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 |