Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions tests/test_3141596.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@
from functools import wraps
from unittest import skipIf
from unittesting import AWAIT_WORKER
from unittesting import DeferrableMethod
from unittesting import DeferrableTestCase
from unittesting.utils import isiterable

BASEDIR = os.path.dirname(os.path.abspath(__file__))

Expand Down Expand Up @@ -83,7 +83,7 @@ def condition():
txt = f.read()

deferred = func(self, txt)
if isiterable(deferred):
if isinstance(deferred, DeferrableMethod):
yield from deferred

yield
Expand Down
2 changes: 2 additions & 0 deletions unittesting/__init__.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
from .core import AWAIT_WORKER
from .core import DeferrableMethod
from .core import DeferrableTestCase
from .core import expectedFailure
from .helpers import DeferrableViewTestCase
Expand All @@ -10,6 +11,7 @@

__all__ = [
"AWAIT_WORKER",
"DeferrableMethod",
"DeferrableTestCase",
"expectedFailure",
"run_scheduler",
Expand Down
3 changes: 3 additions & 0 deletions unittesting/core/__init__.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
import sys

if sys.version_info >= (3, 8):
from .py38.case import DeferrableMethod
from .py38.case import DeferrableTestCase
from .py38.case import expectedFailure
from .py38.runner import AWAIT_WORKER
from .py38.runner import DeferringTextTestRunner
from .py38.suite import DeferrableTestSuite
else:
from .py33.case import DeferrableMethod
from .py33.case import DeferrableTestCase
from .py33.case import expectedFailure
from .py33.runner import AWAIT_WORKER
Expand All @@ -17,6 +19,7 @@

__all__ = [
"AWAIT_WORKER",
"DeferrableMethod",
"DeferrableTestCase",
"DeferrableTestSuite",
"DeferringTextTestRunner",
Expand Down
7 changes: 4 additions & 3 deletions unittesting/core/py33/case.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
import sys
import warnings

from collections.abc import Iterable as DeferrableMethod
from functools import wraps
from unittest import TestCase
from unittest.case import _ExpectedFailure
from unittest.case import _Outcome
from unittest.case import _UnexpectedSuccess
from unittest.case import SkipTest

from ...utils import isiterable

from .runner import defer

__all__ = [
Expand All @@ -22,7 +23,7 @@ def expectedFailure(func):
def wrapper(*args, **kwargs):
try:
deferred = func(*args, **kwargs)
if isiterable(deferred):
if isinstance(deferred, DeferrableMethod):
yield from deferred
except Exception:
raise _ExpectedFailure(sys.exc_info())
Expand All @@ -35,7 +36,7 @@ class DeferrableTestCase(TestCase):
def _executeTestPart(self, function, outcome, isTest=False):
try:
deferred = function()
if isiterable(deferred):
if isinstance(deferred, DeferrableMethod):
yield from deferred
except KeyboardInterrupt:
raise
Expand Down
14 changes: 7 additions & 7 deletions unittesting/core/py33/suite.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
from unittest.suite import _isnotsuite
from unittest.suite import TestSuite

from ...utils import isiterable
from .case import DeferrableMethod


class DeferrableTestSuite(TestSuite):
Expand All @@ -20,13 +20,13 @@ def run(self, result, debug=False):

if _isnotsuite(test):
deferred = self._tearDownPreviousClass(test, result)
if isiterable(deferred):
if isinstance(deferred, DeferrableMethod):
yield from deferred
yield
self._handleModuleFixture(test, result)
yield
deferred = self._handleClassSetUp(test, result)
if isiterable(deferred):
if isinstance(deferred, DeferrableMethod):
yield from deferred
yield
result._previousTestClass = test.__class__
Expand All @@ -40,14 +40,14 @@ def run(self, result, debug=False):
else:
deferred = test.debug()

if isiterable(deferred):
if isinstance(deferred, DeferrableMethod):
yield from deferred

yield

if topLevel:
deferred = self._tearDownPreviousClass(None, result)
if isiterable(deferred):
if isinstance(deferred, DeferrableMethod):
yield from deferred
yield
yield
Expand Down Expand Up @@ -77,7 +77,7 @@ def _handleClassSetUp(self, test, result):
_call_if_exists(result, '_setupStdout')
try:
deferred = setUpClass()
if isiterable(deferred):
if isinstance(deferred, DeferrableMethod):
yield from deferred
except Exception as e:
if isinstance(result, _DebugResult):
Expand Down Expand Up @@ -106,7 +106,7 @@ def _tearDownPreviousClass(self, test, result):
_call_if_exists(result, '_setupStdout')
try:
deferred = tearDownClass()
if isiterable(deferred):
if isinstance(deferred, DeferrableMethod):
yield from deferred
except Exception as e:
if isinstance(result, _DebugResult):
Expand Down
24 changes: 12 additions & 12 deletions unittesting/core/py38/case.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import sys

from collections.abc import Generator as DeferrableMethod
from unittest import TestCase
from unittest.case import _Outcome
from unittest.case import expectedFailure

from ...utils import isiterable
from .runner import defer

__all__ = [
Expand All @@ -17,22 +17,22 @@ class DeferrableTestCase(TestCase):

def _callSetUp(self):
deferred = self.setUp()
if isiterable(deferred):
if isinstance(deferred, DeferrableMethod):
yield from deferred

def _callTestMethod(self, method):
deferred = method()
if isiterable(deferred):
if isinstance(deferred, DeferrableMethod):
yield from deferred

def _callTearDown(self):
deferred = self.tearDown()
if isiterable(deferred):
if isinstance(deferred, DeferrableMethod):
yield from deferred

def _callCleanup(self, function, *args, **kwargs):
deferred = function(*args, **kwargs)
if isiterable(deferred):
if isinstance(deferred, DeferrableMethod):
yield from deferred

@staticmethod
Expand Down Expand Up @@ -71,22 +71,22 @@ def run(self, result=None):

with outcome.testPartExecutor(self):
deferred = self._callSetUp()
if isiterable(deferred):
if isinstance(deferred, DeferrableMethod):
yield from deferred
if outcome.success:
outcome.expecting_failure = expecting_failure
with outcome.testPartExecutor(self, isTest=True):
deferred = self._callTestMethod(testMethod)
if isiterable(deferred):
if isinstance(deferred, DeferrableMethod):
yield from deferred
outcome.expecting_failure = False
with outcome.testPartExecutor(self):
deferred = self._callTearDown()
if isiterable(deferred):
if isinstance(deferred, DeferrableMethod):
yield from deferred

deferred = self.doCleanups()
if isiterable(deferred):
if isinstance(deferred, DeferrableMethod):
yield from deferred
for test, reason in outcome.skipped:
self._addSkip(result, test, reason)
Expand Down Expand Up @@ -123,7 +123,7 @@ def doCleanups(self):
function, args, kwargs = self._cleanups.pop()
with outcome.testPartExecutor(self):
deferred = self._callCleanup(function, *args, **kwargs)
if isiterable(deferred):
if isinstance(deferred, DeferrableMethod):
yield from deferred

# return this for backwards compatibility
Expand All @@ -138,14 +138,14 @@ def doClassCleanups(cls):
function, args, kwargs = cls._class_cleanups.pop()
try:
deferred = function(*args, **kwargs)
if isiterable(deferred):
if isinstance(deferred, DeferrableMethod):
yield from deferred
except Exception:
cls.tearDown_exceptions.append(sys.exc_info())

def __call__(self, *args, **kwds):
deferred = self.run(*args, **kwds)
if isiterable(deferred):
if isinstance(deferred, DeferrableMethod):
yield from deferred
else:
return deferred
18 changes: 9 additions & 9 deletions unittesting/core/py38/suite.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
from unittest.suite import _isnotsuite
from unittest.suite import TestSuite

from ...utils import isiterable
from .case import DeferrableMethod


class DeferrableTestSuite(TestSuite):
Expand All @@ -20,13 +20,13 @@ def run(self, result, debug=False):

if _isnotsuite(test):
deferred = self._tearDownPreviousClass(test, result)
if isiterable(deferred):
if isinstance(deferred, DeferrableMethod):
yield from deferred
yield
self._handleModuleFixture(test, result)
yield
deferred = self._handleClassSetUp(test, result)
if isiterable(deferred):
if isinstance(deferred, DeferrableMethod):
yield from deferred
yield
result._previousTestClass = test.__class__
Expand All @@ -43,14 +43,14 @@ def run(self, result, debug=False):
if self._cleanup:
self._removeTestAtIndex(index)

if isiterable(deferred):
if isinstance(deferred, DeferrableMethod):
yield from deferred

yield

if topLevel:
deferred = self._tearDownPreviousClass(None, result)
if isiterable(deferred):
if isinstance(deferred, DeferrableMethod):
yield from deferred
yield
yield
Expand Down Expand Up @@ -80,7 +80,7 @@ def _handleClassSetUp(self, test, result):
_call_if_exists(result, '_setupStdout')
try:
deferred = setUpClass()
if isiterable(deferred):
if isinstance(deferred, DeferrableMethod):
yield from deferred
except Exception as e:
if isinstance(result, _DebugResult):
Expand All @@ -94,7 +94,7 @@ def _handleClassSetUp(self, test, result):
_call_if_exists(result, '_restoreStdout')
if currentClass._classSetupFailed is True:
deferred = currentClass.doClassCleanups()
if isiterable(deferred):
if isinstance(deferred, DeferrableMethod):
yield from deferred
if len(currentClass.tearDown_exceptions) > 0:
for exc in currentClass.tearDown_exceptions:
Expand All @@ -119,7 +119,7 @@ def _tearDownPreviousClass(self, test, result):
_call_if_exists(result, '_setupStdout')
try:
deferred = tearDownClass()
if isiterable(deferred):
if isinstance(deferred, DeferrableMethod):
yield from deferred
except Exception as e:
if isinstance(result, _DebugResult):
Expand All @@ -131,7 +131,7 @@ def _tearDownPreviousClass(self, test, result):
finally:
_call_if_exists(result, '_restoreStdout')
deferred = previousClass.doClassCleanups()
if isiterable(deferred):
if isinstance(deferred, DeferrableMethod):
yield from deferred
if len(previousClass.tearDown_exceptions) > 0:
for exc in previousClass.tearDown_exceptions:
Expand Down
13 changes: 7 additions & 6 deletions unittesting/helpers/override_preferences_test_cast.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import shutil
import sublime

from ..core import DeferrableMethod
from ..core import DeferrableTestCase


Expand Down Expand Up @@ -32,9 +33,9 @@ def setUpClass(cls):
yield 500
s.clear_on_change(on_change_key)

x = super().setUpClass()
if hasattr(x, '__iter__'):
yield from x
deferred = super().setUpClass()
if isinstance(deferred, DeferrableMethod):
yield from deferred

@classmethod
def tearDownClass(cls):
Expand All @@ -49,6 +50,6 @@ def tearDownClass(cls):
except Exception:
pass

x = super().tearDownClass()
if hasattr(x, '__iter__'):
yield from x
deferred = super().tearDownClass()
if isinstance(deferred, DeferrableMethod):
yield from deferred
Loading