# HG changeset patch # User Manuel Jacob # Date 1594291962 -7200 # Node ID e9e452eafbfb2beef2315ccee66697207929b1cc # Parent 8e04607023e5ba907982d026960acc15f54d88a9 tests: add tests for when stdout or stderr is connected to `os.devnull` The original motivation was that creating PTYs on Windows is not possible, but `NUL` is recognized as a TTY, so we can have at least some test coverage for the TTY case. I think it doesn’t hurt to run the test cases on all systems. diff -r 8e04607023e5 -r e9e452eafbfb tests/test-stdio.py --- a/tests/test-stdio.py Fri Jul 10 12:27:58 2020 +0200 +++ b/tests/test-stdio.py Thu Jul 09 12:52:42 2020 +0200 @@ -58,6 +58,13 @@ @contextlib.contextmanager +def _devnull(): + devnull = os.open(os.devnull, os.O_WRONLY) + with _closing([devnull]): + yield (None, devnull) + + +@contextlib.contextmanager def _pipes(): rwpair = os.pipe() with _closing(rwpair): @@ -115,7 +122,8 @@ ) try: os.close(child_stream) - check_output(stream_receiver, proc) + if stream_receiver is not None: + check_output(stream_receiver, proc) except: # re-raises proc.terminate() raise @@ -137,12 +145,18 @@ python_args, ) + def test_buffering_stdout_devnull(self): + self._test_buffering('stdout', _devnull, None) + def test_buffering_stdout_pipes(self): self._test_buffering('stdout', _pipes, FULLY_BUFFERED) def test_buffering_stdout_ptys(self): self._test_buffering('stdout', _ptys, LINE_BUFFERED) + def test_buffering_stdout_devnull_unbuffered(self): + self._test_buffering('stdout', _devnull, None, python_args=['-u']) + def test_buffering_stdout_pipes_unbuffered(self): self._test_buffering('stdout', _pipes, UNBUFFERED, python_args=['-u']) @@ -188,24 +202,36 @@ python_args, ) + def test_large_write_stdout_devnull(self): + self._test_large_write('stdout', _devnull) + def test_large_write_stdout_pipes(self): self._test_large_write('stdout', _pipes) def test_large_write_stdout_ptys(self): self._test_large_write('stdout', _ptys) + def test_large_write_stdout_devnull_unbuffered(self): + self._test_large_write('stdout', _devnull, python_args=['-u']) + def test_large_write_stdout_pipes_unbuffered(self): self._test_large_write('stdout', _pipes, python_args=['-u']) def test_large_write_stdout_ptys_unbuffered(self): self._test_large_write('stdout', _ptys, python_args=['-u']) + def test_large_write_stderr_devnull(self): + self._test_large_write('stderr', _devnull) + def test_large_write_stderr_pipes(self): self._test_large_write('stderr', _pipes) def test_large_write_stderr_ptys(self): self._test_large_write('stderr', _ptys) + def test_large_write_stderr_devnull_unbuffered(self): + self._test_large_write('stderr', _devnull, python_args=['-u']) + def test_large_write_stderr_pipes_unbuffered(self): self._test_large_write('stderr', _pipes, python_args=['-u'])