from __future__ import absolute_import, division, print_function
import os
import sys
import procrunner
import pytest
def test_simple_command_invocation():
if os.name == "nt":
command = ["cmd.exe", "/c", "echo", "hello"]
else:
command = ["echo", "hello"]
result = procrunner.run(command)
assert result["exitcode"] == 0
assert result["stdout"] == b"hello" + os.linesep.encode("utf-8")
assert result["stderr"] == b""
def test_decode_invalid_utf8_input(capsys):
test_string = b"test\xa0string\n"
if os.name == "nt":
pytest.xfail("Test requires stdin feature which does not work on Windows")
command = ["cmd.exe", "/c", "type", "CON"]
else:
command = ["cat"]
result = procrunner.run(command, stdin=test_string)
assert result["exitcode"] == 0
assert not result["stderr"]
if os.name == "nt":
# Windows modifies line endings
assert result["stdout"] == test_string[:-1] + b"\r\n"
else:
assert result["stdout"] == test_string
out, err = capsys.readouterr()
assert out == u"test\ufffdstring\n"
assert err == u""
def test_running_wget(tmpdir):
tmpdir.chdir()
command = ["wget", "https://www.google.com", "-O", "-"]
try:
result = procrunner.run(command)
except OSError as e:
if e.errno == 2:
pytest.skip("wget not available")
raise
assert result["exitcode"] == 0
assert b"http" in result["stderr"]
assert b"google" in result["stdout"]