@@ -384,9 +384,10 @@ def g1():
384384 trace .append ("Starting g1" )
385385 yield "g1 ham"
386386 ret = yield from g2 ()
387- trace .append ("g2 returned %s" % (ret ,))
388- ret = yield from g2 (42 )
389- trace .append ("g2 returned %s" % (ret ,))
387+ trace .append ("g2 returned %r" % (ret ,))
388+ for v in 1 , (2 ,), StopIteration (3 ):
389+ ret = yield from g2 (v )
390+ trace .append ("g2 returned %r" % (ret ,))
390391 yield "g1 eggs"
391392 trace .append ("Finishing g1" )
392393 def g2 (v = None ):
@@ -410,7 +411,17 @@ def g2(v = None):
410411 "Yielded g2 spam" ,
411412 "Yielded g2 more spam" ,
412413 "Finishing g2" ,
413- "g2 returned 42" ,
414+ "g2 returned 1" ,
415+ "Starting g2" ,
416+ "Yielded g2 spam" ,
417+ "Yielded g2 more spam" ,
418+ "Finishing g2" ,
419+ "g2 returned (2,)" ,
420+ "Starting g2" ,
421+ "Yielded g2 spam" ,
422+ "Yielded g2 more spam" ,
423+ "Finishing g2" ,
424+ "g2 returned StopIteration(3,)" ,
414425 "Yielded g1 eggs" ,
415426 "Finishing g1" ,
416427 ])
@@ -670,23 +681,33 @@ def f(r):
670681 next (gi )
671682 trace .append ("f SHOULD NOT BE HERE" )
672683 except StopIteration as e :
673- trace .append ("f caught %s " % (repr ( e ) ,))
684+ trace .append ("f caught %r " % (e ,))
674685 def g (r ):
675686 trace .append ("g starting" )
676687 yield
677- trace .append ("g returning %s " % (r ,))
688+ trace .append ("g returning %r " % (r ,))
678689 return r
679690 f (None )
680- f (42 )
691+ f (1 )
692+ f ((2 ,))
693+ f (StopIteration (3 ))
681694 self .assertEqual (trace ,[
682695 "g starting" ,
683696 "f resuming g" ,
684697 "g returning None" ,
685698 "f caught StopIteration()" ,
686699 "g starting" ,
687700 "f resuming g" ,
688- "g returning 42" ,
689- "f caught StopIteration(42,)" ,
701+ "g returning 1" ,
702+ "f caught StopIteration(1,)" ,
703+ "g starting" ,
704+ "f resuming g" ,
705+ "g returning (2,)" ,
706+ "f caught StopIteration((2,),)" ,
707+ "g starting" ,
708+ "f resuming g" ,
709+ "g returning StopIteration(3,)" ,
710+ "f caught StopIteration(StopIteration(3,),)" ,
690711 ])
691712
692713 def test_send_and_return_with_value (self ):
@@ -706,50 +727,64 @@ def f(r):
706727 def g (r ):
707728 trace .append ("g starting" )
708729 x = yield
709- trace .append ("g received %s " % (x ,))
710- trace .append ("g returning %s " % (r ,))
730+ trace .append ("g received %r " % (x ,))
731+ trace .append ("g returning %r " % (r ,))
711732 return r
712733 f (None )
713- f (42 )
714- self .assertEqual (trace ,[
734+ f (1 )
735+ f ((2 ,))
736+ f (StopIteration (3 ))
737+ self .assertEqual (trace , [
715738 "g starting" ,
716739 "f sending spam to g" ,
717- "g received spam" ,
740+ "g received ' spam' " ,
718741 "g returning None" ,
719742 "f caught StopIteration()" ,
720743 "g starting" ,
721744 "f sending spam to g" ,
722- "g received spam" ,
723- "g returning 42" ,
724- "f caught StopIteration(42,)" ,
745+ "g received 'spam'" ,
746+ "g returning 1" ,
747+ 'f caught StopIteration(1,)' ,
748+ 'g starting' ,
749+ 'f sending spam to g' ,
750+ "g received 'spam'" ,
751+ 'g returning (2,)' ,
752+ 'f caught StopIteration((2,),)' ,
753+ 'g starting' ,
754+ 'f sending spam to g' ,
755+ "g received 'spam'" ,
756+ 'g returning StopIteration(3,)' ,
757+ 'f caught StopIteration(StopIteration(3,),)'
725758 ])
726759
727760 def test_catching_exception_from_subgen_and_returning (self ):
728761 """
729762 Test catching an exception thrown into a
730763 subgenerator and returning a value
731764 """
732- trace = []
733765 def inner ():
734766 try :
735767 yield 1
736768 except ValueError :
737769 trace .append ("inner caught ValueError" )
738- return 2
770+ return value
739771
740772 def outer ():
741773 v = yield from inner ()
742- trace .append ("inner returned %r to outer" % v )
774+ trace .append ("inner returned %r to outer" % ( v ,) )
743775 yield v
744- g = outer ()
745- trace .append (next (g ))
746- trace .append (g .throw (ValueError ))
747- self .assertEqual (trace ,[
748- 1 ,
749- "inner caught ValueError" ,
750- "inner returned 2 to outer" ,
751- 2 ,
752- ])
776+
777+ for value in 2 , (2 ,), StopIteration (2 ):
778+ trace = []
779+ g = outer ()
780+ trace .append (next (g ))
781+ trace .append (repr (g .throw (ValueError )))
782+ self .assertEqual (trace , [
783+ 1 ,
784+ "inner caught ValueError" ,
785+ "inner returned %r to outer" % (value ,),
786+ repr (value ),
787+ ])
753788
754789 def test_throwing_GeneratorExit_into_subgen_that_returns (self ):
755790 """
0 commit comments