import subprocess def assertEqual(a, b): if a != b: raise Exception( 'expected {!r} == {!r}, but was disappointed'.format(a, b)) def _run_echo(ctx, args): cmd = '/bin/echo' p = subprocess.Popen( [cmd] + args, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True) out, err = p.communicate() ctx["stdout"] = out ctx["stderr"] = err ctx["exit_code"] = p.returncode def run_echo_without_args(ctx): _run_echo(ctx, []) def run_echo_with_args(ctx, args=None): _run_echo(ctx, args.split()) def exit_code_is_zero(ctx, exit_code=None): exit_code = int(exit_code) assertEqual(ctx['exit_code'], exit_code) def stdout_is_a_newline(ctx): assertEqual(ctx['stdout'], '\n') def stdout_is_text(ctx, text=None): assertEqual(ctx['stdout'], text + '\n') def stderr_is_empty(ctx): assertEqual(ctx['stderr'], '')