Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(486)

Unified Diff: pipa/py/test_utils/presubmit.py

Issue 2707493002: Presubmit checks for the Pipa repository (Closed)
Patch Set: Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « pipa/py/test_utils/__init__.py ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pipa/py/test_utils/presubmit.py
diff --git a/pipa/py/test_utils/presubmit.py b/pipa/py/test_utils/presubmit.py
new file mode 100644
index 0000000000000000000000000000000000000000..aa657b7ea3d3e506c4bc1597ff8d70619101cda9
--- /dev/null
+++ b/pipa/py/test_utils/presubmit.py
@@ -0,0 +1,90 @@
+# Copyright 2012 Google Inc. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+"""Contains functionality for integrating unit-tests with gcl presubmit
+checks."""
+import os
+import sys
+
+
+def MakeResult(output_api, message, committing, modified_files=None):
+ """Makes a gcl result. Makes a PresubmitError result if
+ |committing| is True, otherwise makes a PresubmitNotifyResult."""
+ if not modified_files:
+ modified_files = []
+ if committing:
+ return output_api.PresubmitError(message, modified_files)
+ else:
+ return output_api.PresubmitNotifyResult(message, modified_files)
+
+
+def GetTestSuccessPath(build_path, configuration, testname):
+ """Returns the path to the success file for the given test and
+ configuration. |build_path| is the path to the "build" directory."""
+
+ return os.path.abspath(os.path.join(build_path,
+ configuration,
+ '%s_success.txt' % testname))
+
+
+def GetModifiedFiles(input_api, since=0):
+ """Returns a list of files that have been modified since |since|.
+ If |since| is a file, uses its modification time."""
+ if isinstance(since, basestring):
+ try:
+ since = os.stat(since).st_mtime
+ # We don't specify the exception type here as it varies depending on the
+ # OS.
+ except: # pylint: disable=W0702
+ since = 0
+
+ modified_files = []
+ for f in input_api.AffectedFiles(include_deletes = False):
+ file_time = os.stat(f.AbsoluteLocalPath()).st_mtime
+ if file_time > since:
+ modified_files.append(f.LocalPath())
+ return modified_files
+
+
+def CheckTestSuccess(input_api, output_api, committing, configuration,
+ test_name, message=None):
+ """Returns a list of files that have changed since the last time the
+ given test was run. If the test needs to be re-run and |message| is a
+ str, will also output the provided message."""
+ # By convention, a test called NAME will generate NAME_success.txt in the
+ # appropriate output directory.
+ test_utils_path = os.path.join(input_api.PresubmitLocalPath(), 'py',
+ 'test_utils')
+ sys.path.append(test_utils_path)
+ import syzygy
+ build_path = syzygy.GetBuildDir()
+ success_path = GetTestSuccessPath(build_path,
+ configuration,
+ test_name)
+ modified_files = GetModifiedFiles(input_api, success_path)
+ if len(modified_files) == 0:
+ return []
+
+ results = []
+
+ if message:
+ results.append(MakeResult(output_api, message, committing))
+
+ results.append(MakeResult(output_api,
+ 'These files have been modified since %s %s test ran last' %
+ (configuration, test_name),
+ committing,
+ modified_files=modified_files))
+
+ return results
« no previous file with comments | « pipa/py/test_utils/__init__.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698