Chromium Code Reviews| Index: third_party/WebKit/Tools/Scripts/webkitpy/common/system/executive_mock.py |
| diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/common/system/executive_mock.py b/third_party/WebKit/Tools/Scripts/webkitpy/common/system/executive_mock.py |
| index 2b910bc262af3cb7d78a54ffe97ef4a6d846d082..1e701b1664ac21cee0c789c1e73f870733bc3779 100644 |
| --- a/third_party/WebKit/Tools/Scripts/webkitpy/common/system/executive_mock.py |
| +++ b/third_party/WebKit/Tools/Scripts/webkitpy/common/system/executive_mock.py |
| @@ -26,6 +26,7 @@ |
| # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| +import collections |
| import logging |
| import os |
| import StringIO |
| @@ -60,6 +61,9 @@ class MockProcess(object): |
| return |
| +MockCall = collections.namedtuple('MockCall', ('args', 'env')) |
| + |
| + |
| class MockExecutive(object): |
| PIPE = 'MOCK PIPE' |
| STDOUT = 'MOCK STDOUT' |
| @@ -82,7 +86,15 @@ class MockExecutive(object): |
| self._exception = exception |
| self._run_command_fn = run_command_fn |
| self._proc = None |
| - self.calls = [] |
| + self.full_calls = [] |
| + |
| + def _append_call(self, args, env=None): |
| + if env: |
| + env = env.copy() |
| + self.full_calls.append(MockCall( |
| + args=args, |
| + env=env.copy() if env is not None else None, |
| + )) |
| def check_running_pid(self, pid): |
| return pid in self._running_pids.values() |
| @@ -113,7 +125,7 @@ class MockExecutive(object): |
| decode_output=False, |
| env=None, |
| debug_logging=False): |
| - self.calls.append(args) |
| + self._append_call(args, env=env) |
| assert isinstance(args, list) or isinstance(args, tuple) |
| @@ -160,7 +172,7 @@ class MockExecutive(object): |
| def popen(self, args, cwd=None, env=None, **_): |
| assert all(isinstance(arg, basestring) for arg in args) |
| - self.calls.append(args) |
| + self._append_call(args, env=env) |
| if self._should_log: |
| cwd_string = '' |
| if cwd: |
| @@ -175,21 +187,21 @@ class MockExecutive(object): |
| def call(self, args, **_): |
| assert all(isinstance(arg, basestring) for arg in args) |
| - self.calls.append(args) |
| + self._append_call(args) |
| _log.info('Mock call: %s', args) |
| def run_in_parallel(self, commands): |
| assert len(commands) |
| - num_previous_calls = len(self.calls) |
| + num_previous_calls = len(self.full_calls) |
| command_outputs = [] |
| for cmd_line, cwd in commands: |
| assert all(isinstance(arg, basestring) for arg in cmd_line) |
| command_outputs.append([0, self.run_command(cmd_line, cwd=cwd), '']) |
| - new_calls = self.calls[num_previous_calls:] |
| - self.calls = self.calls[:num_previous_calls] |
| - self.calls.append(new_calls) |
| + new_calls = self.full_calls[num_previous_calls:] |
| + self.full_calls = self.full_calls[:num_previous_calls] |
| + self.full_calls.append(new_calls) |
| return command_outputs |
| def map(self, thunk, arglist, processes=None): |
| @@ -198,6 +210,17 @@ class MockExecutive(object): |
| def process_dump(self): |
| return [] |
| + @property |
| + def calls(self): |
| + def get_args(v): |
| + if isinstance(v, list): |
| + return [get_args(e) for e in v] |
| + elif isinstance(v, MockCall): |
| + return v.args |
| + else: |
| + return TypeError('Unknown full_calls type: %s' % (type(v).__name__,)) |
| + return get_args(self.full_calls) |
|
Dirk Pranke
2017/05/04 00:05:48
Can't this just be:
@property
def calls(self)
dnj
2017/05/04 00:20:37
No, b/c "run_in_parallel" adds lists of MockCall t
Dirk Pranke
2017/05/04 00:43:46
Ah, I see. That's ugly. Can you add a TODO and/or
dnj
2017/05/04 16:07:54
Done.
|
| + |
| def mock_git_commands(vals, strict=False): |
| def run_fn(args): |