@@ -718,60 +718,76 @@ class Example(object): pass
718718 stack .push (cm )
719719 self .assertIs (stack ._exit_callbacks [- 1 ], cm )
720720
721- class TestRedirectStdout (unittest .TestCase ):
721+
722+ class TestRedirectStream :
723+
724+ redirect_stream = None
725+ orig_stream = None
722726
723727 @support .requires_docstrings
724728 def test_instance_docs (self ):
725729 # Issue 19330: ensure context manager instances have good docstrings
726- cm_docstring = redirect_stdout .__doc__
727- obj = redirect_stdout (None )
730+ cm_docstring = self . redirect_stream .__doc__
731+ obj = self . redirect_stream (None )
728732 self .assertEqual (obj .__doc__ , cm_docstring )
729733
730734 def test_no_redirect_in_init (self ):
731- orig_stdout = sys . stdout
732- redirect_stdout (None )
733- self .assertIs (sys . stdout , orig_stdout )
735+ orig_stdout = getattr ( sys , self . orig_stream )
736+ self . redirect_stream (None )
737+ self .assertIs (getattr ( sys , self . orig_stream ) , orig_stdout )
734738
735739 def test_redirect_to_string_io (self ):
736740 f = io .StringIO ()
737741 msg = "Consider an API like help(), which prints directly to stdout"
738- orig_stdout = sys . stdout
739- with redirect_stdout (f ):
740- print (msg )
741- self .assertIs (sys . stdout , orig_stdout )
742+ orig_stdout = getattr ( sys , self . orig_stream )
743+ with self . redirect_stream (f ):
744+ print (msg , file = getattr ( sys , self . orig_stream ) )
745+ self .assertIs (getattr ( sys , self . orig_stream ) , orig_stdout )
742746 s = f .getvalue ().strip ()
743747 self .assertEqual (s , msg )
744748
745749 def test_enter_result_is_target (self ):
746750 f = io .StringIO ()
747- with redirect_stdout (f ) as enter_result :
751+ with self . redirect_stream (f ) as enter_result :
748752 self .assertIs (enter_result , f )
749753
750754 def test_cm_is_reusable (self ):
751755 f = io .StringIO ()
752- write_to_f = redirect_stdout (f )
753- orig_stdout = sys . stdout
756+ write_to_f = self . redirect_stream (f )
757+ orig_stdout = getattr ( sys , self . orig_stream )
754758 with write_to_f :
755- print ("Hello" , end = " " )
759+ print ("Hello" , end = " " , file = getattr ( sys , self . orig_stream ) )
756760 with write_to_f :
757- print ("World!" )
758- self .assertIs (sys . stdout , orig_stdout )
761+ print ("World!" , file = getattr ( sys , self . orig_stream ) )
762+ self .assertIs (getattr ( sys , self . orig_stream ) , orig_stdout )
759763 s = f .getvalue ()
760764 self .assertEqual (s , "Hello World!\n " )
761765
762766 def test_cm_is_reentrant (self ):
763767 f = io .StringIO ()
764- write_to_f = redirect_stdout (f )
765- orig_stdout = sys . stdout
768+ write_to_f = self . redirect_stream (f )
769+ orig_stdout = getattr ( sys , self . orig_stream )
766770 with write_to_f :
767- print ("Hello" , end = " " )
771+ print ("Hello" , end = " " , file = getattr ( sys , self . orig_stream ) )
768772 with write_to_f :
769- print ("World!" )
770- self .assertIs (sys . stdout , orig_stdout )
773+ print ("World!" , file = getattr ( sys , self . orig_stream ) )
774+ self .assertIs (getattr ( sys , self . orig_stream ) , orig_stdout )
771775 s = f .getvalue ()
772776 self .assertEqual (s , "Hello World!\n " )
773777
774778
779+ class TestRedirectStdout (TestRedirectStream , unittest .TestCase ):
780+
781+ redirect_stream = redirect_stdout
782+ orig_stream = "stdout"
783+
784+
785+ class TestRedirectStderr (TestRedirectStream , unittest .TestCase ):
786+
787+ redirect_stream = redirect_stderr
788+ orig_stream = "stderr"
789+
790+
775791class TestSuppress (unittest .TestCase ):
776792
777793 @support .requires_docstrings
0 commit comments