# SPDX-License-Identifier: CC0-1.0 # Copyright (C) 2022 Wojtek Kosior # # Available under the terms of Creative Commons Zero v1.0 Universal. import re variable_word_re = re.compile(r'^<(.+)>$') def process_command(command, expected_command): """Validate the command line and extract its variable parts (if any).""" assert len(command) == len(expected_command) extracted = {} for word, expected_word in zip(command, expected_command): match = variable_word_re.match(expected_word) if match: extracted[match.group(1)] = word else: assert word == expected_word return extracted def run_missing_executable(command, **kwargs): """ Instead of running a command, raise FileNotFoundError as if its executable was missing. """ raise FileNotFoundError('dummy') class MockedCompletedProcess: """ Object with some fields similar to those of subprocess.CompletedProcess. """ def __init__(self, args, returncode=0, stdout='some output', stderr='some error output', text_output=True): """ Initialize MockedCompletedProcess. Convert strings to bytes if needed. """ self.args = args self.returncode = returncode if type(stdout) is str and not text_output: stdout = stdout.encode() if type(stderr) is str and not text_output: stderr = stderr.encode() self.stdout = stdout self.stderr = stderr