@@ -887,12 +887,57 @@ class Something(Base, metaclass=Meta):
887887 self .assertEqual (inspect .getattr_static (Something , 'foo' ), 3 )
888888
889889
890+ class TestGetGeneratorState (unittest .TestCase ):
891+
892+ def setUp (self ):
893+ def number_generator ():
894+ for number in range (5 ):
895+ yield number
896+ self .generator = number_generator ()
897+
898+ def _generatorstate (self ):
899+ return inspect .getgeneratorstate (self .generator )
900+
901+ def test_created (self ):
902+ self .assertEqual (self ._generatorstate (), inspect .GEN_CREATED )
903+
904+ def test_suspended (self ):
905+ next (self .generator )
906+ self .assertEqual (self ._generatorstate (), inspect .GEN_SUSPENDED )
907+
908+ def test_closed_after_exhaustion (self ):
909+ for i in self .generator :
910+ pass
911+ self .assertEqual (self ._generatorstate (), inspect .GEN_CLOSED )
912+
913+ def test_closed_after_immediate_exception (self ):
914+ with self .assertRaises (RuntimeError ):
915+ self .generator .throw (RuntimeError )
916+ self .assertEqual (self ._generatorstate (), inspect .GEN_CLOSED )
917+
918+ def test_running (self ):
919+ # As mentioned on issue #10220, checking for the RUNNING state only
920+ # makes sense inside the generator itself.
921+ # The following generator checks for this by using the closure's
922+ # reference to self and the generator state checking helper method
923+ def running_check_generator ():
924+ for number in range (5 ):
925+ self .assertEqual (self ._generatorstate (), inspect .GEN_RUNNING )
926+ yield number
927+ self .assertEqual (self ._generatorstate (), inspect .GEN_RUNNING )
928+ self .generator = running_check_generator ()
929+ # Running up to the first yield
930+ next (self .generator )
931+ # Running after the first yield
932+ next (self .generator )
933+
934+
890935def test_main ():
891936 run_unittest (
892937 TestDecorators , TestRetrievingSourceCode , TestOneliners , TestBuggyCases ,
893938 TestInterpreterStack , TestClassesAndFunctions , TestPredicates ,
894939 TestGetcallargsFunctions , TestGetcallargsMethods ,
895- TestGetcallargsUnboundMethods , TestGetattrStatic
940+ TestGetcallargsUnboundMethods , TestGetattrStatic , TestGetGeneratorState
896941 )
897942
898943if __name__ == "__main__" :
0 commit comments