aboutsummaryrefslogtreecommitdiff
path: root/presubmit_test_mocks.py
diff options
context:
space:
mode:
Diffstat (limited to 'presubmit_test_mocks.py')
-rw-r--r--presubmit_test_mocks.py56
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