def test_identity_bash(capfd, stdin): with stdin: assert ExecuteCommand( ['/bin/bash', '-c', 'echo "stdout"; echo "stderr" >&2']).run() == 0 out, err = capfd.readouterr() assert out == 'stdout\n' + ansi.ANSI_RESET_ALL assert err == 'stderr\n' + ansi.ANSI_RESET_ALL
def test_read_bash(capfd, stdin): with stdin: assert ExecuteCommand( args=['/bin/bash', '-c', 'read -p "Enter your input:" result; echo "You entered: $result"'] ).run() == 0 out, err = capfd.readouterr() assert out == 'Enter your input:\nYou entered: foo bar' + ansi.ANSI_RESET_ALL assert err == ansi.ANSI_RESET_ALL
def test_stderr_transformer_bash(capfd, stdin): with stdin: assert ExecuteCommand( args=['/bin/bash', '-c', 'echo "message"; echo "message" >&2'], stderr_transformer=ReplaceTransformer('message', 'REPLACED') ).run() == 0 out, err = capfd.readouterr() assert out == 'message\n' + ansi.ANSI_RESET_ALL assert err == 'REPLACED\n' + ansi.ANSI_RESET_ALL
def test_stdout_and_stderr_transformers_bash(capfd, stdin): with stdin: assert ExecuteCommand( args=['/bin/bash', '-c', 'echo "stdout"; echo "stderr" >&2'], stdout_transformer=ReplaceTransformer('stdout', 'STDOUT_REPLACED'), stderr_transformer=ReplaceTransformer('stderr', 'STDERR_REPLACED') ).run() == 0 out, err = capfd.readouterr() assert out == 'STDOUT_REPLACED\n' + ansi.ANSI_RESET_ALL assert err == 'STDERR_REPLACED\n' + ansi.ANSI_RESET_ALL
def test_unflushed_output(capfd, stdin): with stdin: assert ExecuteCommand( [sys.executable, '-c', dedent(r''' import sys sys.stdout.write('message') ''')] ).run() == 0 out, err = capfd.readouterr() assert out == 'message' + ansi.ANSI_RESET_ALL assert err == ansi.ANSI_RESET_ALL
def test_stderr_transformer(capfd, stdin): with stdin: assert ExecuteCommand( args=[sys.executable, '-c', dedent(r''' import sys sys.stdout.write('message\n') sys.stderr.write('message\n') ''')], stderr_transformer=ReplaceTransformer('message', 'REPLACED') ).run() == 0 out, err = capfd.readouterr() assert out == 'message\n' + ansi.ANSI_RESET_ALL assert err == 'REPLACED\n' + ansi.ANSI_RESET_ALL
def test_identity_no_newline(capfd, stdin): with stdin: assert ExecuteCommand( [sys.executable, '-c', dedent(r''' import sys sys.stdout.write('stdout') sys.stdout.flush() sys.stderr.write('stderr') sys.stderr.flush() ''')] ).run() == 0 out, err = capfd.readouterr() assert out == 'stdout' + ansi.ANSI_RESET_ALL assert err == 'stderr' + ansi.ANSI_RESET_ALL
def test_bufferized_partial_lines(capfd, stdin): with stdin: assert ExecuteCommand( [sys.executable, '-c', dedent(r''' import sys, time sys.stdout.write('std') sys.stdout.flush() time.sleep(0.5) sys.stdout.write('out1\nstdout2\n') ''')] ).run() == 0 out, err = capfd.readouterr() assert out == 'std\rstdout1\nstdout2\n' + ansi.ANSI_RESET_ALL assert err == ansi.ANSI_RESET_ALL
def test_identity_mixed_stdin_and_err(capfd, stdin): with stdin: assert ExecuteCommand( [sys.executable, '-c', dedent(r''' import sys sys.stdout.write('stdout1\n') sys.stderr.write('stderr2\n') sys.stdout.write('stdout3') sys.stdout.write('stdout4\n') sys.stderr.write('stderr4') sys.stderr.write('stderr5\n') ''')] ).run() == 0 out, err = capfd.readouterr() assert out == 'stdout1\nstdout3stdout4\n' + ansi.ANSI_RESET_ALL assert err == 'stderr2\nstderr4stderr5\n' + ansi.ANSI_RESET_ALL
def test_identity_partial_line(capfd, stdin): with stdin: assert ExecuteCommand( [sys.executable, '-c', dedent(r''' import sys, time sys.stdout.write('stdout1') sys.stdout.flush() time.sleep(0.5) sys.stderr.write('stderr1') sys.stderr.flush() time.sleep(0.5) sys.stdout.write('stdout2') sys.stdout.flush() time.sleep(0.5) sys.stderr.write('stderr2') ''')] ).run() == 0 out, err = capfd.readouterr() assert out == 'stdout1\rstdout1stdout2' + ansi.ANSI_RESET_ALL assert err == 'stderr1\rstderr1stderr2' + ansi.ANSI_RESET_ALL
def test_false(capfd, stdin): with stdin: assert ExecuteCommand(['false']).run() == 1 out, err = capfd.readouterr() assert out == ansi.ANSI_RESET_ALL assert err == ansi.ANSI_RESET_ALL
def test_malformed_utf8(stdin): with stdin: assert ExecuteCommand(['cat', 'tests/data/UTF-8-test.txt']).run() == 0
def test_interrupted(stdin): with stdin: Timer(1.0, os.kill, [os.getpid(), signal.SIGINT]).start() assert ExecuteCommand(['sleep', '100']).run() == -2
def test_cat_stdin_two_lines(capfd, stdin): with stdin: assert ExecuteCommand(['cat']).run() == 0 out, err = capfd.readouterr() assert out == 'line1\nline2\n' + ansi.ANSI_RESET_ALL assert err == ansi.ANSI_RESET_ALL