diff --git a/Doc/library/unittest.rst b/Doc/library/unittest.rst index a53fb8718a4..e2272f71466 100644 --- a/Doc/library/unittest.rst +++ b/Doc/library/unittest.rst @@ -676,7 +676,7 @@ Test cases will be *msg* if given, otherwise it will be :const:`None`. .. deprecated:: 3.1 - :meth:`failUnless`. + :meth:`failUnless`; use one of the ``assert`` variants. :meth:`assert_`; use :meth:`assertTrue`. @@ -704,7 +704,7 @@ Test cases function for comparing strings. .. deprecated:: 3.1 - :meth:`failUnlessEqual`. + :meth:`failUnlessEqual`; use :meth:`assertEqual`. .. method:: assertNotEqual(first, second, msg=None) @@ -718,7 +718,7 @@ Test cases *first* and *second*. .. deprecated:: 3.1 - :meth:`failIfEqual`. + :meth:`failIfEqual`; use :meth:`assertNotEqual`. .. method:: assertAlmostEqual(first, second, *, places=7, msg=None) @@ -737,7 +737,7 @@ Test cases Objects that compare equal are automatically almost equal. .. deprecated:: 3.1 - :meth:`failUnlessAlmostEqual`. + :meth:`failUnlessAlmostEqual`; use :meth:`assertAlmostEqual`. .. method:: assertNotAlmostEqual(first, second, *, places=7, msg=None) @@ -756,7 +756,7 @@ Test cases Objects that compare equal automatically fail. .. deprecated:: 3.1 - :meth:`failIfAlmostEqual`. + :meth:`failIfAlmostEqual`; use :meth:`assertNotAlmostEqual`. .. method:: assertGreater(first, second, msg=None) @@ -923,7 +923,7 @@ Test cases Added the :attr:`exception` attribute. .. deprecated:: 3.1 - :meth:`failUnlessRaises`. + :meth:`failUnlessRaises`; use :meth:`assertRaises`. .. method:: assertRaisesRegexp(exception, regexp[, callable, ...]) @@ -1000,7 +1000,7 @@ Test cases for the error message. .. deprecated:: 3.1 - :meth:`failIf`. + :meth:`failIf`; use :meth:`assertFalse`. .. method:: fail(msg=None) diff --git a/Lib/distutils/tests/test_bdist.py b/Lib/distutils/tests/test_bdist.py index f2849a9756a..29dcc7c8ba9 100644 --- a/Lib/distutils/tests/test_bdist.py +++ b/Lib/distutils/tests/test_bdist.py @@ -5,6 +5,8 @@ import os import tempfile import shutil +from test.support import run_unittest + from distutils.core import Distribution from distutils.command.bdist import bdist from distutils.tests import support @@ -40,4 +42,4 @@ def test_suite(): return unittest.makeSuite(BuildTestCase) if __name__ == '__main__': - test_support.run_unittest(test_suite()) + run_unittest(test_suite()) diff --git a/Lib/distutils/tests/test_bdist_dumb.py b/Lib/distutils/tests/test_bdist_dumb.py index 5eaef2a9d70..746144bf5bf 100644 --- a/Lib/distutils/tests/test_bdist_dumb.py +++ b/Lib/distutils/tests/test_bdist_dumb.py @@ -11,6 +11,8 @@ try: except ImportError: zlib = None +from test.support import run_unittest + from distutils.core import Distribution from distutils.command.bdist_dumb import bdist_dumb from distutils.tests import support @@ -100,4 +102,4 @@ def test_suite(): return unittest.makeSuite(BuildDumbTestCase) if __name__ == '__main__': - test_support.run_unittest(test_suite()) + run_unittest(test_suite()) diff --git a/Lib/distutils/tests/test_bdist_msi.py b/Lib/distutils/tests/test_bdist_msi.py index ba2d3e19c2b..2b2d8542ee0 100644 --- a/Lib/distutils/tests/test_bdist_msi.py +++ b/Lib/distutils/tests/test_bdist_msi.py @@ -2,6 +2,8 @@ import unittest import sys +from test.support import run_unittest + from distutils.tests import support @unittest.skipUnless(sys.platform=="win32", "These tests are only for win32") @@ -20,4 +22,4 @@ def test_suite(): return unittest.makeSuite(BDistMSITestCase) if __name__ == '__main__': - test_support.run_unittest(test_suite()) + run_unittest(test_suite()) diff --git a/Lib/distutils/tests/test_bdist_rpm.py b/Lib/distutils/tests/test_bdist_rpm.py index 2aa257f7e63..1014e549af8 100644 --- a/Lib/distutils/tests/test_bdist_rpm.py +++ b/Lib/distutils/tests/test_bdist_rpm.py @@ -6,6 +6,8 @@ import os import tempfile import shutil +from test.support import run_unittest + from distutils.core import Distribution from distutils.command.bdist_rpm import bdist_rpm from distutils.tests import support @@ -122,4 +124,4 @@ def test_suite(): return unittest.makeSuite(BuildRpmTestCase) if __name__ == '__main__': - test_support.run_unittest(test_suite()) + run_unittest(test_suite()) diff --git a/Lib/distutils/tests/test_bdist_wininst.py b/Lib/distutils/tests/test_bdist_wininst.py index 9b1ba6d1074..ffe413536c2 100644 --- a/Lib/distutils/tests/test_bdist_wininst.py +++ b/Lib/distutils/tests/test_bdist_wininst.py @@ -1,6 +1,8 @@ """Tests for distutils.command.bdist_wininst.""" import unittest +from test.support import run_unittest + from distutils.command.bdist_wininst import bdist_wininst from distutils.tests import support @@ -27,4 +29,4 @@ def test_suite(): return unittest.makeSuite(BuildWinInstTestCase) if __name__ == '__main__': - test_support.run_unittest(test_suite()) + run_unittest(test_suite()) diff --git a/Lib/distutils/tests/test_cmd.py b/Lib/distutils/tests/test_cmd.py index 55ae421d460..728652e2caa 100644 --- a/Lib/distutils/tests/test_cmd.py +++ b/Lib/distutils/tests/test_cmd.py @@ -1,7 +1,7 @@ """Tests for distutils.cmd.""" import unittest import os -from test.support import captured_stdout +from test.support import captured_stdout, run_unittest from distutils.cmd import Command from distutils.dist import Distribution @@ -124,4 +124,4 @@ def test_suite(): return unittest.makeSuite(CommandTestCase) if __name__ == '__main__': - test_support.run_unittest(test_suite()) + run_unittest(test_suite()) diff --git a/Lib/distutils/tests/test_cygwinccompiler.py b/Lib/distutils/tests/test_cygwinccompiler.py index 4b95dfa3aae..374f392d619 100644 --- a/Lib/distutils/tests/test_cygwinccompiler.py +++ b/Lib/distutils/tests/test_cygwinccompiler.py @@ -6,7 +6,7 @@ import subprocess import warnings import sysconfig -from test.support import check_warnings +from test.support import check_warnings, run_unittest from test.support import captured_stdout from distutils import cygwinccompiler @@ -109,4 +109,4 @@ def test_suite(): return unittest.makeSuite(CygwinCCompilerTestCase) if __name__ == '__main__': - test_support.run_unittest(test_suite()) + run_unittest(test_suite()) diff --git a/Lib/distutils/tests/test_emxccompiler.py b/Lib/distutils/tests/test_emxccompiler.py index 2176d641d01..1360f8297a6 100644 --- a/Lib/distutils/tests/test_emxccompiler.py +++ b/Lib/distutils/tests/test_emxccompiler.py @@ -4,7 +4,7 @@ import sys import os import warnings -from test.support import check_warnings +from test.support import check_warnings, run_unittest from test.support import captured_stdout from distutils.emxccompiler import get_versions @@ -30,4 +30,4 @@ def test_suite(): return unittest.makeSuite(EmxCCompilerTestCase) if __name__ == '__main__': - test_support.run_unittest(test_suite()) + run_unittest(test_suite()) diff --git a/Lib/distutils/tests/test_sysconfig.py b/Lib/distutils/tests/test_sysconfig.py index e7df8031685..9496950f70a 100644 --- a/Lib/distutils/tests/test_sysconfig.py +++ b/Lib/distutils/tests/test_sysconfig.py @@ -2,6 +2,7 @@ import os import test import unittest +import shutil from distutils import sysconfig from distutils.tests import support diff --git a/Lib/email/test/test_email_torture.py b/Lib/email/test/test_email_torture.py index 67d1a4775ee..544b1bbb397 100644 --- a/Lib/email/test/test_email_torture.py +++ b/Lib/email/test/test_email_torture.py @@ -13,7 +13,7 @@ from io import StringIO from types import ListType from email.test.test_email import TestEmailBase -from test.support import TestSkipped +from test.support import TestSkipped, run_unittest import email from email import __file__ as testfile @@ -128,7 +128,7 @@ def suite(): def test_main(): for testclass in _testclasses(): - support.run_unittest(testclass) + run_unittest(testclass) diff --git a/Lib/genericpath.py b/Lib/genericpath.py index 41ad234829f..2174187a03a 100644 --- a/Lib/genericpath.py +++ b/Lib/genericpath.py @@ -15,7 +15,7 @@ __all__ = ['commonprefix', 'exists', 'getatime', 'getctime', 'getmtime', def exists(path): """Test whether a path exists. Returns False for broken symbolic links""" try: - st = os.stat(path) + os.stat(path) except os.error: return False return True diff --git a/Lib/mimetypes.py b/Lib/mimetypes.py index f63a733e879..3c9883c917e 100644 --- a/Lib/mimetypes.py +++ b/Lib/mimetypes.py @@ -538,7 +538,6 @@ _default_mime_types() if __name__ == '__main__': - import sys import getopt USAGE = """\ diff --git a/Lib/posixpath.py b/Lib/posixpath.py index aace2b203d3..5783975e4ac 100644 --- a/Lib/posixpath.py +++ b/Lib/posixpath.py @@ -158,7 +158,7 @@ def islink(path): def lexists(path): """Test whether a path exists. Returns True for broken symbolic links""" try: - st = os.lstat(path) + os.lstat(path) except os.error: return False return True diff --git a/Lib/subprocess.py b/Lib/subprocess.py index b33601a5933..b6afdeca563 100644 --- a/Lib/subprocess.py +++ b/Lib/subprocess.py @@ -930,7 +930,7 @@ class Popen(object): """Wait for child process to terminate. Returns returncode attribute.""" if self.returncode is None: - obj = WaitForSingleObject(self._handle, INFINITE) + WaitForSingleObject(self._handle, INFINITE) self.returncode = GetExitCodeProcess(self._handle) return self.returncode diff --git a/Lib/test/test_csv.py b/Lib/test/test_csv.py index 2c4b78305df..ca67ac6ee0f 100644 --- a/Lib/test/test_csv.py +++ b/Lib/test/test_csv.py @@ -488,10 +488,10 @@ hammer and saw" def test_null(self): self.writerAssertEqual([], '') - def test_single(self): + def test_single_writer(self): self.writerAssertEqual([['abc']], 'abc\r\n') - def test_simple(self): + def test_simple_writer(self): self.writerAssertEqual([[1, 2, 'abc', 3, 4]], '1,2,abc,3,4\r\n') def test_quotes(self): diff --git a/Lib/test/test_docxmlrpc.py b/Lib/test/test_docxmlrpc.py index 5306c31d713..112be4643b6 100644 --- a/Lib/test/test_docxmlrpc.py +++ b/Lib/test/test_docxmlrpc.py @@ -4,6 +4,7 @@ import sys from test import support import threading import time +import socket import unittest PORT = None diff --git a/Lib/test/test_fnmatch.py b/Lib/test/test_fnmatch.py index 506c67999c5..2b510995796 100644 --- a/Lib/test/test_fnmatch.py +++ b/Lib/test/test_fnmatch.py @@ -50,6 +50,11 @@ class FnmatchTestCase(unittest.TestCase): self.assertRaises(TypeError, fnmatchcase, 'test', b'*') self.assertRaises(TypeError, fnmatchcase, b'test', '*') + def test_fnmatchcase(self): + check = self.check_match + check('AbC', 'abc', 0) + check('abc', 'AbC', 0) + def test_bytes(self): self.check_match(b'test', b'te*') self.check_match(b'test\xff', b'te*\xff') diff --git a/Lib/test/test_functools.py b/Lib/test/test_functools.py index df335e8614a..ae47dae95d8 100644 --- a/Lib/test/test_functools.py +++ b/Lib/test/test_functools.py @@ -45,9 +45,17 @@ class TestPartial(unittest.TestCase): # attributes should not be writable if not isinstance(self.thetype, type): return - self.assertRaises(TypeError, setattr, p, 'func', map) - self.assertRaises(TypeError, setattr, p, 'args', (1, 2)) - self.assertRaises(TypeError, setattr, p, 'keywords', dict(a=1, b=2)) + self.assertRaises(AttributeError, setattr, p, 'func', map) + self.assertRaises(AttributeError, setattr, p, 'args', (1, 2)) + self.assertRaises(AttributeError, setattr, p, 'keywords', dict(a=1, b=2)) + + p = self.thetype(hex) + try: + del p.__dict__ + except TypeError: + pass + else: + self.fail('partial object allowed __dict__ to be deleted') def test_argument_checking(self): self.assertRaises(TypeError, self.thetype) # need at least a func arg @@ -123,15 +131,6 @@ class TestPartial(unittest.TestCase): self.assertRaises(ZeroDivisionError, self.thetype(f), 1, 0) self.assertRaises(ZeroDivisionError, self.thetype(f, y=0), 1) - def test_attributes(self): - p = self.thetype(hex) - try: - del p.__dict__ - except TypeError: - pass - else: - self.fail('partial object allowed __dict__ to be deleted') - def test_weakref(self): f = self.thetype(int, base=16) p = proxy(f) diff --git a/Lib/test/test_long.py b/Lib/test/test_long.py index b4ab74f0847..3c6b2159a0c 100644 --- a/Lib/test/test_long.py +++ b/Lib/test/test_long.py @@ -502,7 +502,7 @@ class LongTest(unittest.TestCase): self.d = d assert float(n) / float(d) == value else: - raise TypeError("can't deal with %r" % val) + raise TypeError("can't deal with %r" % value) def _cmp__(self, other): if not isinstance(other, Rat): diff --git a/Lib/test/test_minidom.py b/Lib/test/test_minidom.py index 606fada99da..bd20fa14c35 100644 --- a/Lib/test/test_minidom.py +++ b/Lib/test/test_minidom.py @@ -1449,12 +1449,13 @@ class MinidomTest(unittest.TestCase): self.confirm(len(n1.entities) == len(n2.entities) and len(n1.notations) == len(n2.notations)) for i in range(len(n1.notations)): + # XXX this loop body doesn't seem to be executed? no1 = n1.notations.item(i) no2 = n1.notations.item(i) self.confirm(no1.name == no2.name and no1.publicId == no2.publicId and no1.systemId == no2.systemId) - statck.append((no1, no2)) + stack.append((no1, no2)) for i in range(len(n1.entities)): e1 = n1.entities.item(i) e2 = n2.entities.item(i) diff --git a/Lib/test/test_multiprocessing.py b/Lib/test/test_multiprocessing.py index 452e1928301..035860bd961 100644 --- a/Lib/test/test_multiprocessing.py +++ b/Lib/test/test_multiprocessing.py @@ -1600,10 +1600,10 @@ class _TestSharedCTypes(BaseTestCase): return x = Value('i', 7, lock=lock) - y = Value(ctypes.c_double, 1.0/3.0, lock=lock) + y = Value(c_double, 1.0/3.0, lock=lock) foo = Value(_Foo, 3, 2, lock=lock) - arr = Array('d', list(range(10)), lock=lock) - string = Array('c', 20, lock=lock) + arr = self.Array('d', list(range(10)), lock=lock) + string = self.Array('c', 20, lock=lock) string.value = 'hello' p = self.Process(target=self._double, args=(x, y, foo, arr, string)) diff --git a/Lib/test/test_optparse.py b/Lib/test/test_optparse.py index ac33d618838..e9cc2decd12 100644 --- a/Lib/test/test_optparse.py +++ b/Lib/test/test_optparse.py @@ -441,7 +441,7 @@ def _check_duration(option, opt, value): return int(value) else: return int(value[:-1]) * _time_units[value[-1]] - except ValueError as IndexError: + except (ValueError, IndexError): raise OptionValueError( 'option %s: invalid duration: %r' % (opt, value)) diff --git a/Lib/test/test_pep292.py b/Lib/test/test_pep292.py index ce9b66363b7..8537b25616e 100644 --- a/Lib/test/test_pep292.py +++ b/Lib/test/test_pep292.py @@ -86,13 +86,6 @@ class TestTemplate(unittest.TestCase): s = Template('$who likes $100') raises(ValueError, s.substitute, dict(who='tim')) - def test_delimiter_override(self): - class PieDelims(Template): - delimiter = '@' - s = PieDelims('@who likes to eat a bag of @{what} worth $100') - self.assertEqual(s.substitute(dict(who='tim', what='ham')), - 'tim likes to eat a bag of ham worth $100') - def test_idpattern_override(self): class PathPattern(Template): idpattern = r'[_a-z][._a-z0-9]*' @@ -183,6 +176,12 @@ class TestTemplate(unittest.TestCase): raises(ValueError, s.substitute, dict(gift='bud', who='you')) eq(s.safe_substitute(), 'this &gift is for &{who} &') + class PieDelims(Template): + delimiter = '@' + s = PieDelims('@who likes to eat a bag of @{what} worth $100') + self.assertEqual(s.substitute(dict(who='tim', what='ham')), + 'tim likes to eat a bag of ham worth $100') + def test_main(): from test import support diff --git a/Lib/test/test_platform.py b/Lib/test/test_platform.py index af371856862..98751624db3 100644 --- a/Lib/test/test_platform.py +++ b/Lib/test/test_platform.py @@ -175,8 +175,10 @@ class PlatformTest(unittest.TestCase): if os.path.isdir(sys.executable) and \ os.path.exists(sys.executable+'.exe'): # Cygwin horror - executable = executable + '.exe' - res = platform.libc_ver(sys.executable) + executable = sys.executable + '.exe' + else: + executable = sys.executable + res = platform.libc_ver(executable) def test_parse_release_file(self): diff --git a/Lib/test/test_posixpath.py b/Lib/test/test_posixpath.py index be0afd0a5fe..7ba95f712d9 100644 --- a/Lib/test/test_posixpath.py +++ b/Lib/test/test_posixpath.py @@ -2,7 +2,7 @@ import unittest from test import support, test_genericpath import posixpath, os -from posixpath import realpath, abspath, join, dirname, basename, relpath +from posixpath import realpath, abspath, dirname, basename # An absolute path to a temporary filename for testing. We can't rely on TESTFN # being an absolute path, so we need this. diff --git a/Lib/test/test_richcmp.py b/Lib/test/test_richcmp.py index aec8bf33278..f8f3717b641 100644 --- a/Lib/test/test_richcmp.py +++ b/Lib/test/test_richcmp.py @@ -192,12 +192,12 @@ class MiscTest(unittest.TestCase): def test_misbehavin(self): class Misb: - def __lt__(self, other): return 0 - def __gt__(self, other): return 0 - def __eq__(self, other): return 0 - def __le__(self, other): raise TestFailed("This shouldn't happen") - def __ge__(self, other): raise TestFailed("This shouldn't happen") - def __ne__(self, other): raise TestFailed("This shouldn't happen") + def __lt__(self_, other): return 0 + def __gt__(self_, other): return 0 + def __eq__(self_, other): return 0 + def __le__(self_, other): self.fail("This shouldn't happen") + def __ge__(self_, other): self.fail("This shouldn't happen") + def __ne__(self_, other): self.fail("This shouldn't happen") a = Misb() b = Misb() self.assertEqual(a> bad data " "<<{outdata:s}>> ({nout:d}) received; " "expected <<{indata:s}>> ({nin:d})\n".format( @@ -1110,12 +1110,12 @@ else: ) except ValueError as e: if expect_success: - raise support.TestFailed( + self.fail( "Failed to send with method <<{name:s}>>; " "expected to succeed.\n".format(name=meth_name) ) if not str(e).startswith(meth_name): - raise support.TestFailed( + self.fail( "Method <<{name:s}>> failed with unexpected " "exception message: {exp:s}\n".format( name=meth_name, exp=e @@ -1129,7 +1129,7 @@ else: outdata = recv_meth(*args) outdata = str(outdata, 'ASCII', 'strict') if outdata != indata.lower(): - raise support.TestFailed( + self.fail( "While receiving with <<{name:s}>> bad data " "<<{outdata:s}>> ({nout:d}) received; " "expected <<{indata:s}>> ({nin:d})\n".format( @@ -1140,12 +1140,12 @@ else: ) except ValueError as e: if expect_success: - raise support.TestFailed( + self.fail( "Failed to receive with method <<{name:s}>>; " "expected to succeed.\n".format(name=meth_name) ) if not str(e).startswith(meth_name): - raise support.TestFailed( + self.fail( "Method <<{name:s}>> failed with unexpected " "exception message: {exp:s}\n".format( name=meth_name, exp=e diff --git a/Lib/test/test_sysconfig.py b/Lib/test/test_sysconfig.py index 67057bcbefd..614dffcaf3b 100644 --- a/Lib/test/test_sysconfig.py +++ b/Lib/test/test_sysconfig.py @@ -9,6 +9,7 @@ import sys import test import os import subprocess +import shutil from copy import copy, deepcopy from test.support import run_unittest, TESTFN, unlink, get_attribute diff --git a/Lib/test/test_tempfile.py b/Lib/test/test_tempfile.py index de65158b06c..5b6a42091e9 100644 --- a/Lib/test/test_tempfile.py +++ b/Lib/test/test_tempfile.py @@ -127,7 +127,7 @@ class test__RandomNameSequence(TC): if i == 20: break except: - failOnException("iteration") + self.failOnException("iteration") test_classes.append(test__RandomNameSequence) diff --git a/Lib/test/test_threaded_import.py b/Lib/test/test_threaded_import.py index af9e89dd3a8..29eab1a7b1d 100644 --- a/Lib/test/test_threaded_import.py +++ b/Lib/test/test_threaded_import.py @@ -6,6 +6,7 @@ # randrange, and then Python hangs. import _thread as thread +import unittest from test.support import verbose, TestFailed critical_section = thread.allocate_lock() diff --git a/Lib/test/test_zipimport.py b/Lib/test/test_zipimport.py index 02339346d23..c89aef5799f 100644 --- a/Lib/test/test_zipimport.py +++ b/Lib/test/test_zipimport.py @@ -227,7 +227,7 @@ class UncompressedZipImportTestCase(ImportHooksBaseTestCase): mod_path = packdir2 + TESTMOD mod_name = module_path_to_dotted_name(mod_path) - pkg = __import__(mod_name) + __import__(mod_name) mod = sys.modules[mod_name] self.assertEquals(zi.get_source(TESTPACK), None) self.assertEquals(zi.get_source(mod_path), None) @@ -271,7 +271,7 @@ class UncompressedZipImportTestCase(ImportHooksBaseTestCase): mod_path = TESTPACK2 + os.sep + TESTMOD mod_name = module_path_to_dotted_name(mod_path) - pkg = __import__(mod_name) + __import__(mod_name) mod = sys.modules[mod_name] self.assertEquals(zi.get_source(TESTPACK2), None) self.assertEquals(zi.get_source(mod_path), None) diff --git a/Lib/unittest/case.py b/Lib/unittest/case.py index 64918bc03fe..cc121e54a0c 100644 --- a/Lib/unittest/case.py +++ b/Lib/unittest/case.py @@ -96,7 +96,7 @@ class _AssertRaisesContext(object): self.obj_name = str(callable_obj) else: self.obj_name = None - self.expected_regex = expected_regexp + self.expected_regexp = expected_regexp def __enter__(self): return self @@ -118,10 +118,10 @@ class _AssertRaisesContext(object): return False # store exception, without traceback, for later retrieval self.exception = exc_value.with_traceback(None) - if self.expected_regex is None: + if self.expected_regexp is None: return True - expected_regexp = self.expected_regex + expected_regexp = self.expected_regexp if isinstance(expected_regexp, (bytes, str)): expected_regexp = re.compile(expected_regexp) if not expected_regexp.search(str(exc_value)): @@ -865,12 +865,12 @@ class TestCase(object): with context: callable_obj(*args, **kwargs) - def assertRegexpMatches(self, text, expected_regex, msg=None): - if isinstance(expected_regex, (str, bytes)): - expected_regex = re.compile(expected_regex) - if not expected_regex.search(text): + def assertRegexpMatches(self, text, expected_regexp, msg=None): + if isinstance(expected_regexp, (str, bytes)): + expected_regexp = re.compile(expected_regexp) + if not expected_regexp.search(text): msg = msg or "Regexp didn't match" - msg = '%s: %r not found in %r' % (msg, expected_regex.pattern, text) + msg = '%s: %r not found in %r' % (msg, expected_regexp.pattern, text) raise self.failureException(msg)