diff options
author | Artem Titov <titovartem@webrtc.org> | 2018-05-18 13:33:51 +0200 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2018-05-18 12:39:26 +0000 |
commit | 4103b383505575b23222f77fd04116d2f6c10273 (patch) | |
tree | b38a4d627413e05379da88a7ad9e3ac3c6d907fe /presubmit_test_mocks.py | |
parent | a6ccd25eea6e6adabb10c64d056c5c5ad1c4cfb2 (diff) | |
download | webrtc-4103b383505575b23222f77fd04116d2f6c10273.tar.gz |
Add presubmit check for changes in 3pp
Presubmit check will test will new changes be overriden by autoroll
or not. In more details presubmit will check:
1. Each dependency in third_party have to be specified in one of:
a. THIRD_PARTY_CHROMIUM_DEPS.json
b. THIRD_PARTY_WEBRTC_DEPS.json
2. Each dependency not specified in both files from #1
3. Changes won't be overriden by chromium third_party deps autoroll:
a. Changes were made in WebRTC owned dependency
b. Changes were addition of new Chromium owned dependency
Bug: webrtc:8366
Change-Id: Ic5db24289e7fa461e0959f75cfbe81ecc65af4b5
Reviewed-on: https://webrtc-review.googlesource.com/77421
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Reviewed-by: Patrik Höglund <phoglund@webrtc.org>
Commit-Queue: Artem Titov <titovartem@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23301}
Diffstat (limited to 'presubmit_test_mocks.py')
-rw-r--r-- | presubmit_test_mocks.py | 56 |
1 files changed, 53 insertions, 3 deletions
diff --git a/presubmit_test_mocks.py b/presubmit_test_mocks.py index 4b2b3c7522..6c0b0c48a1 100644 --- a/presubmit_test_mocks.py +++ b/presubmit_test_mocks.py @@ -9,6 +9,9 @@ # This file is inspired to [1]. # [1] - https://cs.chromium.org/chromium/src/PRESUBMIT_test_mocks.py +import os.path +import re + class MockInputApi(object): """Mock class for the InputApi class. @@ -20,10 +23,38 @@ class MockInputApi(object): def __init__(self): self.change = MockChange([], []) self.files = [] + self.presubmit_local_path = os.path.dirname(__file__) def AffectedSourceFiles(self, file_filter=None): - # pylint: disable=unused-argument - return self.files + return self.AffectedFiles(file_filter=file_filter) + + def AffectedFiles(self, file_filter=None, include_deletes=False): + for f in self.files: + if file_filter and not file_filter(f): + continue + if not include_deletes and f.Action() == 'D': + continue + yield f + + @classmethod + def FilterSourceFile(cls, affected_file, white_list=(), black_list=()): + local_path = affected_file.LocalPath() + found_in_white_list = not white_list + if white_list: + for pattern in white_list: + compiled_pattern = re.compile(pattern) + if compiled_pattern.search(local_path): + found_in_white_list = True + break + if black_list: + for pattern in black_list: + compiled_pattern = re.compile(pattern) + if compiled_pattern.search(local_path): + return False + return found_in_white_list + + def PresubmitLocalPath(self): + return self.presubmit_local_path def ReadFile(self, affected_file, mode='rU'): filename = affected_file.AbsoluteLocalPath() @@ -79,11 +110,30 @@ class MockFile(object): MockInputApi for presubmit unittests. """ - def __init__(self, local_path): + def __init__(self, local_path, new_contents=None, old_contents=None, + action='A'): + if new_contents is None: + new_contents = ["Data"] self._local_path = local_path + self._new_contents = new_contents + self._changed_contents = [(i + 1, l) for i, l in enumerate(new_contents)] + self._action = action + self._old_contents = old_contents + + def Action(self): + return self._action + + def ChangedContents(self): + return self._changed_contents + + def NewContents(self): + return self._new_contents def LocalPath(self): return self._local_path def AbsoluteLocalPath(self): return self._local_path + + def OldContents(self): + return self._old_contents |