diff -r 1b69f8a7f836 -r 7168c74ebb2e functional_tests/doc_tests/test_init_plugin/init_plugin.rst
--- a/functional_tests/doc_tests/test_init_plugin/init_plugin.rst Fri Mar 05 15:31:57 2010 -0500
+++ b/functional_tests/doc_tests/test_init_plugin/init_plugin.rst Wed Jul 07 10:31:01 2010 -0400
@@ -24,6 +24,7 @@
>>> import unittest
>>> class TestConfigurableWidget(unittest.TestCase):
+ ... longMessage = False
... def setUp(self):
... self.widget = ConfigurableWidget()
... def test_can_frobnicate(self):
diff -r 1b69f8a7f836 -r 7168c74ebb2e functional_tests/doc_tests/test_xunit_plugin/test_skips.rst
--- a/functional_tests/doc_tests/test_xunit_plugin/test_skips.rst Fri Mar 05 15:31:57 2010 -0500
+++ b/functional_tests/doc_tests/test_xunit_plugin/test_skips.rst Wed Jul 07 10:31:01 2010 -0400
@@ -37,4 +37,4 @@
FAILED (SKIP=1, errors=1, failures=1)
>>> open(outfile, 'r').read() # doctest: +ELLIPSIS
-'.........'
+'.........'
diff -r 1b69f8a7f836 -r 7168c74ebb2e functional_tests/test_collector.py
--- a/functional_tests/test_collector.py Fri Mar 05 15:31:57 2010 -0500
+++ b/functional_tests/test_collector.py Wed Jul 07 10:31:01 2010 -0400
@@ -13,7 +13,7 @@
self.result = _TextTestResult(
self.stream, self.descriptions, self.verbosity)
return self.result
-
+
class TestNoseTestCollector(unittest.TestCase):
@@ -27,7 +27,7 @@
warnings.filterwarnings(action='ignore',
category=RuntimeWarning,
module='nose.plugins.manager')
-
+
try:
os.chdir(os.path.join(support, 'issue038'))
unittest.TestProgram(
diff -r 1b69f8a7f836 -r 7168c74ebb2e nose/plugins/manager.py
--- a/nose/plugins/manager.py Fri Mar 05 15:31:57 2010 -0500
+++ b/nose/plugins/manager.py Wed Jul 07 10:31:01 2010 -0400
@@ -182,7 +182,7 @@
"""Null Plugin manager that has no plugins."""
interface = IPluginInterface
def __init__(self):
- self.plugins = ()
+ self._plugins = self.plugins = ()
def __iter__(self):
return ()
diff -r 1b69f8a7f836 -r 7168c74ebb2e nose/plugins/multiprocess.py
--- a/nose/plugins/multiprocess.py Fri Mar 05 15:31:57 2010 -0500
+++ b/nose/plugins/multiprocess.py Wed Jul 07 10:31:01 2010 -0400
@@ -459,7 +459,7 @@
log.debug("Active plugins worker %s: %s", ix, config.plugins._plugins)
loader = loaderClass(config=config)
loader.suiteClass.suiteClass = NoSharedFixtureContextSuite
-
+
def get():
case = testQueue.get(timeout=config.multiprocess_timeout)
return case
diff -r 1b69f8a7f836 -r 7168c74ebb2e nose/result.py
--- a/nose/result.py Fri Mar 05 15:31:57 2010 -0500
+++ b/nose/result.py Wed Jul 07 10:31:01 2010 -0400
@@ -76,6 +76,13 @@
test.passed = False
self.printLabel('ERROR')
+ # override to bypass changes in 2.7
+ def getDescription(self, test):
+ if self.descriptions:
+ return test.shortDescription() or str(test)
+ else:
+ return str(test)
+
def printLabel(self, label, err=None):
# Might get patched into a streamless result
stream = getattr(self, 'stream', None)
diff -r 1b69f8a7f836 -r 7168c74ebb2e nose/suite.py
--- a/nose/suite.py Fri Mar 05 15:31:57 2010 -0500
+++ b/nose/suite.py Wed Jul 07 10:31:01 2010 -0400
@@ -50,22 +50,30 @@
"""Initialize the suite. tests may be an iterable or a generator
"""
self._set_tests(tests)
-
+
def __iter__(self):
return iter(self._tests)
-
+
def __repr__(self):
return "<%s tests=generator (%s)>" % (
_strclass(self.__class__), id(self))
def __hash__(self):
return object.__hash__(self)
-
+
__str__ = __repr__
def addTest(self, test):
self._precache.append(test)
+ # added to bypass run changes in 2.7's unittest
+ def run(self, result):
+ for test in self._tests:
+ if result.shouldStop:
+ break
+ test(result)
+ return result
+
def __nonzero__(self):
log.debug("tests in %s?", id(self))
if self._precache:
@@ -108,7 +116,7 @@
"Access the tests in this suite. Access is through a "
"generator, so iteration may not be repeatable.")
-
+
class ContextSuite(LazySuite):
"""A suite with context.
@@ -118,7 +126,7 @@
The context may be explicitly passed. If it is not, a context (or
nested set of contexts) will be constructed by examining the tests
in the suite.
- """
+ """
failureException = unittest.TestCase.failureException
was_setup = False
was_torndown = False
@@ -133,7 +141,7 @@
packageSetup = ('setup_package', 'setupPackage', 'setUpPackage')
packageTeardown = ('teardown_package', 'teardownPackage',
'tearDownPackage')
-
+
def __init__(self, tests=(), context=None, factory=None,
config=None, resultProxy=None, can_split=True):
log.debug("Context suite for %s (%s) (%s)", tests, context, id(self))
@@ -159,7 +167,7 @@
return '%s:%s' % (repr(self), self.error_context)
else:
return repr(self)
-
+
def __hash__(self):
return object.__hash__(self)
@@ -171,7 +179,7 @@
"""Hook for replacing error tuple output
"""
return sys.exc_info()
-
+
def _exc_info(self):
"""Bottleneck to fix up IronPython string exceptions
"""
@@ -189,6 +197,9 @@
"""Run tests in suite inside of suite fixtures.
"""
# proxy the result for myself
+ log.debug("suite %s (%s) run called, tests: %s", id(self), self, self._tests)
+ #import pdb
+ #pdb.set_trace()
if self.resultProxy:
result, orig = self.resultProxy(result, self), result
else:
@@ -252,7 +263,7 @@
if ctx_callback is None:
return fixt
return ctx_callback(context, fixt)
-
+
def setUp(self):
log.debug("suite %s setUp called, tests: %s", id(self), self._tests)
if not self:
@@ -339,7 +350,7 @@
self.teardownContext(ancestor)
else:
self.teardownContext(context)
-
+
def teardownContext(self, context):
log.debug("%s teardown context %s", self, context)
if self.factory:
@@ -413,7 +424,7 @@
except MixedContextError:
return self.makeSuite(self.mixedSuites(tests), None, **kw)
return self.makeSuite(tests, context, **kw)
-
+
def ancestry(self, context):
"""Return the ancestry of the context (that is, all of the
packages and modules containing the context), in order of
@@ -436,7 +447,7 @@
raise TypeError("%s has no ancestors?" % context)
while ancestors:
log.debug(" %s ancestors %s", context, ancestors)
- yield resolve_name('.'.join(ancestors))
+ yield resolve_name('.'.join(ancestors))
ancestors.pop()
def findContext(self, tests):
@@ -508,7 +519,7 @@
continue
if test_ctx is ancestor:
common.append(test)
- continue
+ continue
for test_ancestor in self.ancestry(test_ctx):
if test_ancestor is ancestor:
common.append(test)
@@ -520,7 +531,7 @@
suite = self.makeSuite(common, ancestor)
tail = remain
return [suite] + self.mixedSuites(tail)
-
+
def wrapTests(self, tests):
log.debug("wrap %s", tests)
if callable(tests) or isinstance(tests, unittest.TestSuite):
@@ -557,7 +568,7 @@
"""Wraps suite and calls final function after suite has
executed. Used to call final functions in cases (like running in
the standard test runner) where test running is not under nose's
- control.
+ control.
"""
def __init__(self, suite, finalize):
self.suite = suite
@@ -566,6 +577,10 @@
def __call__(self, *arg, **kw):
return self.run(*arg, **kw)
+ # 2.7 compat
+ def __iter__(self):
+ return iter(self.suite)
+
def run(self, *arg, **kw):
try:
return self.suite(*arg, **kw)
diff -r 1b69f8a7f836 -r 7168c74ebb2e unit_tests/test_logcapture_plugin.py
--- a/unit_tests/test_logcapture_plugin.py Fri Mar 05 15:31:57 2010 -0500
+++ b/unit_tests/test_logcapture_plugin.py Wed Jul 07 10:31:01 2010 -0400
@@ -1,4 +1,3 @@
-
import sys
from optparse import OptionParser
from nose.config import Config
@@ -8,6 +7,11 @@
from logging import StreamHandler
import unittest
+if sys.version_info >= (2, 7):
+ py27 = True
+else:
+ py27 = False
+
class TestLogCapturePlugin(object):
def test_enabled_by_default(self):
@@ -81,25 +85,30 @@
options, args = parser.parse_args(['--logging-clear-handlers'])
c.configure(options, Config())
eq_(c.clear, True)
-
- def mktest():
+
+ def mktest():
class TC(unittest.TestCase):
def runTest(self):
pass
test = TC()
return test
-
+
logging.getLogger().addHandler(StreamHandler(sys.stdout))
log = logging.getLogger("dummy")
log.addHandler(StreamHandler(sys.stdout))
-
+
c.start()
c.beforeTest(mktest())
c.end()
-
- eq_([str(c.__class__) for c in logging.getLogger().handlers],
- ['nose.plugins.logcapture.MyMemoryHandler'])
- eq_([str(c.__class__) for c in logging.getLogger("dummy").handlers],
+
+
+ if py27:
+ expect = [""]
+ else:
+ expect = ['nose.plugins.logcapture.MyMemoryHandler']
+ eq_([str(c.__class__) for c in logging.getLogger().handlers],
+ expect)
+ eq_([str(c.__class__) for c in logging.getLogger("dummy").handlers],
[])
def test_custom_formatter(self):
@@ -112,7 +121,7 @@
records = c.formatLogRecords()
eq_(1, len(records))
eq_("++Hello++", records[0])
-
+
def test_logging_filter(self):
env = {'NOSE_LOGFILTER': 'foo,bar'}
c = LogCapture()