| # Copyright 2015 The Chromium Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| """Top-level presubmit script for blimp. |
| |
| See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts |
| for more details about the presubmit API built into depot_tools. |
| """ |
| |
| import re |
| |
| BLIMP_SOURCE_FILES=(r'^blimp[\\/].*\.(cc|h)$',) |
| |
| def CheckChangeLintsClean(input_api, output_api): |
| source_filter = lambda x: input_api.FilterSourceFile( |
| x, white_list=BLIMP_SOURCE_FILES, black_list=None) |
| |
| return input_api.canned_checks.CheckChangeLintsClean( |
| input_api, output_api, source_filter, lint_filters=[], verbose_level=1) |
| |
| def _NeedsTest(name): |
| is_cc = name.endswith('.cc') |
| is_test = name.endswith('test.cc') |
| is_test_support = name.startswith('blimp/test/support/') |
| return is_cc and not is_test and not is_test_support |
| |
| 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 _NeedsTest(name): |
| 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 |