tools_webrtc dir converted to py3 + top level PRESUBMIT script
Bug: webrtc:13607 Change-Id: Ib018e43ea977cc24dd71048e68e3343741f7f31b Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/249083 Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org> Reviewed-by: Harald Alvestrand <hta@webrtc.org> Reviewed-by: Jeremy Leconte <jleconte@google.com> Commit-Queue: Christoffer Jansson <jansson@google.com> Cr-Commit-Position: refs/heads/main@{#35953}
This commit is contained in:
committed by
WebRTC LUCI CQ
parent
b5cba85c2f
commit
4e8a773b4b
@ -1,3 +1,5 @@
|
||||
#!/usr/bin/env vpython3
|
||||
|
||||
# Copyright (c) 2017 The WebRTC project authors. All Rights Reserved.
|
||||
#
|
||||
# Use of this source code is governed by a BSD-style license
|
||||
@ -9,135 +11,131 @@
|
||||
# This file is inspired to [1].
|
||||
# [1] - https://cs.chromium.org/chromium/src/PRESUBMIT_test_mocks.py
|
||||
|
||||
from __future__ import absolute_import
|
||||
import os.path
|
||||
import re
|
||||
|
||||
|
||||
class MockInputApi(object):
|
||||
"""Mock class for the InputApi class.
|
||||
class MockInputApi:
|
||||
"""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.change = MockChange([], [])
|
||||
self.files = []
|
||||
self.presubmit_local_path = os.path.dirname(__file__)
|
||||
self.re = re # pylint: disable=invalid-name
|
||||
def __init__(self):
|
||||
self.change = MockChange([], [])
|
||||
self.files = []
|
||||
self.presubmit_local_path = os.path.dirname(__file__)
|
||||
self.re = re # pylint: disable=invalid-name
|
||||
|
||||
def AffectedSourceFiles(self, file_filter=None):
|
||||
return self.AffectedFiles(file_filter=file_filter)
|
||||
def AffectedSourceFiles(self, file_filter=None):
|
||||
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
|
||||
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,
|
||||
files_to_check=(),
|
||||
files_to_skip=()):
|
||||
# pylint: disable=unused-argument
|
||||
return True
|
||||
@classmethod
|
||||
def FilterSourceFile(cls, affected_file, files_to_check=(), files_to_skip=()):
|
||||
# pylint: disable=unused-argument
|
||||
return True
|
||||
|
||||
def PresubmitLocalPath(self):
|
||||
return self.presubmit_local_path
|
||||
def PresubmitLocalPath(self):
|
||||
return self.presubmit_local_path
|
||||
|
||||
def ReadFile(self, affected_file, mode='rU'):
|
||||
filename = affected_file.AbsoluteLocalPath()
|
||||
for f in self.files:
|
||||
if f.LocalPath() == filename:
|
||||
with open(filename, mode) as f:
|
||||
return f.read()
|
||||
# Otherwise, file is not in our mock API.
|
||||
raise IOError, "No such file or directory: '%s'" % filename
|
||||
def ReadFile(self, affected_file, mode='r'):
|
||||
filename = affected_file.AbsoluteLocalPath()
|
||||
for f in self.files:
|
||||
if f.LocalPath() == filename:
|
||||
with open(filename, mode) as f:
|
||||
return f.read()
|
||||
# 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.
|
||||
class MockOutputApi:
|
||||
"""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 PresubmitResult:
|
||||
def __init__(self, message, items=None, long_text=''):
|
||||
self.message = message
|
||||
self.items = items
|
||||
self.long_text = long_text
|
||||
|
||||
def __repr__(self):
|
||||
return self.message
|
||||
def __repr__(self):
|
||||
return self.message
|
||||
|
||||
class PresubmitError(PresubmitResult):
|
||||
def __init__(self, message, items=None, long_text=''):
|
||||
MockOutputApi.PresubmitResult.__init__(self, message, items,
|
||||
long_text)
|
||||
self.type = 'error'
|
||||
class PresubmitError(PresubmitResult):
|
||||
def __init__(self, message, items=None, long_text=''):
|
||||
MockOutputApi.PresubmitResult.__init__(self, message, items, long_text)
|
||||
self.type = 'error'
|
||||
|
||||
|
||||
class MockChange(object):
|
||||
"""Mock class for Change class.
|
||||
class MockChange:
|
||||
"""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, bugs_from_description, tags=None):
|
||||
self._changed_files = changed_files
|
||||
self._bugs_from_description = bugs_from_description
|
||||
self.tags = dict() if not tags else tags
|
||||
def __init__(self, changed_files, bugs_from_description, tags=None):
|
||||
self._changed_files = changed_files
|
||||
self._bugs_from_description = bugs_from_description
|
||||
self.tags = dict() if not tags else tags
|
||||
|
||||
def BugsFromDescription(self):
|
||||
return self._bugs_from_description
|
||||
def BugsFromDescription(self):
|
||||
return self._bugs_from_description
|
||||
|
||||
def __getattr__(self, attr):
|
||||
"""Return tags directly as attributes on the object."""
|
||||
if not re.match(r"^[A-Z_]*$", attr):
|
||||
raise AttributeError(self, attr)
|
||||
return self.tags.get(attr)
|
||||
def __getattr__(self, attr):
|
||||
"""Return tags directly as attributes on the object."""
|
||||
if not re.match(r"^[A-Z_]*$", attr):
|
||||
raise AttributeError(self, attr)
|
||||
return self.tags.get(attr)
|
||||
|
||||
|
||||
class MockFile(object):
|
||||
"""Mock class for the File class.
|
||||
class MockFile:
|
||||
"""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=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 __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 Action(self):
|
||||
return self._action
|
||||
|
||||
def ChangedContents(self):
|
||||
return self._changed_contents
|
||||
def ChangedContents(self):
|
||||
return self._changed_contents
|
||||
|
||||
def NewContents(self):
|
||||
return self._new_contents
|
||||
def NewContents(self):
|
||||
return self._new_contents
|
||||
|
||||
def LocalPath(self):
|
||||
return self._local_path
|
||||
def LocalPath(self):
|
||||
return self._local_path
|
||||
|
||||
def AbsoluteLocalPath(self):
|
||||
return self._local_path
|
||||
def AbsoluteLocalPath(self):
|
||||
return self._local_path
|
||||
|
||||
def OldContents(self):
|
||||
return self._old_contents
|
||||
def OldContents(self):
|
||||
return self._old_contents
|
||||
|
||||
Reference in New Issue
Block a user