def test_stdin_binary(self): stdin_data = '\0' if PY3: fake_stream = StringIO(stdin_data) fake_stream.buffer = BytesIO(to_bytes(stdin_data)) else: fake_stream = BytesIO(to_bytes(stdin_data)) with patch('sys.stdin', fake_stream): ve = self._vault_editor() data = ve.read_data('-') self.assertEqual(data, b'\0')
def redirect_streams(self, func): """Capture and return stdout and stderr as strings when calling func.""" # (the underlying buffer is used by convert() to write binary gzipped # data to stdout.) stdout = StringIO() stdout.buffer = BytesIO() stderr = StringIO() with redirect_stdout(stdout), redirect_stderr(stderr): func() # kludgy way to get whichever "version" of stdout has something in it, # preferring the regular one. stdout_buffer = stdout.buffer.getvalue() stdout = stdout.getvalue() if not stdout and stdout_buffer: stdout = stdout_buffer stderr = stderr.getvalue() return stdout, stderr
def swap_stdin_and_argv(stdin_data='', argv_data=tuple()): """ context manager that temporarily masks the test runner's values for stdin and argv """ real_stdin = sys.stdin real_argv = sys.argv if PY3: fake_stream = StringIO(stdin_data) fake_stream.buffer = BytesIO(to_bytes(stdin_data)) else: fake_stream = BytesIO(to_bytes(stdin_data)) try: sys.stdin = fake_stream sys.argv = argv_data yield finally: sys.stdin = real_stdin sys.argv = real_argv
def execute(args, settings=None, stdout=None, stdin=None, expected=0): """Execute command and return output.""" if settings is None: settings = () elif not settings: settings = None output = StringIO() output.buffer = BytesIO() backup = sys.stdout backup_err = sys.stderr try: sys.stdout = output sys.stderr = output if stdout: stdout = output result = main(args=args, settings=settings, stdout=stdout, stdin=stdin) assert result == expected finally: sys.stdout = backup sys.stderr = backup_err result = output.buffer.getvalue() if not result: result = output.getvalue() return result
def make_buffer(): buf = StringIO() buf.buffer = BytesIO() return buf
def make_buffer(): if PY2: return BytesIO() buf = StringIO() buf.buffer = BytesIO() return buf