11import sys
22
3+ from collections .abc import Generator as DeferrableMethod
34from unittest import TestCase
45from unittest .case import _Outcome
56from unittest .case import expectedFailure
67
7- from ...utils import isiterable
88from .runner import defer
99
1010__all__ = [
@@ -17,22 +17,22 @@ class DeferrableTestCase(TestCase):
1717
1818 def _callSetUp (self ):
1919 deferred = self .setUp ()
20- if isiterable (deferred ):
20+ if isinstance (deferred , DeferrableMethod ):
2121 yield from deferred
2222
2323 def _callTestMethod (self , method ):
2424 deferred = method ()
25- if isiterable (deferred ):
25+ if isinstance (deferred , DeferrableMethod ):
2626 yield from deferred
2727
2828 def _callTearDown (self ):
2929 deferred = self .tearDown ()
30- if isiterable (deferred ):
30+ if isinstance (deferred , DeferrableMethod ):
3131 yield from deferred
3232
3333 def _callCleanup (self , function , * args , ** kwargs ):
3434 deferred = function (* args , ** kwargs )
35- if isiterable (deferred ):
35+ if isinstance (deferred , DeferrableMethod ):
3636 yield from deferred
3737
3838 @staticmethod
@@ -71,22 +71,22 @@ def run(self, result=None):
7171
7272 with outcome .testPartExecutor (self ):
7373 deferred = self ._callSetUp ()
74- if isiterable (deferred ):
74+ if isinstance (deferred , DeferrableMethod ):
7575 yield from deferred
7676 if outcome .success :
7777 outcome .expecting_failure = expecting_failure
7878 with outcome .testPartExecutor (self , isTest = True ):
7979 deferred = self ._callTestMethod (testMethod )
80- if isiterable (deferred ):
80+ if isinstance (deferred , DeferrableMethod ):
8181 yield from deferred
8282 outcome .expecting_failure = False
8383 with outcome .testPartExecutor (self ):
8484 deferred = self ._callTearDown ()
85- if isiterable (deferred ):
85+ if isinstance (deferred , DeferrableMethod ):
8686 yield from deferred
8787
8888 deferred = self .doCleanups ()
89- if isiterable (deferred ):
89+ if isinstance (deferred , DeferrableMethod ):
9090 yield from deferred
9191 for test , reason in outcome .skipped :
9292 self ._addSkip (result , test , reason )
@@ -123,7 +123,7 @@ def doCleanups(self):
123123 function , args , kwargs = self ._cleanups .pop ()
124124 with outcome .testPartExecutor (self ):
125125 deferred = self ._callCleanup (function , * args , ** kwargs )
126- if isiterable (deferred ):
126+ if isinstance (deferred , DeferrableMethod ):
127127 yield from deferred
128128
129129 # return this for backwards compatibility
@@ -138,14 +138,14 @@ def doClassCleanups(cls):
138138 function , args , kwargs = cls ._class_cleanups .pop ()
139139 try :
140140 deferred = function (* args , ** kwargs )
141- if isiterable (deferred ):
141+ if isinstance (deferred , DeferrableMethod ):
142142 yield from deferred
143143 except Exception :
144144 cls .tearDown_exceptions .append (sys .exc_info ())
145145
146146 def __call__ (self , * args , ** kwds ):
147147 deferred = self .run (* args , ** kwds )
148- if isiterable (deferred ):
148+ if isinstance (deferred , DeferrableMethod ):
149149 yield from deferred
150150 else :
151151 return deferred
0 commit comments