Index: PRESUBMIT_test_mocks.py |
diff --git a/PRESUBMIT_test_mocks.py b/PRESUBMIT_test_mocks.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..c15d245110a3060de4732b4e09e8c1f3d3290d3a |
--- /dev/null |
+++ b/PRESUBMIT_test_mocks.py |
@@ -0,0 +1,109 @@ |
+# Copyright 2014 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. |
+ |
+import json |
+import os |
+import re |
+import subprocess |
+import sys |
+ |
+ |
+class MockInputApi(object): |
+ """Mock class for the InputApi class. |
+ |
+ This class can be used for unittests for presubmit by initializing the files |
+ attribute as the list of changed files. |
+ """ |
+ |
+ def __init__(self): |
+ self.json = json |
+ self.re = re |
+ self.os_path = os.path |
+ self.python_executable = sys.executable |
+ self.subprocess = subprocess |
+ self.files = [] |
+ self.is_committing = False |
+ |
+ def AffectedFiles(self, file_filter=None): |
+ return self.files |
+ |
+ def PresubmitLocalPath(self): |
+ return os.path.dirname(__file__) |
+ |
+ def ReadFile(self, filename, mode='rU'): |
+ for file_ in self.files: |
+ if file_.LocalPath() == filename: |
+ return '\n'.join(file_.NewContents()) |
+ # Otherwise, file is not in our mock API. |
+ raise IOError, "No such file or directory: '%s'" % filename |
+ |
+ |
+class MockOutputApi(object): |
+ ""Mock class for the OutputApi class. |
+ |
+ An instance of this class can be passed to presubmit unittests for outputing |
+ various types of results. |
+ """ |
+ |
+ class PresubmitResult(object): |
+ def __init__(self, message, items=None, long_text=''): |
+ self.message = message |
+ self.items = items |
+ self.long_text = long_text |
+ |
+ class PresubmitError(PresubmitResult): |
+ def __init__(self, message, items, long_text=''): |
+ MockOutputApi.PresubmitResult.__init__(self, message, items, long_text) |
+ self.type = 'error' |
+ |
+ class PresubmitPromptWarning(PresubmitResult): |
+ def __init__(self, message, items, long_text=''): |
+ MockOutputApi.PresubmitResult.__init__(self, message, items, long_text) |
+ self.type = 'warning' |
+ |
+ class PresubmitNotifyResult(PresubmitResult): |
+ def __init__(self, message, items, long_text=''): |
+ MockOutputApi.PresubmitResult.__init__(self, message, items, long_text) |
+ self.type = 'notify' |
+ |
+ class PresubmitPromptOrNotify(PresubmitResult): |
+ def __init__(self, message, items, long_text=''): |
+ MockOutputApi.PresubmitResult.__init__(self, message, items, long_text) |
+ self.type = 'promptOrNotify' |
+ |
+ |
+class MockFile(object): |
+ """Mock class for the File class. |
+ |
+ This class can be used to form the mock list of changed files in |
+ MockInputApi for presubmit unittests. |
+ """ |
+ |
+ def __init__(self, local_path, new_contents): |
+ self._local_path = local_path |
+ self._new_contents = new_contents |
+ self._changed_contents = [(i + 1, l) for i, l in enumerate(new_contents)] |
+ |
+ def ChangedContents(self): |
+ return self._changed_contents |
+ |
+ def NewContents(self): |
+ return self._new_contents |
+ |
+ def LocalPath(self): |
+ return self._local_path |
+ |
+ |
+class MockChange(object): |
+ """Mock class for Change class. |
+ |
+ This class can be used in presubmit unittests to mock the query of the |
+ current change. |
+ """ |
+ |
+ def __init__(self, changed_files): |
+ self._changed_files = changed_files |
+ |
+ def LocalPaths(self): |
+ return self._changed_files |