1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
|
import subprocess
import pytest
import graphviz
import _common
@pytest.mark.exe(xfail=True, raises=graphviz.ExecutableNotFound)
def test_version(capsys):
result = graphviz.version()
assert isinstance(result, tuple) and result
assert all(isinstance(d, int) for d in result)
assert capsys.readouterr() == ('', '')
@pytest.mark.parametrize(
'stdout, expected',
[('dot - graphviz version 1.2.3 (mocked)', (1, 2, 3)),
('dot - graphviz version 2.43.20190912.0211 (20190912.0211)\n', (2, 43, 20190912, 211)),
('dot - graphviz version 2.44.2~dev.20200927.0217 (20200927.0217)\n', (2, 44, 2)),
('dot - graphviz version 2.44.1 (mocked)\n', (2, 44, 1)),
('dot - graphviz version 2.44.2~dev.20200704.1652 (mocked)\n', (2, 44, 2))])
def test_version_mocked(mock_run, stdout, expected):
mock_run.return_value = subprocess.CompletedProcess(_common.INVALID_CMD,
returncode=0,
stdout=stdout,
stderr=None)
assert graphviz.version() == expected
mock_run.assert_called_once_with([_common.EXPECTED_DOT_BINARY, '-V'],
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT,
startupinfo=_common.StartupinfoMatcher(),
encoding='ascii')
def test_version_parsefail_mocked(mock_run):
mock_run.return_value = subprocess.CompletedProcess(_common.INVALID_CMD,
returncode=0,
stdout='nonversioninfo',
stderr=None)
with pytest.raises(RuntimeError, match=r'nonversioninfo'):
graphviz.version()
mock_run.assert_called_once_with([_common.EXPECTED_DOT_BINARY, '-V'],
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT,
startupinfo=_common.StartupinfoMatcher(),
encoding='ascii')
|