Kaydet (Commit) c2898c5a authored tarafından Collin Winter's avatar Collin Winter

Standardize on test.test_support.run_unittest() (as opposed to a mix of…

Standardize on test.test_support.run_unittest() (as opposed to a mix of run_unittest() and run_suite()). Also, add functionality to run_unittest() that admits usage of unittest.TestLoader.loadTestsFromModule().
üst 0d4c06e0
...@@ -196,7 +196,9 @@ regression tests. ...@@ -196,7 +196,9 @@ regression tests.
This module defines the following exceptions: This module defines the following exceptions:
\begin{excdesc}{TestFailed} \begin{excdesc}{TestFailed}
Exception to be raised when a test fails. Exception to be raised when a test fails. This is deprecated in favor
of \module{unittest}-based tests and \class{unittest.TestCase}'s
assertion methods.
\end{excdesc} \end{excdesc}
\begin{excdesc}{TestSkipped} \begin{excdesc}{TestSkipped}
...@@ -273,14 +275,18 @@ filter settings. ...@@ -273,14 +275,18 @@ filter settings.
Execute \class{unittest.TestCase} subclasses passed to the function. Execute \class{unittest.TestCase} subclasses passed to the function.
The function scans the classes for methods starting with the prefix The function scans the classes for methods starting with the prefix
\samp{test_} and executes the tests individually. \samp{test_} and executes the tests individually.
This is the preferred way to execute tests.
\end{funcdesc}
\begin{funcdesc}{run_suite}{suite\optional{, testclass}} It is also legal to pass strings as parameters; these should be keys in
Execute the \class{unittest.TestSuite} instance \var{suite}. \code{sys.modules}. Each associated module will be scanned by
The optional argument \var{testclass} accepts one of the test classes in the \code{unittest.TestLoader.loadTestsFromModule()}. This is usually seen in
suite so as to print out more detailed information on where the testing suite the following \function{test_main()} function:
originated from.
\begin{verbatim}
def test_main():
test_support.run_unittest(__name__)
\end{verbatim}
This will run all tests defined in the named module.
\end{funcdesc} \end{funcdesc}
The \module{test.test_support} module defines the following classes: The \module{test.test_support} module defines the following classes:
......
...@@ -40,18 +40,22 @@ Java implementation of Beck's original SmallTalk test framework. Please ...@@ -40,18 +40,22 @@ Java implementation of Beck's original SmallTalk test framework. Please
see the documentation of the unittest_ module for detailed information on see the documentation of the unittest_ module for detailed information on
the interface and general guidelines on writing unittest-based tests. the interface and general guidelines on writing unittest-based tests.
The test_support helper module provides two functions for use by The test_support helper module provides a function for use by
unittest-based tests in the Python regression testing framework: unittest-based tests in the Python regression testing framework,
``run_unittest()``. This is the primary way of running tests in the
- ``run_unittest()`` takes a number of ``unittest.TestCase`` derived classes as standard library. You can pass it any number of the following:
parameters and runs the tests defined in those classes.
- classes derived from or instances of ``unittest.TestCase`` or
- ``run_suite()`` takes a populated ``TestSuite`` instance and runs the ``unittest.TestSuite``. These will be handed off to unittest for
tests. converting into a proper TestSuite instance.
- a string; this must be a key in sys.modules. The module associated with
that string will be scanned by ``unittest.TestLoader.loadTestsFromModule``.
This is usually seen as ``test_support.run_unittest(__name__)`` in a test
module's ``test_main()`` function. This has the advantage of picking up
new tests automatically, without you having to add each new test case
manually.
``run_suite()`` is preferred because unittest files typically grow multiple
test classes, and you might as well be prepared.
All test methods in the Python regression framework have names that All test methods in the Python regression framework have names that
start with "``test_``" and use lower-case names with words separated with start with "``test_``" and use lower-case names with words separated with
underscores. underscores.
...@@ -96,11 +100,7 @@ looks like this (with minor variations):: ...@@ -96,11 +100,7 @@ looks like this (with minor variations)::
...etc... ...etc...
def test_main(): def test_main():
suite = unittest.TestSuite() test_support.run_unittest(__name__)
suite.addTest(unittest.makeSuite(MyTestCase1))
suite.addTest(unittest.makeSuite(MyTestCase2))
...add more suites...
test_support.run_suite(suite)
if __name__ == "__main__": if __name__ == "__main__":
test_main() test_main()
......
...@@ -183,16 +183,8 @@ class BaseXYTestCase(unittest.TestCase): ...@@ -183,16 +183,8 @@ class BaseXYTestCase(unittest.TestCase):
def suite():
suite = unittest.TestSuite()
suite.addTest(unittest.makeSuite(LegacyBase64TestCase))
suite.addTest(unittest.makeSuite(BaseXYTestCase))
return suite
def test_main(): def test_main():
test_support.run_suite(suite()) test_support.run_unittest(__name__)
if __name__ == '__main__': if __name__ == '__main__':
unittest.main(defaultTest='suite') test_main()
...@@ -4,11 +4,11 @@ Run all test cases. ...@@ -4,11 +4,11 @@ Run all test cases.
""" """
import sys import sys
import unittest import unittest
from test.test_support import requires, verbose, run_suite, unlink from test.test_support import requires, verbose, run_unittest, unlink
# When running as a script instead of within the regrtest framework, skip the # When running as a script instead of within the regrtest framework, skip the
# requires test, since it's obvious we want to run them. # requires test, since it's obvious we want to run them.
if __name__ <> '__main__': if __name__ != '__main__':
requires('bsddb') requires('bsddb')
verbose = False verbose = False
...@@ -58,9 +58,7 @@ def suite(): ...@@ -58,9 +58,7 @@ def suite():
# For invocation through regrtest # For invocation through regrtest
def test_main(): def test_main():
tests = suite() run_unittest(suite())
run_suite(tests)
# For invocation as a script # For invocation as a script
if __name__ == '__main__': if __name__ == '__main__':
...@@ -73,4 +71,4 @@ if __name__ == '__main__': ...@@ -73,4 +71,4 @@ if __name__ == '__main__':
print 'python version: %s' % sys.version print 'python version: %s' % sys.version
print '-=' * 38 print '-=' * 38
unittest.main(defaultTest='suite') test_main()
...@@ -51,11 +51,7 @@ class Test_GB18030(test_multibytecodec_support.TestBase, unittest.TestCase): ...@@ -51,11 +51,7 @@ class Test_GB18030(test_multibytecodec_support.TestBase, unittest.TestCase):
has_iso10646 = True has_iso10646 = True
def test_main(): def test_main():
suite = unittest.TestSuite() test_support.run_unittest(__name__)
suite.addTest(unittest.makeSuite(Test_GB2312))
suite.addTest(unittest.makeSuite(Test_GBK))
suite.addTest(unittest.makeSuite(Test_GB18030))
test_support.run_suite(suite)
if __name__ == "__main__": if __name__ == "__main__":
test_main() test_main()
...@@ -21,9 +21,7 @@ class Test_Big5HKSCS(test_multibytecodec_support.TestBase, unittest.TestCase): ...@@ -21,9 +21,7 @@ class Test_Big5HKSCS(test_multibytecodec_support.TestBase, unittest.TestCase):
) )
def test_main(): def test_main():
suite = unittest.TestSuite() test_support.run_unittest(__name__)
suite.addTest(unittest.makeSuite(Test_Big5HKSCS))
test_support.run_suite(suite)
if __name__ == "__main__": if __name__ == "__main__":
test_main() test_main()
...@@ -99,13 +99,7 @@ class Test_SJISX0213(test_multibytecodec_support.TestBase, unittest.TestCase): ...@@ -99,13 +99,7 @@ class Test_SJISX0213(test_multibytecodec_support.TestBase, unittest.TestCase):
) )
def test_main(): def test_main():
suite = unittest.TestSuite() test_support.run_unittest(__name__)
suite.addTest(unittest.makeSuite(Test_CP932))
suite.addTest(unittest.makeSuite(Test_EUC_JISX0213))
suite.addTest(unittest.makeSuite(Test_EUC_JP_COMPAT))
suite.addTest(unittest.makeSuite(Test_SJIS_COMPAT))
suite.addTest(unittest.makeSuite(Test_SJISX0213))
test_support.run_suite(suite)
if __name__ == "__main__": if __name__ == "__main__":
test_main() test_main()
...@@ -45,11 +45,7 @@ class Test_JOHAB(test_multibytecodec_support.TestBase, unittest.TestCase): ...@@ -45,11 +45,7 @@ class Test_JOHAB(test_multibytecodec_support.TestBase, unittest.TestCase):
) )
def test_main(): def test_main():
suite = unittest.TestSuite() test_support.run_unittest(__name__)
suite.addTest(unittest.makeSuite(Test_CP949))
suite.addTest(unittest.makeSuite(Test_EUCKR))
suite.addTest(unittest.makeSuite(Test_JOHAB))
test_support.run_suite(suite)
if __name__ == "__main__": if __name__ == "__main__":
test_main() test_main()
...@@ -21,9 +21,7 @@ class Test_Big5(test_multibytecodec_support.TestBase, unittest.TestCase): ...@@ -21,9 +21,7 @@ class Test_Big5(test_multibytecodec_support.TestBase, unittest.TestCase):
) )
def test_main(): def test_main():
suite = unittest.TestSuite() test_support.run_unittest(__name__)
suite.addTest(unittest.makeSuite(Test_Big5))
test_support.run_suite(suite)
if __name__ == "__main__": if __name__ == "__main__":
test_main() test_main()
...@@ -20,10 +20,7 @@ class TestGBKMap(test_multibytecodec_support.TestBase_Mapping, ...@@ -20,10 +20,7 @@ class TestGBKMap(test_multibytecodec_support.TestBase_Mapping,
'MICSFT/WINDOWS/CP936.TXT' 'MICSFT/WINDOWS/CP936.TXT'
def test_main(): def test_main():
suite = unittest.TestSuite() test_support.run_unittest(__name__)
suite.addTest(unittest.makeSuite(TestGB2312Map))
suite.addTest(unittest.makeSuite(TestGBKMap))
test_support.run_suite(suite)
if __name__ == "__main__": if __name__ == "__main__":
test_main() test_main()
...@@ -14,9 +14,7 @@ class TestBig5HKSCSMap(test_multibytecodec_support.TestBase_Mapping, ...@@ -14,9 +14,7 @@ class TestBig5HKSCSMap(test_multibytecodec_support.TestBase_Mapping,
mapfileurl = 'http://people.freebsd.org/~perky/i18n/BIG5HKSCS.TXT' mapfileurl = 'http://people.freebsd.org/~perky/i18n/BIG5HKSCS.TXT'
def test_main(): def test_main():
suite = unittest.TestSuite() test_support.run_unittest(__name__)
suite.addTest(unittest.makeSuite(TestBig5HKSCSMap))
test_support.run_suite(suite)
if __name__ == "__main__": if __name__ == "__main__":
test_main() test_main()
...@@ -61,13 +61,7 @@ class TestSJISX0213Map(test_multibytecodec_support.TestBase_Mapping, ...@@ -61,13 +61,7 @@ class TestSJISX0213Map(test_multibytecodec_support.TestBase_Mapping,
def test_main(): def test_main():
suite = unittest.TestSuite() test_support.run_unittest(__name__)
suite.addTest(unittest.makeSuite(TestCP932Map))
suite.addTest(unittest.makeSuite(TestEUCJPCOMPATMap))
suite.addTest(unittest.makeSuite(TestSJISCOMPATMap))
suite.addTest(unittest.makeSuite(TestEUCJISX0213Map))
suite.addTest(unittest.makeSuite(TestSJISX0213Map))
test_support.run_suite(suite)
if __name__ == "__main__": if __name__ == "__main__":
test_main() test_main()
...@@ -34,11 +34,7 @@ class TestJOHABMap(test_multibytecodec_support.TestBase_Mapping, ...@@ -34,11 +34,7 @@ class TestJOHABMap(test_multibytecodec_support.TestBase_Mapping,
pass_dectest = [('\\', u'\u20a9')] pass_dectest = [('\\', u'\u20a9')]
def test_main(): def test_main():
suite = unittest.TestSuite() test_support.run_unittest(__name__)
suite.addTest(unittest.makeSuite(TestCP949Map))
suite.addTest(unittest.makeSuite(TestEUCKRMap))
suite.addTest(unittest.makeSuite(TestJOHABMap))
test_support.run_suite(suite)
if __name__ == "__main__": if __name__ == "__main__":
test_main() test_main()
...@@ -25,10 +25,7 @@ class TestCP950Map(test_multibytecodec_support.TestBase_Mapping, ...@@ -25,10 +25,7 @@ class TestCP950Map(test_multibytecodec_support.TestBase_Mapping,
] ]
def test_main(): def test_main():
suite = unittest.TestSuite() test_support.run_unittest(__name__)
suite.addTest(unittest.makeSuite(TestBIG5Map))
suite.addTest(unittest.makeSuite(TestCP950Map))
test_support.run_suite(suite)
if __name__ == "__main__": if __name__ == "__main__":
test_main() test_main()
...@@ -9,7 +9,7 @@ import tempfile ...@@ -9,7 +9,7 @@ import tempfile
import unittest import unittest
import threading import threading
from contextlib import * # Tests __all__ from contextlib import * # Tests __all__
from test.test_support import run_suite from test import test_support
class ContextManagerTestCase(unittest.TestCase): class ContextManagerTestCase(unittest.TestCase):
...@@ -332,9 +332,7 @@ class LockContextTestCase(unittest.TestCase): ...@@ -332,9 +332,7 @@ class LockContextTestCase(unittest.TestCase):
# This is needed to make the test actually run under regrtest.py! # This is needed to make the test actually run under regrtest.py!
def test_main(): def test_main():
run_suite( test_support.run_unittest(__name__)
unittest.defaultTestLoader.loadTestsFromModule(sys.modules[__name__])
)
if __name__ == "__main__": if __name__ == "__main__":
test_main() test_main()
import unittest import unittest
from test.test_support import run_suite from test.test_support import run_unittest
import ctypes.test import ctypes.test
def test_main(): def test_main():
skipped, testcases = ctypes.test.get_tests(ctypes.test, "test_*.py", verbosity=0) skipped, testcases = ctypes.test.get_tests(ctypes.test, "test_*.py", verbosity=0)
suites = [unittest.makeSuite(t) for t in testcases] suites = [unittest.makeSuite(t) for t in testcases]
run_suite(unittest.TestSuite(suites)) run_unittest(unittest.TestSuite(suites))
if __name__ == "__main__": if __name__ == "__main__":
test_main() test_main()
...@@ -128,7 +128,7 @@ class TestTZInfo(unittest.TestCase): ...@@ -128,7 +128,7 @@ class TestTZInfo(unittest.TestCase):
# Base clase for testing a particular aspect of timedelta, time, date and # Base clase for testing a particular aspect of timedelta, time, date and
# datetime comparisons. # datetime comparisons.
class HarmlessMixedComparison(unittest.TestCase): class HarmlessMixedComparison:
# Test that __eq__ and __ne__ don't complain for mixed-type comparisons. # Test that __eq__ and __ne__ don't complain for mixed-type comparisons.
# Subclasses must define 'theclass', and theclass(1, 1, 1) must be a # Subclasses must define 'theclass', and theclass(1, 1, 1) must be a
...@@ -167,7 +167,7 @@ class HarmlessMixedComparison(unittest.TestCase): ...@@ -167,7 +167,7 @@ class HarmlessMixedComparison(unittest.TestCase):
############################################################################# #############################################################################
# timedelta tests # timedelta tests
class TestTimeDelta(HarmlessMixedComparison): class TestTimeDelta(HarmlessMixedComparison, unittest.TestCase):
theclass = timedelta theclass = timedelta
...@@ -514,7 +514,7 @@ class TestDateOnly(unittest.TestCase): ...@@ -514,7 +514,7 @@ class TestDateOnly(unittest.TestCase):
class SubclassDate(date): class SubclassDate(date):
sub_var = 1 sub_var = 1
class TestDate(HarmlessMixedComparison): class TestDate(HarmlessMixedComparison, unittest.TestCase):
# Tests here should pass for both dates and datetimes, except for a # Tests here should pass for both dates and datetimes, except for a
# few tests that TestDateTime overrides. # few tests that TestDateTime overrides.
...@@ -1596,7 +1596,7 @@ class TestDateTime(TestDate): ...@@ -1596,7 +1596,7 @@ class TestDateTime(TestDate):
class SubclassTime(time): class SubclassTime(time):
sub_var = 1 sub_var = 1
class TestTime(HarmlessMixedComparison): class TestTime(HarmlessMixedComparison, unittest.TestCase):
theclass = time theclass = time
...@@ -1879,7 +1879,7 @@ class TestTime(HarmlessMixedComparison): ...@@ -1879,7 +1879,7 @@ class TestTime(HarmlessMixedComparison):
# A mixin for classes with a tzinfo= argument. Subclasses must define # A mixin for classes with a tzinfo= argument. Subclasses must define
# theclass as a class atribute, and theclass(1, 1, 1, tzinfo=whatever) # theclass as a class atribute, and theclass(1, 1, 1, tzinfo=whatever)
# must be legit (which is true for time and datetime). # must be legit (which is true for time and datetime).
class TZInfoBase(unittest.TestCase): class TZInfoBase:
def test_argument_passing(self): def test_argument_passing(self):
cls = self.theclass cls = self.theclass
...@@ -2039,7 +2039,7 @@ class TZInfoBase(unittest.TestCase): ...@@ -2039,7 +2039,7 @@ class TZInfoBase(unittest.TestCase):
# Testing time objects with a non-None tzinfo. # Testing time objects with a non-None tzinfo.
class TestTimeTZ(TestTime, TZInfoBase): class TestTimeTZ(TestTime, TZInfoBase, unittest.TestCase):
theclass = time theclass = time
def test_empty(self): def test_empty(self):
...@@ -2287,7 +2287,7 @@ class TestTimeTZ(TestTime, TZInfoBase): ...@@ -2287,7 +2287,7 @@ class TestTimeTZ(TestTime, TZInfoBase):
# Testing datetime objects with a non-None tzinfo. # Testing datetime objects with a non-None tzinfo.
class TestDateTimeTZ(TestDateTime, TZInfoBase): class TestDateTimeTZ(TestDateTime, TZInfoBase, unittest.TestCase):
theclass = datetime theclass = datetime
def test_trivial(self): def test_trivial(self):
...@@ -3248,31 +3248,13 @@ class Oddballs(unittest.TestCase): ...@@ -3248,31 +3248,13 @@ class Oddballs(unittest.TestCase):
self.assertEqual(as_datetime, datetime_sc) self.assertEqual(as_datetime, datetime_sc)
self.assertEqual(datetime_sc, as_datetime) self.assertEqual(datetime_sc, as_datetime)
def test_suite():
allsuites = [unittest.makeSuite(klass, 'test')
for klass in (TestModule,
TestTZInfo,
TestTimeDelta,
TestDateOnly,
TestDate,
TestDateTime,
TestTime,
TestTimeTZ,
TestDateTimeTZ,
TestTimezoneConversions,
Oddballs,
)
]
return unittest.TestSuite(allsuites)
def test_main(): def test_main():
import gc import gc
import sys import sys
thesuite = test_suite()
lastrc = None lastrc = None
while True: while True:
test_support.run_suite(thesuite) test_support.run_unittest(__name__)
if 1: # change to 0, under a debug build, for some leak detection if 1: # change to 0, under a debug build, for some leak detection
break break
gc.collect() gc.collect()
......
...@@ -4,10 +4,10 @@ ...@@ -4,10 +4,10 @@
import unittest import unittest
# The specific tests now live in Lib/email/test # The specific tests now live in Lib/email/test
from email.test.test_email import suite from email.test.test_email import suite
from test.test_support import run_suite from test import test_support
def test_main(): def test_main():
run_suite(suite()) test_support.run_unittest(suite())
if __name__ == '__main__': if __name__ == '__main__':
test_main() test_main()
...@@ -9,7 +9,7 @@ from test import test_support ...@@ -9,7 +9,7 @@ from test import test_support
def test_main(): def test_main():
suite = test_email_codecs.suite() suite = test_email_codecs.suite()
suite.addTest(test_email_codecs_renamed.suite()) suite.addTest(test_email_codecs_renamed.suite())
test_support.run_suite(suite) test_support.run_unittest(suite)
if __name__ == '__main__': if __name__ == '__main__':
test_main() test_main()
...@@ -4,10 +4,10 @@ ...@@ -4,10 +4,10 @@
import unittest import unittest
# The specific tests now live in Lib/email/test # The specific tests now live in Lib/email/test
from email.test.test_email_renamed import suite from email.test.test_email_renamed import suite
from test.test_support import run_suite from test import test_support
def test_main(): def test_main():
run_suite(suite()) test_support.run_unittest(suite())
if __name__ == '__main__': if __name__ == '__main__':
test_main() test_main()
...@@ -4,7 +4,7 @@ import shutil ...@@ -4,7 +4,7 @@ import shutil
import gettext import gettext
import unittest import unittest
from test.test_support import run_suite from test import test_support
# TODO: # TODO:
...@@ -336,19 +336,8 @@ class WeirdMetadataTest(GettextBaseTest): ...@@ -336,19 +336,8 @@ class WeirdMetadataTest(GettextBaseTest):
'John Doe <jdoe@example.com>\nJane Foobar <jfoobar@example.com>') 'John Doe <jdoe@example.com>\nJane Foobar <jfoobar@example.com>')
def suite():
suite = unittest.TestSuite()
suite.addTest(unittest.makeSuite(GettextTestCase1))
suite.addTest(unittest.makeSuite(GettextTestCase2))
suite.addTest(unittest.makeSuite(PluralFormsTestCase))
suite.addTest(unittest.makeSuite(UnicodeTranslationsTest))
suite.addTest(unittest.makeSuite(WeirdMetadataTest))
return suite
def test_main(): def test_main():
run_suite(suite()) test_support.run_unittest(__name__)
if __name__ == '__main__': if __name__ == '__main__':
test_main() test_main()
......
...@@ -219,13 +219,7 @@ class Test_ISO2022(unittest.TestCase): ...@@ -219,13 +219,7 @@ class Test_ISO2022(unittest.TestCase):
myunichr(x).encode('iso_2022_jp', 'ignore') myunichr(x).encode('iso_2022_jp', 'ignore')
def test_main(): def test_main():
suite = unittest.TestSuite() test_support.run_unittest(__name__)
suite.addTest(unittest.makeSuite(Test_MultibyteCodec))
suite.addTest(unittest.makeSuite(Test_IncrementalEncoder))
suite.addTest(unittest.makeSuite(Test_IncrementalDecoder))
suite.addTest(unittest.makeSuite(Test_StreamWriter))
suite.addTest(unittest.makeSuite(Test_ISO2022))
test_support.run_suite(suite)
if __name__ == "__main__": if __name__ == "__main__":
test_main() test_main()
...@@ -1631,18 +1631,8 @@ class TestParseNumber(BaseTest): ...@@ -1631,18 +1631,8 @@ class TestParseNumber(BaseTest):
"option -l: invalid long integer value: '0x12x'") "option -l: invalid long integer value: '0x12x'")
def _testclasses():
mod = sys.modules[__name__]
return [getattr(mod, name) for name in dir(mod) if name.startswith('Test')]
def suite():
suite = unittest.TestSuite()
for testclass in _testclasses():
suite.addTest(unittest.makeSuite(testclass))
return suite
def test_main(): def test_main():
test_support.run_suite(suite()) test_support.run_unittest(__name__)
if __name__ == '__main__': if __name__ == '__main__':
unittest.main() test_main()
...@@ -135,8 +135,8 @@ bad = [] # Bug report says "/" should be denied, but that is not in the RFC ...@@ -135,8 +135,8 @@ bad = [] # Bug report says "/" should be denied, but that is not in the RFC
RobotTest(7, doc, good, bad) RobotTest(7, doc, good, bad)
def test_main(): def test_main():
test_support.run_suite(tests) test_support.run_unittest(tests)
if __name__=='__main__': if __name__=='__main__':
test_support.Verbose = 1 test_support.Verbose = 1
test_support.run_suite(tests) test_main()
...@@ -8,6 +8,7 @@ import errno ...@@ -8,6 +8,7 @@ import errno
import socket import socket
import sys import sys
import warnings import warnings
import types
class Error(Exception): class Error(Exception):
"""Base class for regression test exceptions.""" """Base class for regression test exceptions."""
...@@ -519,7 +520,7 @@ class BasicTestRunner: ...@@ -519,7 +520,7 @@ class BasicTestRunner:
return result return result
def run_suite(suite, testclass=None): def _run_suite(suite):
"""Run tests from a unittest.TestSuite-derived class.""" """Run tests from a unittest.TestSuite-derived class."""
if verbose: if verbose:
runner = unittest.TextTestRunner(sys.stdout, verbosity=2) runner = unittest.TextTestRunner(sys.stdout, verbosity=2)
...@@ -533,28 +534,26 @@ def run_suite(suite, testclass=None): ...@@ -533,28 +534,26 @@ def run_suite(suite, testclass=None):
elif len(result.failures) == 1 and not result.errors: elif len(result.failures) == 1 and not result.errors:
err = result.failures[0][1] err = result.failures[0][1]
else: else:
if testclass is None: msg = "errors occurred; run in verbose mode for details"
msg = "errors occurred; run in verbose mode for details"
else:
msg = "errors occurred in %s.%s" \
% (testclass.__module__, testclass.__name__)
raise TestFailed(msg) raise TestFailed(msg)
raise TestFailed(err) raise TestFailed(err)
def run_unittest(*classes): def run_unittest(*classes):
"""Run tests from unittest.TestCase-derived classes.""" """Run tests from unittest.TestCase-derived classes."""
valid_types = (unittest.TestSuite, unittest.TestCase)
suite = unittest.TestSuite() suite = unittest.TestSuite()
for cls in classes: for cls in classes:
if isinstance(cls, (unittest.TestSuite, unittest.TestCase)): if isinstance(cls, str):
if cls in sys.modules:
suite.addTest(unittest.findTestCases(sys.modules[cls]))
else:
raise ValueError("str arguments must be keys in sys.modules")
elif isinstance(cls, valid_types):
suite.addTest(cls) suite.addTest(cls)
else: else:
suite.addTest(unittest.makeSuite(cls)) suite.addTest(unittest.makeSuite(cls))
if len(classes)==1: _run_suite(suite)
testclass = classes[0]
else:
testclass = None
run_suite(suite, testclass)
#======================================================================= #=======================================================================
......
...@@ -20,7 +20,7 @@ def test_main(): ...@@ -20,7 +20,7 @@ def test_main():
setUp=setUp, tearDown=tearDown) setUp=setUp, tearDown=tearDown)
) )
test_support.run_suite(suite) test_support.run_unittest(suite)
if __name__ == '__main__': if __name__ == '__main__':
test_main() test_main()
...@@ -822,7 +822,7 @@ class UnicodeTest( ...@@ -822,7 +822,7 @@ class UnicodeTest(
def test_main(): def test_main():
test_support.run_unittest(UnicodeTest) test_support.run_unittest(__name__)
if __name__ == "__main__": if __name__ == "__main__":
test_main() test_main()
...@@ -5,7 +5,7 @@ import os, glob, time, shutil ...@@ -5,7 +5,7 @@ import os, glob, time, shutil
import unicodedata import unicodedata
import unittest import unittest
from test.test_support import run_suite, TestSkipped, TESTFN_UNICODE from test.test_support import run_unittest, TestSkipped, TESTFN_UNICODE
from test.test_support import TESTFN_ENCODING, TESTFN_UNICODE_UNENCODEABLE from test.test_support import TESTFN_ENCODING, TESTFN_UNICODE_UNENCODEABLE
try: try:
TESTFN_ENCODED = TESTFN_UNICODE.encode(TESTFN_ENCODING) TESTFN_ENCODED = TESTFN_UNICODE.encode(TESTFN_ENCODING)
...@@ -205,9 +205,7 @@ class TestUnicodeFiles(unittest.TestCase): ...@@ -205,9 +205,7 @@ class TestUnicodeFiles(unittest.TestCase):
False) False)
def test_main(): def test_main():
suite = unittest.TestSuite() run_unittest(__name__)
suite.addTest(unittest.makeSuite(TestUnicodeFiles))
run_suite(suite)
if __name__ == "__main__": if __name__ == "__main__":
test_main() test_main()
from __future__ import nested_scopes # Backward compat for 2.1 from __future__ import nested_scopes # Backward compat for 2.1
from unittest import TestSuite, TestCase, makeSuite from unittest import TestCase
from wsgiref.util import setup_testing_defaults from wsgiref.util import setup_testing_defaults
from wsgiref.headers import Headers from wsgiref.headers import Headers
from wsgiref.handlers import BaseHandler, BaseCGIHandler from wsgiref.handlers import BaseHandler, BaseCGIHandler
...@@ -11,6 +11,7 @@ from StringIO import StringIO ...@@ -11,6 +11,7 @@ from StringIO import StringIO
from SocketServer import BaseServer from SocketServer import BaseServer
import re, sys import re, sys
from test import test_support
class MockServer(WSGIServer): class MockServer(WSGIServer):
"""Non-socket HTTP server""" """Non-socket HTTP server"""
...@@ -575,11 +576,7 @@ class HandlerTests(TestCase): ...@@ -575,11 +576,7 @@ class HandlerTests(TestCase):
# This epilogue is needed for compatibility with the Python 2.5 regrtest module # This epilogue is needed for compatibility with the Python 2.5 regrtest module
def test_main(): def test_main():
import unittest test_support.run_unittest(__name__)
from test.test_support import run_suite
run_suite(
unittest.defaultTestLoader.loadTestsFromModule(sys.modules[__name__])
)
if __name__ == "__main__": if __name__ == "__main__":
test_main() test_main()
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment