Project

General

Profile

Download (1.51 KB) Statistics
| Branch: | Tag: | Revision:

hydrilla-builder / tests / helpers.py @ 22c722bf

1 22c722bf Wojtek Kosior
# SPDX-License-Identifier: CC0-1.0
2
3
# Copyright (C) 2022 Wojtek Kosior <koszko@koszko.org>
4
#
5
# Available under the terms of Creative Commons Zero v1.0 Universal.
6
7
import re
8
9
variable_word_re = re.compile(r'^<(.+)>$')
10
11
def process_command(command, expected_command):
12
    """Validate the command line and extract its variable parts (if any)."""
13
    assert len(command) == len(expected_command)
14
15
    extracted = {}
16
    for word, expected_word in zip(command, expected_command):
17
        match = variable_word_re.match(expected_word)
18
        if match:
19
            extracted[match.group(1)] = word
20
        else:
21
            assert word == expected_word
22
23
    return extracted
24
25
def run_missing_executable(command, **kwargs):
26
    """
27
    Instead of running a command, raise FileNotFoundError as if its executable
28
    was missing.
29
    """
30
    raise FileNotFoundError('dummy')
31
32
class MockedCompletedProcess:
33
    """
34
    Object with some fields similar to those of subprocess.CompletedProcess.
35
    """
36
    def __init__(self, args, returncode=0,
37
                 stdout='some output', stderr='some error output',
38
                 text_output=True):
39
        """
40
        Initialize MockedCompletedProcess. Convert strings to bytes if needed.
41
        """
42
        self.args       = args
43
        self.returncode = returncode
44
45
        if type(stdout) is str and not text_output:
46
            stdout = stdout.encode()
47
        if type(stderr) is str and not text_output:
48
            stderr = stderr.encode()
49
50
        self.stdout = stdout
51
        self.stderr = stderr