Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def test_pipe(capsys, engine, format_, renderer, formatter, pattern,
data=b'graph { spam }'):
out = pipe(engine, format_, data, renderer, formatter).decode('ascii')
if pattern is not None:
assert re.match(pattern, out)
assert capsys.readouterr() == ('', '')
def test_pipe_pipe_invalid_data_mocked(mocker, py2, Popen, quiet): # noqa: N803
stderr = mocker.patch('sys.stderr', autospec=True,
**{'flush': mocker.Mock(), 'encoding': 'nonencoding'})
proc = Popen.return_value
proc.returncode = mocker.sentinel.returncode
err = mocker.create_autospec(bytes, instance=True, name='err',
**{'__len__.return_value': 23})
proc.communicate.return_value = (mocker.sentinel.out, err)
with pytest.raises(subprocess.CalledProcessError) as e:
pipe('dot', 'png', b'nongraph', quiet=quiet)
assert e.value.returncode is mocker.sentinel.returncode
assert e.value.stderr is err
assert e.value.stdout is mocker.sentinel.out
e.value.stdout = mocker.sentinel.new_stdout
assert e.value.stdout is mocker.sentinel.new_stdout
Popen.assert_called_once_with(['dot', '-Tpng'],
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
startupinfo=mocker.ANY)
check_startupinfo(Popen.call_args.kwargs['startupinfo'])
proc.communicate.assert_called_once_with(b'nongraph')
if not quiet:
if py2:
stderr.write.assert_called_once_with(err)
def test_pipe_invalid_data(capsys, quiet, engine='dot', format_='svg'):
with pytest.raises(subprocess.CalledProcessError) as e:
pipe(engine, format_, b'nongraph', quiet=quiet)
assert e.value.returncode == 1
assert 'syntax error in line' in str(e.value)
out, err = capsys.readouterr()
assert out == ''
if quiet:
assert err == ''
else:
assert 'syntax error in line' in err
def test_pipe_mocked(capsys, mocker, Popen, quiet): # noqa: N803
proc = Popen.return_value
proc.returncode = 0
proc.communicate.return_value = (mocker.sentinel.out, b'stderr')
assert pipe('dot', 'png', b'nongraph', quiet=quiet) is mocker.sentinel.out
Popen.assert_called_once_with(['dot', '-Tpng'],
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
startupinfo=mocker.ANY)
check_startupinfo(Popen.call_args.kwargs['startupinfo'])
proc.communicate.assert_called_once_with(b'nongraph')
assert capsys.readouterr() == ('', '' if quiet else 'stderr')
(pipe, ['dot', 'pdf', b'nongraph']),
(version, []),
])
def test_missing_executable(func, args):
with pytest.raises(ExecutableNotFound, match=r'execute'):
func(*args)
formatter: The output formatter used for rendering (``'cairo'``, ``'gd'``, ...).
quiet (bool): Suppress ``stderr`` output from the layout subprocess.
Returns:
Binary (encoded) stdout of the layout command.
Raises:
ValueError: If ``format``, ``renderer``, or ``formatter`` are not known.
graphviz.RequiredArgumentError: If ``formatter`` is given but ``renderer`` is None.
graphviz.ExecutableNotFound: If the Graphviz executable is not found.
subprocess.CalledProcessError: If the exit status is non-zero.
"""
if format is None:
format = self._format
data = text_type(self.source).encode(self._encoding)
out = backend.pipe(self._engine, format, data,
renderer=renderer, formatter=formatter,
quiet=quiet)
return out