blob: 2273a37db95e1e3cc5e5cde1749553b8ee35396d [file] [log] [blame]
#!/usr/bin/env python
# Copyright 2019 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
from lib.process import Process
class MockProcess(Process):
"""A mock for process creation and execution.
Instead of actually running subprocesses, this class just records
commands. Other mocks can additionally add canned responses.
"""
def __init__(self, host, args, **kwargs):
self.host = host
self.response = None
super(MockProcess, self).__init__(args, **kwargs)
def popen(self):
line = ''
if self.cwd:
line += 'CWD=%s ' % self.cwd
line += ' '.join(self.args)
self.host.history.append(line)
return MockPopen(self.host, self.response)
def call(self):
p = self.popen()
return p.returncode
def check_call(self):
self.popen()
def check_output(self):
self.popen()
return self.response
class MockPopen(object):
"""Mocks subprocess.Popen for MockProcess."""
def __init__(self, host, response):
self.host = host
self.returncode = 0
if response:
self.response = response
else:
self.response = ''
def communicate(self, inputs=None):
# if inputs:
# lines = inputs.split('\n')
# else:
# lines = []
for line in inputs:
self.host.history.append(' < %s' % line)
return (self.response, '')