def test_pipe_pipe_invalid_data_mocked(mocker, py2, Popen, quiet): # noqa: N803 stderr = mocker.patch('sys.stderr', new_callable=mocker.NonCallableMock) proc = Popen.return_value proc.returncode = mocker.sentinel.returncode err = mocker.Mock() 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.stdout is mocker.sentinel.out assert e.value.stderr is err Popen.assert_called_once_with(['dot', '-Tpng'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, startupinfo=mocker.ANY) check_startupinfo(Popen) proc.communicate.assert_called_once_with(b'nongraph') if not quiet: if py2: stderr.write.assert_called_once_with(err) else: err.decode.assert_called_once_with(stderr.encoding) stderr.write.assert_called_once_with(err.decode.return_value) stderr.flush.assert_called_once_with()
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.stdout is mocker.sentinel.out assert e.value.stderr is err Popen.assert_called_once_with(['dot', '-Tpng'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, startupinfo=mocker.ANY) check_startupinfo(Popen) proc.communicate.assert_called_once_with(b'nongraph') if not quiet: if py2: stderr.write.assert_called_once_with(err) else: err.decode.assert_called_once_with(stderr.encoding) stderr.write.assert_called_once_with(err.decode.return_value) stderr.flush.assert_called_once_with()
def test_pipe_pipe_invalid_data_mocked(mocker, py2, Popen, quiet): # noqa: N803 stderr = mocker.patch('sys.stderr') proc = Popen.return_value proc.returncode = mocker.sentinel.returncode errs = mocker.Mock() proc.communicate.return_value = mocker.sentinel.outs, errs with pytest.raises(subprocess.CalledProcessError) as e: pipe('dot', 'png', b'nongraph', quiet=quiet) assert e.value.returncode is mocker.sentinel.returncode Popen.assert_called_once_with(['dot', '-Tpng'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, startupinfo=STARTUPINFO) proc.communicate.assert_called_once_with(b'nongraph') if not quiet: if py2: stderr.write.assert_called_once_with(errs) else: errs.decode.assert_called_once_with(stderr.encoding) stderr.write.assert_called_once_with(errs.decode.return_value) stderr.flush.assert_called_once_with()
def test_pipe_pipe_invalid_data_mocked(mocker, py2, Popen, quiet): # noqa: N803 stderr = mocker.patch('sys.stderr', new_callable=mocker.NonCallableMock) proc = Popen.return_value proc.returncode = mocker.sentinel.returncode err = mocker.Mock() 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.stdout is mocker.sentinel.out assert e.value.stderr is err Popen.assert_called_once_with(['dot', '-Tpng'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, startupinfo=mocker.ANY) check_startupinfo(Popen) proc.communicate.assert_called_once_with(b'nongraph') if not quiet: if py2: stderr.write.assert_called_once_with(err) else: err.decode.assert_called_once_with(stderr.encoding) stderr.write.assert_called_once_with(err.decode.return_value) stderr.flush.assert_called_once_with()
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 out, err = capsys.readouterr() assert out == '' if quiet: assert err == '' else: assert 'syntax error' in 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 out, err = capsys.readouterr() assert out == '' if quiet: assert err == '' else: assert 'syntax error' in err
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 pipe(self, format=None, renderer=None, formatter=None, quiet=False): """Return the source piped through the Graphviz layout command. Args: format: The output format used for rendering (``'pdf'``, ``'png'``, etc.). renderer: The output renderer used for rendering (``'cairo'``, ``'gd'``, ...). 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
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(capsys, svg_pattern, engine='dot', format_='svg', data=b'graph { spam }'): src = pipe(engine, format_, data).decode('ascii') assert svg_pattern.match(src) assert capsys.readouterr() == ('', '')
def test_pipe_mocked(mocker, Popen): # noqa: N803 proc = Popen.return_value proc.returncode = 0 proc.communicate.return_value = mocker.sentinel.outs, mocker.sentinel.errs assert pipe('dot', 'png', b'nongraph') is mocker.sentinel.outs Popen.assert_called_once_with(['dot', '-Tpng'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, startupinfo=STARTUPINFO) proc.communicate.assert_called_once_with(b'nongraph')
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) proc.communicate.assert_called_once_with(b'nongraph') assert capsys.readouterr() == ('', '' if quiet else 'stderr')
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) proc.communicate.assert_called_once_with(b'nongraph') assert capsys.readouterr() == ('', '' if quiet else 'stderr')
def test_pipe_missingdot(empty_path): with pytest.raises(ExecutableNotFound) as e: pipe('dot', 'pdf', b'nongraph') e.match(r'execute')
def test_pipe_missing_executable(): with pytest.raises(ExecutableNotFound, match=r'execute'): pipe('dot', 'pdf', b'nongraph')
def test_pipe_invalid_dot(self): with self.assertRaises(subprocess.CalledProcessError) as c: pipe('dot', 'svg', 'spam', quiet=True) self.assertEqual(c.exception.returncode, 1)
def test_pipe(svg_pattern, engine='dot', format_='svg', data=b'graph { spam }'): src = pipe(engine, format_, data).decode('ascii') assert svg_pattern.match(src)
def test_pipe_missing_executable(): with pytest.raises(ExecutableNotFound, match=r'execute'): pipe('dot', 'pdf', b'nongraph')
def test_pipe_invalid_data(quiet, engine='dot', format_='svg'): with pytest.raises(subprocess.CalledProcessError) as e: pipe(engine, format_, b'nongraph', quiet=quiet) assert e.value.returncode == 1