Commit ea5962f8 authored by Tim Peters's avatar Tim Peters

Whitespace normalization.

parent cb637c9e
...@@ -328,8 +328,8 @@ class TCPServer(BaseServer): ...@@ -328,8 +328,8 @@ class TCPServer(BaseServer):
self.socket = socket.socket(self.address_family, self.socket = socket.socket(self.address_family,
self.socket_type) self.socket_type)
if bind_and_activate: if bind_and_activate:
self.server_bind() self.server_bind()
self.server_activate() self.server_activate()
def server_bind(self): def server_bind(self):
"""Called by constructor to bind the socket. """Called by constructor to bind the socket.
......
...@@ -84,7 +84,7 @@ def commonprefix(m): ...@@ -84,7 +84,7 @@ def commonprefix(m):
# Generic implementation of splitext, to be parametrized with # Generic implementation of splitext, to be parametrized with
# the separators # the separators
def _splitext(p, sep, altsep, extsep): def _splitext(p, sep, altsep, extsep):
"""Split the extension from a pathname. """Split the extension from a pathname.
Extension is everything from the last dot to the end, ignoring Extension is everything from the last dot to the end, ignoring
leading dots. Returns "(root, ext)"; ext may be empty.""" leading dots. Returns "(root, ext)"; ext may be empty."""
......
...@@ -766,7 +766,7 @@ class LMTP(SMTP): ...@@ -766,7 +766,7 @@ class LMTP(SMTP):
authentication, but your mileage might vary.""" authentication, but your mileage might vary."""
ehlo_msg = "lhlo" ehlo_msg = "lhlo"
def __init__(self, host = '', port = LMTP_PORT, local_hostname = None): def __init__(self, host = '', port = LMTP_PORT, local_hostname = None):
"""Initialize a new instance.""" """Initialize a new instance."""
SMTP.__init__(self, host, port, local_hostname) SMTP.__init__(self, host, port, local_hostname)
......
...@@ -596,7 +596,7 @@ class Popen(object): ...@@ -596,7 +596,7 @@ class Popen(object):
# either have to redirect all three or none. If the subprocess # either have to redirect all three or none. If the subprocess
# user has only redirected one or two handles, we are # user has only redirected one or two handles, we are
# automatically creating PIPEs for the rest. We should close # automatically creating PIPEs for the rest. We should close
# these after the process is started. See bug #1124861. # these after the process is started. See bug #1124861.
if mswindows: if mswindows:
if stdin is None and p2cwrite is not None: if stdin is None and p2cwrite is not None:
os.close(p2cwrite) os.close(p2cwrite)
......
...@@ -245,7 +245,7 @@ def test_resize_term(stdscr): ...@@ -245,7 +245,7 @@ def test_resize_term(stdscr):
if hasattr(curses, 'resizeterm'): if hasattr(curses, 'resizeterm'):
lines, cols = curses.LINES, curses.COLS lines, cols = curses.LINES, curses.COLS
curses.resizeterm(lines - 1, cols + 1) curses.resizeterm(lines - 1, cols + 1)
if curses.LINES != lines - 1 or curses.COLS != cols + 1: if curses.LINES != lines - 1 or curses.COLS != cols + 1:
raise RuntimeError, "Expected resizeterm to update LINES and COLS" raise RuntimeError, "Expected resizeterm to update LINES and COLS"
......
...@@ -1466,7 +1466,7 @@ def errors(): ...@@ -1466,7 +1466,7 @@ def errors():
>>> class A(object): >>> class A(object):
... pass ... pass
>>> class B(A, type): >>> class B(A, type):
... pass ... pass
Traceback (most recent call last): Traceback (most recent call last):
...@@ -1494,7 +1494,7 @@ def errors(): ...@@ -1494,7 +1494,7 @@ def errors():
... pass ... pass
Also check that assignment to bases is safe. Also check that assignment to bases is safe.
>>> B.__bases__ = A1, A2 >>> B.__bases__ = A1, A2
Traceback (most recent call last): Traceback (most recent call last):
TypeError: metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases TypeError: metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases
......
...@@ -461,12 +461,12 @@ class DictTest(unittest.TestCase): ...@@ -461,12 +461,12 @@ class DictTest(unittest.TestCase):
self.assertEqual(e.args, ((1,),)) self.assertEqual(e.args, ((1,),))
else: else:
self.fail("missing KeyError") self.fail("missing KeyError")
def test_bad_key(self): def test_bad_key(self):
# Dictionary lookups should fail if __cmp__() raises an exception. # Dictionary lookups should fail if __cmp__() raises an exception.
class CustomException(Exception): class CustomException(Exception):
pass pass
class BadDictKey: class BadDictKey:
def __hash__(self): def __hash__(self):
return hash(self.__class__) return hash(self.__class__)
...@@ -475,7 +475,7 @@ class DictTest(unittest.TestCase): ...@@ -475,7 +475,7 @@ class DictTest(unittest.TestCase):
if isinstance(other, self.__class__): if isinstance(other, self.__class__):
raise CustomException raise CustomException
return other return other
d = {} d = {}
x1 = BadDictKey() x1 = BadDictKey()
x2 = BadDictKey() x2 = BadDictKey()
...@@ -502,7 +502,7 @@ class DictTest(unittest.TestCase): ...@@ -502,7 +502,7 @@ class DictTest(unittest.TestCase):
# a mix of inserts and deletes hitting exactly the right hash codes in # a mix of inserts and deletes hitting exactly the right hash codes in
# exactly the right order, and I can't think of a randomized approach # exactly the right order, and I can't think of a randomized approach
# that would be *likely* to hit a failing case in reasonable time. # that would be *likely* to hit a failing case in reasonable time.
d = {} d = {}
for i in range(5): for i in range(5):
d[i] = i d[i] = i
...@@ -514,7 +514,7 @@ class DictTest(unittest.TestCase): ...@@ -514,7 +514,7 @@ class DictTest(unittest.TestCase):
def test_resize2(self): def test_resize2(self):
# Another dict resizing bug (SF bug #1456209). # Another dict resizing bug (SF bug #1456209).
# This caused Segmentation faults or Illegal instructions. # This caused Segmentation faults or Illegal instructions.
class X(object): class X(object):
def __hash__(self): def __hash__(self):
return 5 return 5
......
...@@ -192,11 +192,11 @@ class ImportTest(unittest.TestCase): ...@@ -192,11 +192,11 @@ class ImportTest(unittest.TestCase):
remove_files(TESTFN) remove_files(TESTFN)
if TESTFN in sys.modules: if TESTFN in sys.modules:
del sys.modules[TESTFN] del sys.modules[TESTFN]
def test_infinite_reload(self): def test_infinite_reload(self):
# Bug #742342 reports that Python segfaults (infinite recursion in C) # Bug #742342 reports that Python segfaults (infinite recursion in C)
# when faced with self-recursive reload()ing. # when faced with self-recursive reload()ing.
sys.path.insert(0, os.path.dirname(__file__)) sys.path.insert(0, os.path.dirname(__file__))
try: try:
import infinite_reload import infinite_reload
......
...@@ -211,20 +211,20 @@ class TestBasicOps(unittest.TestCase): ...@@ -211,20 +211,20 @@ class TestBasicOps(unittest.TestCase):
self.assertEqual(list(izip_longest(*args, **{})), target) self.assertEqual(list(izip_longest(*args, **{})), target)
target = [tuple((e is None and 'X' or e) for e in t) for t in target] # Replace None fills with 'X' target = [tuple((e is None and 'X' or e) for e in t) for t in target] # Replace None fills with 'X'
self.assertEqual(list(izip_longest(*args, **dict(fillvalue='X'))), target) self.assertEqual(list(izip_longest(*args, **dict(fillvalue='X'))), target)
self.assertEqual(take(3,izip_longest('abcdef', count())), zip('abcdef', range(3))) # take 3 from infinite input self.assertEqual(take(3,izip_longest('abcdef', count())), zip('abcdef', range(3))) # take 3 from infinite input
self.assertEqual(list(izip_longest()), zip()) self.assertEqual(list(izip_longest()), zip())
self.assertEqual(list(izip_longest([])), zip([])) self.assertEqual(list(izip_longest([])), zip([]))
self.assertEqual(list(izip_longest('abcdef')), zip('abcdef')) self.assertEqual(list(izip_longest('abcdef')), zip('abcdef'))
self.assertEqual(list(izip_longest('abc', 'defg', **{})), map(None, 'abc', 'defg')) # empty keyword dict self.assertEqual(list(izip_longest('abc', 'defg', **{})), map(None, 'abc', 'defg')) # empty keyword dict
self.assertRaises(TypeError, izip_longest, 3) self.assertRaises(TypeError, izip_longest, 3)
self.assertRaises(TypeError, izip_longest, range(3), 3) self.assertRaises(TypeError, izip_longest, range(3), 3)
for stmt in [ for stmt in [
"izip_longest('abc', fv=1)", "izip_longest('abc', fv=1)",
"izip_longest('abc', fillvalue=1, bogus_keyword=None)", "izip_longest('abc', fillvalue=1, bogus_keyword=None)",
]: ]:
try: try:
eval(stmt, globals(), locals()) eval(stmt, globals(), locals())
...@@ -232,7 +232,7 @@ class TestBasicOps(unittest.TestCase): ...@@ -232,7 +232,7 @@ class TestBasicOps(unittest.TestCase):
pass pass
else: else:
self.fail('Did not raise Type in: ' + stmt) self.fail('Did not raise Type in: ' + stmt)
# Check tuple re-use (implementation detail) # Check tuple re-use (implementation detail)
self.assertEqual([tuple(list(pair)) for pair in izip_longest('abc', 'def')], self.assertEqual([tuple(list(pair)) for pair in izip_longest('abc', 'def')],
zip('abc', 'def')) zip('abc', 'def'))
......
...@@ -24,7 +24,7 @@ class PosixPathTest(unittest.TestCase): ...@@ -24,7 +24,7 @@ class PosixPathTest(unittest.TestCase):
for suffix in ["", "1", "2"]: for suffix in ["", "1", "2"]:
test_support.unlink(test_support.TESTFN + suffix) test_support.unlink(test_support.TESTFN + suffix)
safe_rmdir(test_support.TESTFN + suffix) safe_rmdir(test_support.TESTFN + suffix)
def assertIs(self, a, b): def assertIs(self, a, b):
self.assert_(a is b) self.assert_(a is b)
...@@ -161,7 +161,7 @@ class PosixPathTest(unittest.TestCase): ...@@ -161,7 +161,7 @@ class PosixPathTest(unittest.TestCase):
if not f.closed: if not f.closed:
f.close() f.close()
def test_islink(self): def test_islink(self):
self.assertIs(posixpath.islink(test_support.TESTFN + "1"), False) self.assertIs(posixpath.islink(test_support.TESTFN + "1"), False)
f = open(test_support.TESTFN + "1", "wb") f = open(test_support.TESTFN + "1", "wb")
try: try:
......
...@@ -41,19 +41,19 @@ def normalize_output(data): ...@@ -41,19 +41,19 @@ def normalize_output(data):
# because pty code is not too portable. # because pty code is not too portable.
class PtyTest(unittest.TestCase): class PtyTest(unittest.TestCase):
def setUp(self): def setUp(self):
# isatty() and close() can hang on some platforms. Set an alarm # isatty() and close() can hang on some platforms. Set an alarm
# before running the test to make sure we don't hang forever. # before running the test to make sure we don't hang forever.
self.old_alarm = signal.signal(signal.SIGALRM, self.handle_sig) self.old_alarm = signal.signal(signal.SIGALRM, self.handle_sig)
signal.alarm(10) signal.alarm(10)
def tearDown(self): def tearDown(self):
# remove alarm, restore old alarm handler # remove alarm, restore old alarm handler
signal.alarm(0) signal.alarm(0)
signal.signal(signal.SIGALRM, self.old_alarm) signal.signal(signal.SIGALRM, self.old_alarm)
def handle_sig(self, sig, frame): def handle_sig(self, sig, frame):
self.fail("isatty hung") self.fail("isatty hung")
def test_basic(self): def test_basic(self):
try: try:
debug("Calling master_open()") debug("Calling master_open()")
...@@ -68,19 +68,19 @@ class PtyTest(unittest.TestCase): ...@@ -68,19 +68,19 @@ class PtyTest(unittest.TestCase):
raise TestSkipped, "Pseudo-terminals (seemingly) not functional." raise TestSkipped, "Pseudo-terminals (seemingly) not functional."
self.assertTrue(os.isatty(slave_fd), 'slave_fd is not a tty') self.assertTrue(os.isatty(slave_fd), 'slave_fd is not a tty')
debug("Writing to slave_fd") debug("Writing to slave_fd")
os.write(slave_fd, TEST_STRING_1) os.write(slave_fd, TEST_STRING_1)
s1 = os.read(master_fd, 1024) s1 = os.read(master_fd, 1024)
self.assertEquals('I wish to buy a fish license.\n', self.assertEquals('I wish to buy a fish license.\n',
normalize_output(s1)) normalize_output(s1))
debug("Writing chunked output") debug("Writing chunked output")
os.write(slave_fd, TEST_STRING_2[:5]) os.write(slave_fd, TEST_STRING_2[:5])
os.write(slave_fd, TEST_STRING_2[5:]) os.write(slave_fd, TEST_STRING_2[5:])
s2 = os.read(master_fd, 1024) s2 = os.read(master_fd, 1024)
self.assertEquals('For my pet fish, Eric.\n', normalize_output(s2)) self.assertEquals('For my pet fish, Eric.\n', normalize_output(s2))
os.close(slave_fd) os.close(slave_fd)
os.close(master_fd) os.close(master_fd)
...@@ -93,7 +93,7 @@ class PtyTest(unittest.TestCase): ...@@ -93,7 +93,7 @@ class PtyTest(unittest.TestCase):
if not os.isatty(1): if not os.isatty(1):
debug("Child's fd 1 is not a tty?!") debug("Child's fd 1 is not a tty?!")
os._exit(3) os._exit(3)
# After pty.fork(), the child should already be a session leader. # After pty.fork(), the child should already be a session leader.
# (on those systems that have that concept.) # (on those systems that have that concept.)
debug("In child, calling os.setsid()") debug("In child, calling os.setsid()")
...@@ -125,7 +125,7 @@ class PtyTest(unittest.TestCase): ...@@ -125,7 +125,7 @@ class PtyTest(unittest.TestCase):
##if False and lines != ['In child, calling os.setsid()', ##if False and lines != ['In child, calling os.setsid()',
## 'Good: OSError was raised.', '']: ## 'Good: OSError was raised.', '']:
## raise TestFailed("Unexpected output from child: %r" % line) ## raise TestFailed("Unexpected output from child: %r" % line)
(pid, status) = os.waitpid(pid, 0) (pid, status) = os.waitpid(pid, 0)
res = status >> 8 res = status >> 8
debug("Child (%d) exited with status %d (%d)." % (pid, res, status)) debug("Child (%d) exited with status %d (%d)." % (pid, res, status))
...@@ -137,7 +137,7 @@ class PtyTest(unittest.TestCase): ...@@ -137,7 +137,7 @@ class PtyTest(unittest.TestCase):
self.fail("Child spawned by pty.fork() did not have a tty as stdout") self.fail("Child spawned by pty.fork() did not have a tty as stdout")
elif res != 4: elif res != 4:
self.fail("pty.fork() failed for unknown reasons.") self.fail("pty.fork() failed for unknown reasons.")
##debug("Reading from master_fd now that the child has exited") ##debug("Reading from master_fd now that the child has exited")
##try: ##try:
## s1 = os.read(master_fd, 1024) ## s1 = os.read(master_fd, 1024)
...@@ -145,9 +145,9 @@ class PtyTest(unittest.TestCase): ...@@ -145,9 +145,9 @@ class PtyTest(unittest.TestCase):
## pass ## pass
##else: ##else:
## raise TestFailed("Read from master_fd did not raise exception") ## raise TestFailed("Read from master_fd did not raise exception")
os.close(master_fd) os.close(master_fd)
# pty.fork() passed. # pty.fork() passed.
def test_main(verbose=None): def test_main(verbose=None):
......
...@@ -252,7 +252,7 @@ def test_1463026_3(): ...@@ -252,7 +252,7 @@ def test_1463026_3():
gen.endDocument() gen.endDocument()
return result.getvalue() == start+'<my:a xmlns:my="qux" b="c"></my:a>' return result.getvalue() == start+'<my:a xmlns:my="qux" b="c"></my:a>'
# ===== Xmlfilterbase # ===== Xmlfilterbase
def test_filter_basic(): def test_filter_basic():
......
...@@ -285,10 +285,10 @@ class TestJointOps(unittest.TestCase): ...@@ -285,10 +285,10 @@ class TestJointOps(unittest.TestCase):
s = self.thetype(d) s = self.thetype(d)
self.assertEqual(sum(elem.hash_count for elem in d), n) self.assertEqual(sum(elem.hash_count for elem in d), n)
s.difference(d) s.difference(d)
self.assertEqual(sum(elem.hash_count for elem in d), n) self.assertEqual(sum(elem.hash_count for elem in d), n)
if hasattr(s, 'symmetric_difference_update'): if hasattr(s, 'symmetric_difference_update'):
s.symmetric_difference_update(d) s.symmetric_difference_update(d)
self.assertEqual(sum(elem.hash_count for elem in d), n) self.assertEqual(sum(elem.hash_count for elem in d), n)
class TestSet(TestJointOps): class TestSet(TestJointOps):
thetype = set thetype = set
......
...@@ -49,14 +49,14 @@ class ThreadedTempFileTest(unittest.TestCase): ...@@ -49,14 +49,14 @@ class ThreadedTempFileTest(unittest.TestCase):
def test_main(self): def test_main(self):
threads = [] threads = []
thread_info = threading_setup() thread_info = threading_setup()
for i in range(NUM_THREADS): for i in range(NUM_THREADS):
t = TempFileGreedy() t = TempFileGreedy()
threads.append(t) threads.append(t)
t.start() t.start()
startEvent.set() startEvent.set()
ok = 0 ok = 0
errors = [] errors = []
for t in threads: for t in threads:
...@@ -66,8 +66,8 @@ class ThreadedTempFileTest(unittest.TestCase): ...@@ -66,8 +66,8 @@ class ThreadedTempFileTest(unittest.TestCase):
errors.append(str(t.getName()) + str(t.errors.getvalue())) errors.append(str(t.getName()) + str(t.errors.getvalue()))
threading_cleanup(*thread_info) threading_cleanup(*thread_info)
msg = "Errors: errors %d ok %d\n%s" % (len(errors), ok, msg = "Errors: errors %d ok %d\n%s" % (len(errors), ok,
'\n'.join(errors)) '\n'.join(errors))
self.assertEquals(errors, [], msg) self.assertEquals(errors, [], msg)
self.assertEquals(ok, NUM_THREADS * FILES_PER_THREAD) self.assertEquals(ok, NUM_THREADS * FILES_PER_THREAD)
......
...@@ -21,34 +21,34 @@ class LoggingResult(unittest.TestResult): ...@@ -21,34 +21,34 @@ class LoggingResult(unittest.TestResult):
def startTest(self, test): def startTest(self, test):
self._events.append('startTest') self._events.append('startTest')
super(LoggingResult, self).startTest(test) super(LoggingResult, self).startTest(test)
def stopTest(self, test): def stopTest(self, test):
self._events.append('stopTest') self._events.append('stopTest')
super(LoggingResult, self).stopTest(test) super(LoggingResult, self).stopTest(test)
def addFailure(self, *args): def addFailure(self, *args):
self._events.append('addFailure') self._events.append('addFailure')
super(LoggingResult, self).addFailure(*args) super(LoggingResult, self).addFailure(*args)
def addError(self, *args): def addError(self, *args):
self._events.append('addError') self._events.append('addError')
super(LoggingResult, self).addError(*args) super(LoggingResult, self).addError(*args)
class TestEquality(object): class TestEquality(object):
# Check for a valid __eq__ implementation # Check for a valid __eq__ implementation
def test_eq(self): def test_eq(self):
for obj_1, obj_2 in self.eq_pairs: for obj_1, obj_2 in self.eq_pairs:
self.assertEqual(obj_1, obj_2) self.assertEqual(obj_1, obj_2)
self.assertEqual(obj_2, obj_1) self.assertEqual(obj_2, obj_1)
# Check for a valid __ne__ implementation # Check for a valid __ne__ implementation
def test_ne(self): def test_ne(self):
for obj_1, obj_2 in self.ne_pairs: for obj_1, obj_2 in self.ne_pairs:
self.failIfEqual(obj_1, obj_2) self.failIfEqual(obj_1, obj_2)
self.failIfEqual(obj_2, obj_1) self.failIfEqual(obj_2, obj_1)
class TestHashing(object): class TestHashing(object):
# Check for a valid __hash__ implementation # Check for a valid __hash__ implementation
def test_hash(self): def test_hash(self):
for obj_1, obj_2 in self.eq_pairs: for obj_1, obj_2 in self.eq_pairs:
try: try:
...@@ -59,7 +59,7 @@ class TestHashing(object): ...@@ -59,7 +59,7 @@ class TestHashing(object):
self.fail("%s and %s do not hash equal" % (obj_1, obj_2)) self.fail("%s and %s do not hash equal" % (obj_1, obj_2))
except Exception, e: except Exception, e:
self.fail("Problem hashing %s and %s: %s" % (obj_1, obj_2, e)) self.fail("Problem hashing %s and %s: %s" % (obj_1, obj_2, e))
for obj_1, obj_2 in self.ne_pairs: for obj_1, obj_2 in self.ne_pairs:
try: try:
assert hash(obj_1) != hash(obj_2) assert hash(obj_1) != hash(obj_2)
...@@ -69,7 +69,7 @@ class TestHashing(object): ...@@ -69,7 +69,7 @@ class TestHashing(object):
self.fail("%s and %s hash equal, but shouldn't" % (obj_1, obj_2)) self.fail("%s and %s hash equal, but shouldn't" % (obj_1, obj_2))
except Exception, e: except Exception, e:
self.fail("Problem hashing %s and %s: %s" % (obj_1, obj_2, e)) self.fail("Problem hashing %s and %s: %s" % (obj_1, obj_2, e))
################################################################ ################################################################
### /Support code ### /Support code
...@@ -86,25 +86,25 @@ class Test_TestLoader(TestCase): ...@@ -86,25 +86,25 @@ class Test_TestLoader(TestCase):
def test_1(self): pass def test_1(self): pass
def test_2(self): pass def test_2(self): pass
def foo_bar(self): pass def foo_bar(self): pass
tests = unittest.TestSuite([Foo('test_1'), Foo('test_2')]) tests = unittest.TestSuite([Foo('test_1'), Foo('test_2')])
loader = unittest.TestLoader() loader = unittest.TestLoader()
self.assertEqual(loader.loadTestsFromTestCase(Foo), tests) self.assertEqual(loader.loadTestsFromTestCase(Foo), tests)
# "Return a suite of all tests cases contained in the TestCase-derived # "Return a suite of all tests cases contained in the TestCase-derived
# class testCaseClass" # class testCaseClass"
# #
# Make sure it does the right thing even if no tests were found # Make sure it does the right thing even if no tests were found
def test_loadTestsFromTestCase__no_matches(self): def test_loadTestsFromTestCase__no_matches(self):
class Foo(unittest.TestCase): class Foo(unittest.TestCase):
def foo_bar(self): pass def foo_bar(self): pass
empty_suite = unittest.TestSuite() empty_suite = unittest.TestSuite()
loader = unittest.TestLoader() loader = unittest.TestLoader()
self.assertEqual(loader.loadTestsFromTestCase(Foo), empty_suite) self.assertEqual(loader.loadTestsFromTestCase(Foo), empty_suite)
# "Return a suite of all tests cases contained in the TestCase-derived # "Return a suite of all tests cases contained in the TestCase-derived
# class testCaseClass" # class testCaseClass"
# #
...@@ -117,7 +117,7 @@ class Test_TestLoader(TestCase): ...@@ -117,7 +117,7 @@ class Test_TestLoader(TestCase):
def test_loadTestsFromTestCase__TestSuite_subclass(self): def test_loadTestsFromTestCase__TestSuite_subclass(self):
class NotATestCase(unittest.TestSuite): class NotATestCase(unittest.TestSuite):
pass pass
loader = unittest.TestLoader() loader = unittest.TestLoader()
try: try:
loader.loadTestsFromTestCase(NotATestCase) loader.loadTestsFromTestCase(NotATestCase)
...@@ -125,7 +125,7 @@ class Test_TestLoader(TestCase): ...@@ -125,7 +125,7 @@ class Test_TestLoader(TestCase):
pass pass
else: else:
self.fail('Should raise TypeError') self.fail('Should raise TypeError')
# "Return a suite of all tests cases contained in the TestCase-derived # "Return a suite of all tests cases contained in the TestCase-derived
# class testCaseClass" # class testCaseClass"
# #
...@@ -136,18 +136,18 @@ class Test_TestLoader(TestCase): ...@@ -136,18 +136,18 @@ class Test_TestLoader(TestCase):
class Foo(unittest.TestCase): class Foo(unittest.TestCase):
def runTest(self): def runTest(self):
pass pass
loader = unittest.TestLoader() loader = unittest.TestLoader()
# This has to be false for the test to succeed # This has to be false for the test to succeed
self.failIf('runTest'.startswith(loader.testMethodPrefix)) self.failIf('runTest'.startswith(loader.testMethodPrefix))
suite = loader.loadTestsFromTestCase(Foo) suite = loader.loadTestsFromTestCase(Foo)
self.failUnless(isinstance(suite, loader.suiteClass)) self.failUnless(isinstance(suite, loader.suiteClass))
self.assertEqual(list(suite), [Foo('runTest')]) self.assertEqual(list(suite), [Foo('runTest')])
################################################################ ################################################################
### /Tests for TestLoader.loadTestsFromTestCase ### /Tests for TestLoader.loadTestsFromTestCase
### Tests for TestLoader.loadTestsFromModule ### Tests for TestLoader.loadTestsFromModule
################################################################ ################################################################
...@@ -159,42 +159,42 @@ class Test_TestLoader(TestCase): ...@@ -159,42 +159,42 @@ class Test_TestLoader(TestCase):
def test(self): def test(self):
pass pass
m.testcase_1 = MyTestCase m.testcase_1 = MyTestCase
loader = unittest.TestLoader() loader = unittest.TestLoader()
suite = loader.loadTestsFromModule(m) suite = loader.loadTestsFromModule(m)
self.failUnless(isinstance(suite, loader.suiteClass)) self.failUnless(isinstance(suite, loader.suiteClass))
expected = [loader.suiteClass([MyTestCase('test')])] expected = [loader.suiteClass([MyTestCase('test')])]
self.assertEqual(list(suite), expected) self.assertEqual(list(suite), expected)
# "This method searches `module` for classes derived from TestCase" # "This method searches `module` for classes derived from TestCase"
# #
# What happens if no tests are found (no TestCase instances)? # What happens if no tests are found (no TestCase instances)?
def test_loadTestsFromModule__no_TestCase_instances(self): def test_loadTestsFromModule__no_TestCase_instances(self):
import new import new
m = new.module('m') m = new.module('m')
loader = unittest.TestLoader() loader = unittest.TestLoader()
suite = loader.loadTestsFromModule(m) suite = loader.loadTestsFromModule(m)
self.failUnless(isinstance(suite, loader.suiteClass)) self.failUnless(isinstance(suite, loader.suiteClass))
self.assertEqual(list(suite), []) self.assertEqual(list(suite), [])
# "This method searches `module` for classes derived from TestCase" # "This method searches `module` for classes derived from TestCase"
# #
# What happens if no tests are found (TestCases instances, but no tests)? # What happens if no tests are found (TestCases instances, but no tests)?
def test_loadTestsFromModule__no_TestCase_tests(self): def test_loadTestsFromModule__no_TestCase_tests(self):
import new import new
m = new.module('m') m = new.module('m')
class MyTestCase(unittest.TestCase): class MyTestCase(unittest.TestCase):
pass pass
m.testcase_1 = MyTestCase m.testcase_1 = MyTestCase
loader = unittest.TestLoader() loader = unittest.TestLoader()
suite = loader.loadTestsFromModule(m) suite = loader.loadTestsFromModule(m)
self.failUnless(isinstance(suite, loader.suiteClass)) self.failUnless(isinstance(suite, loader.suiteClass))
self.assertEqual(list(suite), [loader.suiteClass()]) self.assertEqual(list(suite), [loader.suiteClass()])
# "This method searches `module` for classes derived from TestCase"s # "This method searches `module` for classes derived from TestCase"s
# #
# What happens if loadTestsFromModule() is given something other # What happens if loadTestsFromModule() is given something other
...@@ -209,22 +209,22 @@ class Test_TestLoader(TestCase): ...@@ -209,22 +209,22 @@ class Test_TestLoader(TestCase):
class MyTestCase(unittest.TestCase): class MyTestCase(unittest.TestCase):
def test(self): def test(self):
pass pass
class NotAModule(object): class NotAModule(object):
test_2 = MyTestCase test_2 = MyTestCase
loader = unittest.TestLoader() loader = unittest.TestLoader()
suite = loader.loadTestsFromModule(NotAModule) suite = loader.loadTestsFromModule(NotAModule)
reference = [unittest.TestSuite([MyTestCase('test')])] reference = [unittest.TestSuite([MyTestCase('test')])]
self.assertEqual(list(suite), reference) self.assertEqual(list(suite), reference)
################################################################ ################################################################
### /Tests for TestLoader.loadTestsFromModule() ### /Tests for TestLoader.loadTestsFromModule()
### Tests for TestLoader.loadTestsFromName() ### Tests for TestLoader.loadTestsFromName()
################################################################ ################################################################
# "The specifier name is a ``dotted name'' that may resolve either to # "The specifier name is a ``dotted name'' that may resolve either to
# a module, a test case class, a TestSuite instance, a test method # a module, a test case class, a TestSuite instance, a test method
# within a test case class, or a callable object which returns a # within a test case class, or a callable object which returns a
...@@ -233,23 +233,23 @@ class Test_TestLoader(TestCase): ...@@ -233,23 +233,23 @@ class Test_TestLoader(TestCase):
# Is ValueError raised in response to an empty name? # Is ValueError raised in response to an empty name?
def test_loadTestsFromName__empty_name(self): def test_loadTestsFromName__empty_name(self):
loader = unittest.TestLoader() loader = unittest.TestLoader()
try: try:
loader.loadTestsFromName('') loader.loadTestsFromName('')
except ValueError, e: except ValueError, e:
self.assertEqual(str(e), "Empty module name") self.assertEqual(str(e), "Empty module name")
else: else:
self.fail("TestLoader.loadTestsFromName failed to raise ValueError") self.fail("TestLoader.loadTestsFromName failed to raise ValueError")
# "The specifier name is a ``dotted name'' that may resolve either to # "The specifier name is a ``dotted name'' that may resolve either to
# a module, a test case class, a TestSuite instance, a test method # a module, a test case class, a TestSuite instance, a test method
# within a test case class, or a callable object which returns a # within a test case class, or a callable object which returns a
# TestCase or TestSuite instance." # TestCase or TestSuite instance."
# #
# What happens when the name contains invalid characters? # What happens when the name contains invalid characters?
def test_loadTestsFromName__malformed_name(self): def test_loadTestsFromName__malformed_name(self):
loader = unittest.TestLoader() loader = unittest.TestLoader()
# XXX Should this raise ValueError or ImportError? # XXX Should this raise ValueError or ImportError?
try: try:
loader.loadTestsFromName('abc () //') loader.loadTestsFromName('abc () //')
...@@ -259,37 +259,37 @@ class Test_TestLoader(TestCase): ...@@ -259,37 +259,37 @@ class Test_TestLoader(TestCase):
pass pass
else: else:
self.fail("TestLoader.loadTestsFromName failed to raise ValueError") self.fail("TestLoader.loadTestsFromName failed to raise ValueError")
# "The specifier name is a ``dotted name'' that may resolve ... to a # "The specifier name is a ``dotted name'' that may resolve ... to a
# module" # module"
# #
# What happens when a module by that name can't be found? # What happens when a module by that name can't be found?
def test_loadTestsFromName__unknown_module_name(self): def test_loadTestsFromName__unknown_module_name(self):
loader = unittest.TestLoader() loader = unittest.TestLoader()
try: try:
loader.loadTestsFromName('sdasfasfasdf') loader.loadTestsFromName('sdasfasfasdf')
except ImportError, e: except ImportError, e:
self.assertEqual(str(e), "No module named sdasfasfasdf") self.assertEqual(str(e), "No module named sdasfasfasdf")
else: else:
self.fail("TestLoader.loadTestsFromName failed to raise ImportError") self.fail("TestLoader.loadTestsFromName failed to raise ImportError")
# "The specifier name is a ``dotted name'' that may resolve either to # "The specifier name is a ``dotted name'' that may resolve either to
# a module, a test case class, a TestSuite instance, a test method # a module, a test case class, a TestSuite instance, a test method
# within a test case class, or a callable object which returns a # within a test case class, or a callable object which returns a
# TestCase or TestSuite instance." # TestCase or TestSuite instance."
# #
# What happens when the module is found, but the attribute can't? # What happens when the module is found, but the attribute can't?
def test_loadTestsFromName__unknown_attr_name(self): def test_loadTestsFromName__unknown_attr_name(self):
loader = unittest.TestLoader() loader = unittest.TestLoader()
try: try:
loader.loadTestsFromName('unittest.sdasfasfasdf') loader.loadTestsFromName('unittest.sdasfasfasdf')
except AttributeError, e: except AttributeError, e:
self.assertEqual(str(e), "'module' object has no attribute 'sdasfasfasdf'") self.assertEqual(str(e), "'module' object has no attribute 'sdasfasfasdf'")
else: else:
self.fail("TestLoader.loadTestsFromName failed to raise AttributeError") self.fail("TestLoader.loadTestsFromName failed to raise AttributeError")
# "The specifier name is a ``dotted name'' that may resolve either to # "The specifier name is a ``dotted name'' that may resolve either to
# a module, a test case class, a TestSuite instance, a test method # a module, a test case class, a TestSuite instance, a test method
# within a test case class, or a callable object which returns a # within a test case class, or a callable object which returns a
...@@ -299,14 +299,14 @@ class Test_TestLoader(TestCase): ...@@ -299,14 +299,14 @@ class Test_TestLoader(TestCase):
# found? # found?
def test_loadTestsFromName__relative_unknown_name(self): def test_loadTestsFromName__relative_unknown_name(self):
loader = unittest.TestLoader() loader = unittest.TestLoader()
try: try:
loader.loadTestsFromName('sdasfasfasdf', unittest) loader.loadTestsFromName('sdasfasfasdf', unittest)
except AttributeError, e: except AttributeError, e:
self.assertEqual(str(e), "'module' object has no attribute 'sdasfasfasdf'") self.assertEqual(str(e), "'module' object has no attribute 'sdasfasfasdf'")
else: else:
self.fail("TestLoader.loadTestsFromName failed to raise AttributeError") self.fail("TestLoader.loadTestsFromName failed to raise AttributeError")
# "The specifier name is a ``dotted name'' that may resolve either to # "The specifier name is a ``dotted name'' that may resolve either to
# a module, a test case class, a TestSuite instance, a test method # a module, a test case class, a TestSuite instance, a test method
# within a test case class, or a callable object which returns a # within a test case class, or a callable object which returns a
...@@ -320,14 +320,14 @@ class Test_TestLoader(TestCase): ...@@ -320,14 +320,14 @@ class Test_TestLoader(TestCase):
# XXX Should probably raise a ValueError instead of an AttributeError # XXX Should probably raise a ValueError instead of an AttributeError
def test_loadTestsFromName__relative_empty_name(self): def test_loadTestsFromName__relative_empty_name(self):
loader = unittest.TestLoader() loader = unittest.TestLoader()
try: try:
loader.loadTestsFromName('', unittest) loader.loadTestsFromName('', unittest)
except AttributeError, e: except AttributeError, e:
pass pass
else: else:
self.fail("Failed to raise AttributeError") self.fail("Failed to raise AttributeError")
# "The specifier name is a ``dotted name'' that may resolve either to # "The specifier name is a ``dotted name'' that may resolve either to
# a module, a test case class, a TestSuite instance, a test method # a module, a test case class, a TestSuite instance, a test method
# within a test case class, or a callable object which returns a # within a test case class, or a callable object which returns a
...@@ -339,7 +339,7 @@ class Test_TestLoader(TestCase): ...@@ -339,7 +339,7 @@ class Test_TestLoader(TestCase):
# `module`? # `module`?
def test_loadTestsFromName__relative_malformed_name(self): def test_loadTestsFromName__relative_malformed_name(self):
loader = unittest.TestLoader() loader = unittest.TestLoader()
# XXX Should this raise AttributeError or ValueError? # XXX Should this raise AttributeError or ValueError?
try: try:
loader.loadTestsFromName('abc () //', unittest) loader.loadTestsFromName('abc () //', unittest)
...@@ -363,16 +363,16 @@ class Test_TestLoader(TestCase): ...@@ -363,16 +363,16 @@ class Test_TestLoader(TestCase):
class MyTestCase(unittest.TestCase): class MyTestCase(unittest.TestCase):
def test(self): def test(self):
pass pass
class NotAModule(object): class NotAModule(object):
test_2 = MyTestCase test_2 = MyTestCase
loader = unittest.TestLoader() loader = unittest.TestLoader()
suite = loader.loadTestsFromName('test_2', NotAModule) suite = loader.loadTestsFromName('test_2', NotAModule)
reference = [MyTestCase('test')] reference = [MyTestCase('test')]
self.assertEqual(list(suite), reference) self.assertEqual(list(suite), reference)
# "The specifier name is a ``dotted name'' that may resolve either to # "The specifier name is a ``dotted name'' that may resolve either to
# a module, a test case class, a TestSuite instance, a test method # a module, a test case class, a TestSuite instance, a test method
# within a test case class, or a callable object which returns a # within a test case class, or a callable object which returns a
...@@ -384,7 +384,7 @@ class Test_TestLoader(TestCase): ...@@ -384,7 +384,7 @@ class Test_TestLoader(TestCase):
import new import new
m = new.module('m') m = new.module('m')
m.testcase_1 = object() m.testcase_1 = object()
loader = unittest.TestLoader() loader = unittest.TestLoader()
try: try:
loader.loadTestsFromName('testcase_1', m) loader.loadTestsFromName('testcase_1', m)
...@@ -402,12 +402,12 @@ class Test_TestLoader(TestCase): ...@@ -402,12 +402,12 @@ class Test_TestLoader(TestCase):
def test(self): def test(self):
pass pass
m.testcase_1 = MyTestCase m.testcase_1 = MyTestCase
loader = unittest.TestLoader() loader = unittest.TestLoader()
suite = loader.loadTestsFromName('testcase_1', m) suite = loader.loadTestsFromName('testcase_1', m)
self.failUnless(isinstance(suite, loader.suiteClass)) self.failUnless(isinstance(suite, loader.suiteClass))
self.assertEqual(list(suite), [MyTestCase('test')]) self.assertEqual(list(suite), [MyTestCase('test')])
# "The specifier name is a ``dotted name'' that may resolve either to # "The specifier name is a ``dotted name'' that may resolve either to
# a module, a test case class, a TestSuite instance, a test method # a module, a test case class, a TestSuite instance, a test method
# within a test case class, or a callable object which returns a # within a test case class, or a callable object which returns a
...@@ -419,13 +419,13 @@ class Test_TestLoader(TestCase): ...@@ -419,13 +419,13 @@ class Test_TestLoader(TestCase):
def test(self): def test(self):
pass pass
m.testsuite = unittest.TestSuite([MyTestCase('test')]) m.testsuite = unittest.TestSuite([MyTestCase('test')])
loader = unittest.TestLoader() loader = unittest.TestLoader()
suite = loader.loadTestsFromName('testsuite', m) suite = loader.loadTestsFromName('testsuite', m)
self.failUnless(isinstance(suite, loader.suiteClass)) self.failUnless(isinstance(suite, loader.suiteClass))
self.assertEqual(list(suite), [MyTestCase('test')]) self.assertEqual(list(suite), [MyTestCase('test')])
# "The specifier name is a ``dotted name'' that may resolve ... to # "The specifier name is a ``dotted name'' that may resolve ... to
# ... a test method within a test case class" # ... a test method within a test case class"
def test_loadTestsFromName__relative_testmethod(self): def test_loadTestsFromName__relative_testmethod(self):
...@@ -435,13 +435,13 @@ class Test_TestLoader(TestCase): ...@@ -435,13 +435,13 @@ class Test_TestLoader(TestCase):
def test(self): def test(self):
pass pass
m.testcase_1 = MyTestCase m.testcase_1 = MyTestCase
loader = unittest.TestLoader() loader = unittest.TestLoader()
suite = loader.loadTestsFromName('testcase_1.test', m) suite = loader.loadTestsFromName('testcase_1.test', m)
self.failUnless(isinstance(suite, loader.suiteClass)) self.failUnless(isinstance(suite, loader.suiteClass))
self.assertEqual(list(suite), [MyTestCase('test')]) self.assertEqual(list(suite), [MyTestCase('test')])
# "The specifier name is a ``dotted name'' that may resolve either to # "The specifier name is a ``dotted name'' that may resolve either to
# a module, a test case class, a TestSuite instance, a test method # a module, a test case class, a TestSuite instance, a test method
# within a test case class, or a callable object which returns a # within a test case class, or a callable object which returns a
...@@ -457,7 +457,7 @@ class Test_TestLoader(TestCase): ...@@ -457,7 +457,7 @@ class Test_TestLoader(TestCase):
def test(self): def test(self):
pass pass
m.testcase_1 = MyTestCase m.testcase_1 = MyTestCase
loader = unittest.TestLoader() loader = unittest.TestLoader()
try: try:
loader.loadTestsFromName('testcase_1.testfoo', m) loader.loadTestsFromName('testcase_1.testfoo', m)
...@@ -476,12 +476,12 @@ class Test_TestLoader(TestCase): ...@@ -476,12 +476,12 @@ class Test_TestLoader(TestCase):
def return_TestSuite(): def return_TestSuite():
return unittest.TestSuite([testcase_1, testcase_2]) return unittest.TestSuite([testcase_1, testcase_2])
m.return_TestSuite = return_TestSuite m.return_TestSuite = return_TestSuite
loader = unittest.TestLoader() loader = unittest.TestLoader()
suite = loader.loadTestsFromName('return_TestSuite', m) suite = loader.loadTestsFromName('return_TestSuite', m)
self.failUnless(isinstance(suite, loader.suiteClass)) self.failUnless(isinstance(suite, loader.suiteClass))
self.assertEqual(list(suite), [testcase_1, testcase_2]) self.assertEqual(list(suite), [testcase_1, testcase_2])
# "The specifier name is a ``dotted name'' that may resolve ... to # "The specifier name is a ``dotted name'' that may resolve ... to
# ... a callable object which returns a TestCase ... instance" # ... a callable object which returns a TestCase ... instance"
def test_loadTestsFromName__callable__TestCase_instance(self): def test_loadTestsFromName__callable__TestCase_instance(self):
...@@ -491,12 +491,12 @@ class Test_TestLoader(TestCase): ...@@ -491,12 +491,12 @@ class Test_TestLoader(TestCase):
def return_TestCase(): def return_TestCase():
return testcase_1 return testcase_1
m.return_TestCase = return_TestCase m.return_TestCase = return_TestCase
loader = unittest.TestLoader() loader = unittest.TestLoader()
suite = loader.loadTestsFromName('return_TestCase', m) suite = loader.loadTestsFromName('return_TestCase', m)
self.failUnless(isinstance(suite, loader.suiteClass)) self.failUnless(isinstance(suite, loader.suiteClass))
self.assertEqual(list(suite), [testcase_1]) self.assertEqual(list(suite), [testcase_1])
# "The specifier name is a ``dotted name'' that may resolve ... to # "The specifier name is a ``dotted name'' that may resolve ... to
# ... a callable object which returns a TestCase or TestSuite instance" # ... a callable object which returns a TestCase or TestSuite instance"
# #
...@@ -507,7 +507,7 @@ class Test_TestLoader(TestCase): ...@@ -507,7 +507,7 @@ class Test_TestLoader(TestCase):
def return_wrong(): def return_wrong():
return 6 return 6
m.return_wrong = return_wrong m.return_wrong = return_wrong
loader = unittest.TestLoader() loader = unittest.TestLoader()
try: try:
suite = loader.loadTestsFromName('return_wrong', m) suite = loader.loadTestsFromName('return_wrong', m)
...@@ -515,9 +515,9 @@ class Test_TestLoader(TestCase): ...@@ -515,9 +515,9 @@ class Test_TestLoader(TestCase):
pass pass
else: else:
self.fail("TestLoader.loadTestsFromName failed to raise TypeError") self.fail("TestLoader.loadTestsFromName failed to raise TypeError")
# "The specifier can refer to modules and packages which have not been # "The specifier can refer to modules and packages which have not been
# imported; they will be imported as a side-effect" # imported; they will be imported as a side-effect"
def test_loadTestsFromName__module_not_loaded(self): def test_loadTestsFromName__module_not_loaded(self):
# We're going to try to load this module as a side-effect, so it # We're going to try to load this module as a side-effect, so it
# better not be loaded before we try. # better not be loaded before we try.
...@@ -525,11 +525,11 @@ class Test_TestLoader(TestCase): ...@@ -525,11 +525,11 @@ class Test_TestLoader(TestCase):
# Why pick audioop? Google shows it isn't used very often, so there's # Why pick audioop? Google shows it isn't used very often, so there's
# a good chance that it won't be imported when this test is run # a good chance that it won't be imported when this test is run
module_name = 'audioop' module_name = 'audioop'
import sys import sys
if module_name in sys.modules: if module_name in sys.modules:
del sys.modules[module_name] del sys.modules[module_name]
loader = unittest.TestLoader() loader = unittest.TestLoader()
try: try:
suite = loader.loadTestsFromName(module_name) suite = loader.loadTestsFromName(module_name)
...@@ -547,18 +547,18 @@ class Test_TestLoader(TestCase): ...@@ -547,18 +547,18 @@ class Test_TestLoader(TestCase):
### Tests for TestLoader.loadTestsFromNames() ### Tests for TestLoader.loadTestsFromNames()
################################################################ ################################################################
# "Similar to loadTestsFromName(), but takes a sequence of names rather # "Similar to loadTestsFromName(), but takes a sequence of names rather
# than a single name." # than a single name."
# #
# What happens if that sequence of names is empty? # What happens if that sequence of names is empty?
def test_loadTestsFromNames__empty_name_list(self): def test_loadTestsFromNames__empty_name_list(self):
loader = unittest.TestLoader() loader = unittest.TestLoader()
suite = loader.loadTestsFromNames([]) suite = loader.loadTestsFromNames([])
self.failUnless(isinstance(suite, loader.suiteClass)) self.failUnless(isinstance(suite, loader.suiteClass))
self.assertEqual(list(suite), []) self.assertEqual(list(suite), [])
# "Similar to loadTestsFromName(), but takes a sequence of names rather # "Similar to loadTestsFromName(), but takes a sequence of names rather
# than a single name." # than a single name."
# ... # ...
...@@ -569,7 +569,7 @@ class Test_TestLoader(TestCase): ...@@ -569,7 +569,7 @@ class Test_TestLoader(TestCase):
# XXX Should this raise a ValueError or just return an empty TestSuite? # XXX Should this raise a ValueError or just return an empty TestSuite?
def test_loadTestsFromNames__relative_empty_name_list(self): def test_loadTestsFromNames__relative_empty_name_list(self):
loader = unittest.TestLoader() loader = unittest.TestLoader()
suite = loader.loadTestsFromNames([], unittest) suite = loader.loadTestsFromNames([], unittest)
self.failUnless(isinstance(suite, loader.suiteClass)) self.failUnless(isinstance(suite, loader.suiteClass))
self.assertEqual(list(suite), []) self.assertEqual(list(suite), [])
...@@ -582,23 +582,23 @@ class Test_TestLoader(TestCase): ...@@ -582,23 +582,23 @@ class Test_TestLoader(TestCase):
# Is ValueError raised in response to an empty name? # Is ValueError raised in response to an empty name?
def test_loadTestsFromNames__empty_name(self): def test_loadTestsFromNames__empty_name(self):
loader = unittest.TestLoader() loader = unittest.TestLoader()
try: try:
loader.loadTestsFromNames(['']) loader.loadTestsFromNames([''])
except ValueError, e: except ValueError, e:
self.assertEqual(str(e), "Empty module name") self.assertEqual(str(e), "Empty module name")
else: else:
self.fail("TestLoader.loadTestsFromNames failed to raise ValueError") self.fail("TestLoader.loadTestsFromNames failed to raise ValueError")
# "The specifier name is a ``dotted name'' that may resolve either to # "The specifier name is a ``dotted name'' that may resolve either to
# a module, a test case class, a TestSuite instance, a test method # a module, a test case class, a TestSuite instance, a test method
# within a test case class, or a callable object which returns a # within a test case class, or a callable object which returns a
# TestCase or TestSuite instance." # TestCase or TestSuite instance."
# #
# What happens when presented with an impossible module name? # What happens when presented with an impossible module name?
def test_loadTestsFromNames__malformed_name(self): def test_loadTestsFromNames__malformed_name(self):
loader = unittest.TestLoader() loader = unittest.TestLoader()
# XXX Should this raise ValueError or ImportError? # XXX Should this raise ValueError or ImportError?
try: try:
loader.loadTestsFromNames(['abc () //']) loader.loadTestsFromNames(['abc () //'])
...@@ -608,39 +608,39 @@ class Test_TestLoader(TestCase): ...@@ -608,39 +608,39 @@ class Test_TestLoader(TestCase):
pass pass
else: else:
self.fail("TestLoader.loadTestsFromNames failed to raise ValueError") self.fail("TestLoader.loadTestsFromNames failed to raise ValueError")
# "The specifier name is a ``dotted name'' that may resolve either to # "The specifier name is a ``dotted name'' that may resolve either to
# a module, a test case class, a TestSuite instance, a test method # a module, a test case class, a TestSuite instance, a test method
# within a test case class, or a callable object which returns a # within a test case class, or a callable object which returns a
# TestCase or TestSuite instance." # TestCase or TestSuite instance."
# #
# What happens when no module can be found for the given name? # What happens when no module can be found for the given name?
def test_loadTestsFromNames__unknown_module_name(self): def test_loadTestsFromNames__unknown_module_name(self):
loader = unittest.TestLoader() loader = unittest.TestLoader()
try: try:
loader.loadTestsFromNames(['sdasfasfasdf']) loader.loadTestsFromNames(['sdasfasfasdf'])
except ImportError, e: except ImportError, e:
self.assertEqual(str(e), "No module named sdasfasfasdf") self.assertEqual(str(e), "No module named sdasfasfasdf")
else: else:
self.fail("TestLoader.loadTestsFromNames failed to raise ImportError") self.fail("TestLoader.loadTestsFromNames failed to raise ImportError")
# "The specifier name is a ``dotted name'' that may resolve either to # "The specifier name is a ``dotted name'' that may resolve either to
# a module, a test case class, a TestSuite instance, a test method # a module, a test case class, a TestSuite instance, a test method
# within a test case class, or a callable object which returns a # within a test case class, or a callable object which returns a
# TestCase or TestSuite instance." # TestCase or TestSuite instance."
# #
# What happens when the module can be found, but not the attribute? # What happens when the module can be found, but not the attribute?
def test_loadTestsFromNames__unknown_attr_name(self): def test_loadTestsFromNames__unknown_attr_name(self):
loader = unittest.TestLoader() loader = unittest.TestLoader()
try: try:
loader.loadTestsFromNames(['unittest.sdasfasfasdf', 'unittest']) loader.loadTestsFromNames(['unittest.sdasfasfasdf', 'unittest'])
except AttributeError, e: except AttributeError, e:
self.assertEqual(str(e), "'module' object has no attribute 'sdasfasfasdf'") self.assertEqual(str(e), "'module' object has no attribute 'sdasfasfasdf'")
else: else:
self.fail("TestLoader.loadTestsFromNames failed to raise AttributeError") self.fail("TestLoader.loadTestsFromNames failed to raise AttributeError")
# "The specifier name is a ``dotted name'' that may resolve either to # "The specifier name is a ``dotted name'' that may resolve either to
# a module, a test case class, a TestSuite instance, a test method # a module, a test case class, a TestSuite instance, a test method
# within a test case class, or a callable object which returns a # within a test case class, or a callable object which returns a
...@@ -652,14 +652,14 @@ class Test_TestLoader(TestCase): ...@@ -652,14 +652,14 @@ class Test_TestLoader(TestCase):
# argument? # argument?
def test_loadTestsFromNames__unknown_name_relative_1(self): def test_loadTestsFromNames__unknown_name_relative_1(self):
loader = unittest.TestLoader() loader = unittest.TestLoader()
try: try:
loader.loadTestsFromNames(['sdasfasfasdf'], unittest) loader.loadTestsFromNames(['sdasfasfasdf'], unittest)
except AttributeError, e: except AttributeError, e:
self.assertEqual(str(e), "'module' object has no attribute 'sdasfasfasdf'") self.assertEqual(str(e), "'module' object has no attribute 'sdasfasfasdf'")
else: else:
self.fail("TestLoader.loadTestsFromName failed to raise AttributeError") self.fail("TestLoader.loadTestsFromName failed to raise AttributeError")
# "The specifier name is a ``dotted name'' that may resolve either to # "The specifier name is a ``dotted name'' that may resolve either to
# a module, a test case class, a TestSuite instance, a test method # a module, a test case class, a TestSuite instance, a test method
# within a test case class, or a callable object which returns a # within a test case class, or a callable object which returns a
...@@ -668,10 +668,10 @@ class Test_TestLoader(TestCase): ...@@ -668,10 +668,10 @@ class Test_TestLoader(TestCase):
# "The method optionally resolves name relative to the given module" # "The method optionally resolves name relative to the given module"
# #
# Do unknown attributes (relative to a provided module) still raise an # Do unknown attributes (relative to a provided module) still raise an
# exception even in the presence of valid attribute names? # exception even in the presence of valid attribute names?
def test_loadTestsFromNames__unknown_name_relative_2(self): def test_loadTestsFromNames__unknown_name_relative_2(self):
loader = unittest.TestLoader() loader = unittest.TestLoader()
try: try:
loader.loadTestsFromNames(['TestCase', 'sdasfasfasdf'], unittest) loader.loadTestsFromNames(['TestCase', 'sdasfasfasdf'], unittest)
except AttributeError, e: except AttributeError, e:
...@@ -692,14 +692,14 @@ class Test_TestLoader(TestCase): ...@@ -692,14 +692,14 @@ class Test_TestLoader(TestCase):
# more appropriate # more appropriate
def test_loadTestsFromNames__relative_empty_name(self): def test_loadTestsFromNames__relative_empty_name(self):
loader = unittest.TestLoader() loader = unittest.TestLoader()
try: try:
loader.loadTestsFromNames([''], unittest) loader.loadTestsFromNames([''], unittest)
except AttributeError: except AttributeError:
pass pass
else: else:
self.fail("Failed to raise ValueError") self.fail("Failed to raise ValueError")
# "The specifier name is a ``dotted name'' that may resolve either to # "The specifier name is a ``dotted name'' that may resolve either to
# a module, a test case class, a TestSuite instance, a test method # a module, a test case class, a TestSuite instance, a test method
# within a test case class, or a callable object which returns a # within a test case class, or a callable object which returns a
...@@ -707,10 +707,10 @@ class Test_TestLoader(TestCase): ...@@ -707,10 +707,10 @@ class Test_TestLoader(TestCase):
# ... # ...
# "The method optionally resolves name relative to the given module" # "The method optionally resolves name relative to the given module"
# #
# What happens when presented with an impossible attribute name? # What happens when presented with an impossible attribute name?
def test_loadTestsFromNames__relative_malformed_name(self): def test_loadTestsFromNames__relative_malformed_name(self):
loader = unittest.TestLoader() loader = unittest.TestLoader()
# XXX Should this raise AttributeError or ValueError? # XXX Should this raise AttributeError or ValueError?
try: try:
loader.loadTestsFromNames(['abc () //'], unittest) loader.loadTestsFromNames(['abc () //'], unittest)
...@@ -732,16 +732,16 @@ class Test_TestLoader(TestCase): ...@@ -732,16 +732,16 @@ class Test_TestLoader(TestCase):
class MyTestCase(unittest.TestCase): class MyTestCase(unittest.TestCase):
def test(self): def test(self):
pass pass
class NotAModule(object): class NotAModule(object):
test_2 = MyTestCase test_2 = MyTestCase
loader = unittest.TestLoader() loader = unittest.TestLoader()
suite = loader.loadTestsFromNames(['test_2'], NotAModule) suite = loader.loadTestsFromNames(['test_2'], NotAModule)
reference = [unittest.TestSuite([MyTestCase('test')])] reference = [unittest.TestSuite([MyTestCase('test')])]
self.assertEqual(list(suite), reference) self.assertEqual(list(suite), reference)
# "The specifier name is a ``dotted name'' that may resolve either to # "The specifier name is a ``dotted name'' that may resolve either to
# a module, a test case class, a TestSuite instance, a test method # a module, a test case class, a TestSuite instance, a test method
# within a test case class, or a callable object which returns a # within a test case class, or a callable object which returns a
...@@ -753,7 +753,7 @@ class Test_TestLoader(TestCase): ...@@ -753,7 +753,7 @@ class Test_TestLoader(TestCase):
import new import new
m = new.module('m') m = new.module('m')
m.testcase_1 = object() m.testcase_1 = object()
loader = unittest.TestLoader() loader = unittest.TestLoader()
try: try:
loader.loadTestsFromNames(['testcase_1'], m) loader.loadTestsFromNames(['testcase_1'], m)
...@@ -771,14 +771,14 @@ class Test_TestLoader(TestCase): ...@@ -771,14 +771,14 @@ class Test_TestLoader(TestCase):
def test(self): def test(self):
pass pass
m.testcase_1 = MyTestCase m.testcase_1 = MyTestCase
loader = unittest.TestLoader() loader = unittest.TestLoader()
suite = loader.loadTestsFromNames(['testcase_1'], m) suite = loader.loadTestsFromNames(['testcase_1'], m)
self.failUnless(isinstance(suite, loader.suiteClass)) self.failUnless(isinstance(suite, loader.suiteClass))
expected = loader.suiteClass([MyTestCase('test')]) expected = loader.suiteClass([MyTestCase('test')])
self.assertEqual(list(suite), [expected]) self.assertEqual(list(suite), [expected])
# "The specifier name is a ``dotted name'' that may resolve ... to # "The specifier name is a ``dotted name'' that may resolve ... to
# ... a TestSuite instance" # ... a TestSuite instance"
def test_loadTestsFromNames__relative_TestSuite(self): def test_loadTestsFromNames__relative_TestSuite(self):
...@@ -788,13 +788,13 @@ class Test_TestLoader(TestCase): ...@@ -788,13 +788,13 @@ class Test_TestLoader(TestCase):
def test(self): def test(self):
pass pass
m.testsuite = unittest.TestSuite([MyTestCase('test')]) m.testsuite = unittest.TestSuite([MyTestCase('test')])
loader = unittest.TestLoader() loader = unittest.TestLoader()
suite = loader.loadTestsFromNames(['testsuite'], m) suite = loader.loadTestsFromNames(['testsuite'], m)
self.failUnless(isinstance(suite, loader.suiteClass)) self.failUnless(isinstance(suite, loader.suiteClass))
self.assertEqual(list(suite), [m.testsuite]) self.assertEqual(list(suite), [m.testsuite])
# "The specifier name is a ``dotted name'' that may resolve ... to ... a # "The specifier name is a ``dotted name'' that may resolve ... to ... a
# test method within a test case class" # test method within a test case class"
def test_loadTestsFromNames__relative_testmethod(self): def test_loadTestsFromNames__relative_testmethod(self):
...@@ -804,19 +804,19 @@ class Test_TestLoader(TestCase): ...@@ -804,19 +804,19 @@ class Test_TestLoader(TestCase):
def test(self): def test(self):
pass pass
m.testcase_1 = MyTestCase m.testcase_1 = MyTestCase
loader = unittest.TestLoader() loader = unittest.TestLoader()
suite = loader.loadTestsFromNames(['testcase_1.test'], m) suite = loader.loadTestsFromNames(['testcase_1.test'], m)
self.failUnless(isinstance(suite, loader.suiteClass)) self.failUnless(isinstance(suite, loader.suiteClass))
ref_suite = unittest.TestSuite([MyTestCase('test')]) ref_suite = unittest.TestSuite([MyTestCase('test')])
self.assertEqual(list(suite), [ref_suite]) self.assertEqual(list(suite), [ref_suite])
# "The specifier name is a ``dotted name'' that may resolve ... to ... a # "The specifier name is a ``dotted name'' that may resolve ... to ... a
# test method within a test case class" # test method within a test case class"
# #
# Does the method gracefully handle names that initially look like they # Does the method gracefully handle names that initially look like they
# resolve to "a test method within a test case class" but don't? # resolve to "a test method within a test case class" but don't?
def test_loadTestsFromNames__relative_invalid_testmethod(self): def test_loadTestsFromNames__relative_invalid_testmethod(self):
import new import new
m = new.module('m') m = new.module('m')
...@@ -824,7 +824,7 @@ class Test_TestLoader(TestCase): ...@@ -824,7 +824,7 @@ class Test_TestLoader(TestCase):
def test(self): def test(self):
pass pass
m.testcase_1 = MyTestCase m.testcase_1 = MyTestCase
loader = unittest.TestLoader() loader = unittest.TestLoader()
try: try:
loader.loadTestsFromNames(['testcase_1.testfoo'], m) loader.loadTestsFromNames(['testcase_1.testfoo'], m)
...@@ -843,14 +843,14 @@ class Test_TestLoader(TestCase): ...@@ -843,14 +843,14 @@ class Test_TestLoader(TestCase):
def return_TestSuite(): def return_TestSuite():
return unittest.TestSuite([testcase_1, testcase_2]) return unittest.TestSuite([testcase_1, testcase_2])
m.return_TestSuite = return_TestSuite m.return_TestSuite = return_TestSuite
loader = unittest.TestLoader() loader = unittest.TestLoader()
suite = loader.loadTestsFromNames(['return_TestSuite'], m) suite = loader.loadTestsFromNames(['return_TestSuite'], m)
self.failUnless(isinstance(suite, loader.suiteClass)) self.failUnless(isinstance(suite, loader.suiteClass))
expected = unittest.TestSuite([testcase_1, testcase_2]) expected = unittest.TestSuite([testcase_1, testcase_2])
self.assertEqual(list(suite), [expected]) self.assertEqual(list(suite), [expected])
# "The specifier name is a ``dotted name'' that may resolve ... to # "The specifier name is a ``dotted name'' that may resolve ... to
# ... a callable object which returns a TestCase ... instance" # ... a callable object which returns a TestCase ... instance"
def test_loadTestsFromNames__callable__TestCase_instance(self): def test_loadTestsFromNames__callable__TestCase_instance(self):
...@@ -860,39 +860,39 @@ class Test_TestLoader(TestCase): ...@@ -860,39 +860,39 @@ class Test_TestLoader(TestCase):
def return_TestCase(): def return_TestCase():
return testcase_1 return testcase_1
m.return_TestCase = return_TestCase m.return_TestCase = return_TestCase
loader = unittest.TestLoader() loader = unittest.TestLoader()
suite = loader.loadTestsFromNames(['return_TestCase'], m) suite = loader.loadTestsFromNames(['return_TestCase'], m)
self.failUnless(isinstance(suite, loader.suiteClass)) self.failUnless(isinstance(suite, loader.suiteClass))
ref_suite = unittest.TestSuite([testcase_1]) ref_suite = unittest.TestSuite([testcase_1])
self.assertEqual(list(suite), [ref_suite]) self.assertEqual(list(suite), [ref_suite])
# "The specifier name is a ``dotted name'' that may resolve ... to # "The specifier name is a ``dotted name'' that may resolve ... to
# ... a callable object which returns a TestCase or TestSuite instance" # ... a callable object which returns a TestCase or TestSuite instance"
# #
# Are staticmethods handled correctly? # Are staticmethods handled correctly?
def test_loadTestsFromNames__callable__call_staticmethod(self): def test_loadTestsFromNames__callable__call_staticmethod(self):
import new import new
m = new.module('m') m = new.module('m')
class Test1(unittest.TestCase): class Test1(unittest.TestCase):
def test(self): def test(self):
pass pass
testcase_1 = Test1('test') testcase_1 = Test1('test')
class Foo(unittest.TestCase): class Foo(unittest.TestCase):
@staticmethod @staticmethod
def foo(): def foo():
return testcase_1 return testcase_1
m.Foo = Foo m.Foo = Foo
loader = unittest.TestLoader() loader = unittest.TestLoader()
suite = loader.loadTestsFromNames(['Foo.foo'], m) suite = loader.loadTestsFromNames(['Foo.foo'], m)
self.failUnless(isinstance(suite, loader.suiteClass)) self.failUnless(isinstance(suite, loader.suiteClass))
ref_suite = unittest.TestSuite([testcase_1]) ref_suite = unittest.TestSuite([testcase_1])
self.assertEqual(list(suite), [ref_suite]) self.assertEqual(list(suite), [ref_suite])
# "The specifier name is a ``dotted name'' that may resolve ... to # "The specifier name is a ``dotted name'' that may resolve ... to
# ... a callable object which returns a TestCase or TestSuite instance" # ... a callable object which returns a TestCase or TestSuite instance"
# #
...@@ -903,7 +903,7 @@ class Test_TestLoader(TestCase): ...@@ -903,7 +903,7 @@ class Test_TestLoader(TestCase):
def return_wrong(): def return_wrong():
return 6 return 6
m.return_wrong = return_wrong m.return_wrong = return_wrong
loader = unittest.TestLoader() loader = unittest.TestLoader()
try: try:
suite = loader.loadTestsFromNames(['return_wrong'], m) suite = loader.loadTestsFromNames(['return_wrong'], m)
...@@ -911,9 +911,9 @@ class Test_TestLoader(TestCase): ...@@ -911,9 +911,9 @@ class Test_TestLoader(TestCase):
pass pass
else: else:
self.fail("TestLoader.loadTestsFromNames failed to raise TypeError") self.fail("TestLoader.loadTestsFromNames failed to raise TypeError")
# "The specifier can refer to modules and packages which have not been # "The specifier can refer to modules and packages which have not been
# imported; they will be imported as a side-effect" # imported; they will be imported as a side-effect"
def test_loadTestsFromNames__module_not_loaded(self): def test_loadTestsFromNames__module_not_loaded(self):
# We're going to try to load this module as a side-effect, so it # We're going to try to load this module as a side-effect, so it
# better not be loaded before we try. # better not be loaded before we try.
...@@ -921,11 +921,11 @@ class Test_TestLoader(TestCase): ...@@ -921,11 +921,11 @@ class Test_TestLoader(TestCase):
# Why pick audioop? Google shows it isn't used very often, so there's # Why pick audioop? Google shows it isn't used very often, so there's
# a good chance that it won't be imported when this test is run # a good chance that it won't be imported when this test is run
module_name = 'audioop' module_name = 'audioop'
import sys import sys
if module_name in sys.modules: if module_name in sys.modules:
del sys.modules[module_name] del sys.modules[module_name]
loader = unittest.TestLoader() loader = unittest.TestLoader()
try: try:
suite = loader.loadTestsFromNames([module_name]) suite = loader.loadTestsFromNames([module_name])
...@@ -937,38 +937,38 @@ class Test_TestLoader(TestCase): ...@@ -937,38 +937,38 @@ class Test_TestLoader(TestCase):
self.failUnless(module_name in sys.modules) self.failUnless(module_name in sys.modules)
finally: finally:
del sys.modules[module_name] del sys.modules[module_name]
################################################################ ################################################################
### /Tests for TestLoader.loadTestsFromNames() ### /Tests for TestLoader.loadTestsFromNames()
### Tests for TestLoader.getTestCaseNames() ### Tests for TestLoader.getTestCaseNames()
################################################################ ################################################################
# "Return a sorted sequence of method names found within testCaseClass" # "Return a sorted sequence of method names found within testCaseClass"
# #
# Test.foobar is defined to make sure getTestCaseNames() respects # Test.foobar is defined to make sure getTestCaseNames() respects
# loader.testMethodPrefix # loader.testMethodPrefix
def test_getTestCaseNames(self): def test_getTestCaseNames(self):
class Test(unittest.TestCase): class Test(unittest.TestCase):
def test_1(self): pass def test_1(self): pass
def test_2(self): pass def test_2(self): pass
def foobar(self): pass def foobar(self): pass
loader = unittest.TestLoader() loader = unittest.TestLoader()
self.assertEqual(loader.getTestCaseNames(Test), ['test_1', 'test_2']) self.assertEqual(loader.getTestCaseNames(Test), ['test_1', 'test_2'])
# "Return a sorted sequence of method names found within testCaseClass" # "Return a sorted sequence of method names found within testCaseClass"
# #
# Does getTestCaseNames() behave appropriately if no tests are found? # Does getTestCaseNames() behave appropriately if no tests are found?
def test_getTestCaseNames__no_tests(self): def test_getTestCaseNames__no_tests(self):
class Test(unittest.TestCase): class Test(unittest.TestCase):
def foobar(self): pass def foobar(self): pass
loader = unittest.TestLoader() loader = unittest.TestLoader()
self.assertEqual(loader.getTestCaseNames(Test), []) self.assertEqual(loader.getTestCaseNames(Test), [])
# "Return a sorted sequence of method names found within testCaseClass" # "Return a sorted sequence of method names found within testCaseClass"
# #
# Are not-TestCases handled gracefully? # Are not-TestCases handled gracefully?
...@@ -981,42 +981,42 @@ class Test_TestLoader(TestCase): ...@@ -981,42 +981,42 @@ class Test_TestLoader(TestCase):
class BadCase(int): class BadCase(int):
def test_foo(self): def test_foo(self):
pass pass
loader = unittest.TestLoader() loader = unittest.TestLoader()
names = loader.getTestCaseNames(BadCase) names = loader.getTestCaseNames(BadCase)
self.assertEqual(names, ['test_foo']) self.assertEqual(names, ['test_foo'])
# "Return a sorted sequence of method names found within testCaseClass" # "Return a sorted sequence of method names found within testCaseClass"
# #
# Make sure inherited names are handled. # Make sure inherited names are handled.
# #
# TestP.foobar is defined to make sure getTestCaseNames() respects # TestP.foobar is defined to make sure getTestCaseNames() respects
# loader.testMethodPrefix # loader.testMethodPrefix
def test_getTestCaseNames__inheritance(self): def test_getTestCaseNames__inheritance(self):
class TestP(unittest.TestCase): class TestP(unittest.TestCase):
def test_1(self): pass def test_1(self): pass
def test_2(self): pass def test_2(self): pass
def foobar(self): pass def foobar(self): pass
class TestC(TestP): class TestC(TestP):
def test_1(self): pass def test_1(self): pass
def test_3(self): pass def test_3(self): pass
loader = unittest.TestLoader() loader = unittest.TestLoader()
names = ['test_1', 'test_2', 'test_3'] names = ['test_1', 'test_2', 'test_3']
self.assertEqual(loader.getTestCaseNames(TestC), names) self.assertEqual(loader.getTestCaseNames(TestC), names)
################################################################ ################################################################
### /Tests for TestLoader.getTestCaseNames() ### /Tests for TestLoader.getTestCaseNames()
### Tests for TestLoader.testMethodPrefix ### Tests for TestLoader.testMethodPrefix
################################################################ ################################################################
# "String giving the prefix of method names which will be interpreted as # "String giving the prefix of method names which will be interpreted as
# test methods" # test methods"
# #
# Implicit in the documentation is that testMethodPrefix is respected by # Implicit in the documentation is that testMethodPrefix is respected by
# all loadTestsFrom* methods. # all loadTestsFrom* methods.
def test_testMethodPrefix__loadTestsFromTestCase(self): def test_testMethodPrefix__loadTestsFromTestCase(self):
...@@ -1024,20 +1024,20 @@ class Test_TestLoader(TestCase): ...@@ -1024,20 +1024,20 @@ class Test_TestLoader(TestCase):
def test_1(self): pass def test_1(self): pass
def test_2(self): pass def test_2(self): pass
def foo_bar(self): pass def foo_bar(self): pass
tests_1 = unittest.TestSuite([Foo('foo_bar')]) tests_1 = unittest.TestSuite([Foo('foo_bar')])
tests_2 = unittest.TestSuite([Foo('test_1'), Foo('test_2')]) tests_2 = unittest.TestSuite([Foo('test_1'), Foo('test_2')])
loader = unittest.TestLoader() loader = unittest.TestLoader()
loader.testMethodPrefix = 'foo' loader.testMethodPrefix = 'foo'
self.assertEqual(loader.loadTestsFromTestCase(Foo), tests_1) self.assertEqual(loader.loadTestsFromTestCase(Foo), tests_1)
loader.testMethodPrefix = 'test' loader.testMethodPrefix = 'test'
self.assertEqual(loader.loadTestsFromTestCase(Foo), tests_2) self.assertEqual(loader.loadTestsFromTestCase(Foo), tests_2)
# "String giving the prefix of method names which will be interpreted as # "String giving the prefix of method names which will be interpreted as
# test methods" # test methods"
# #
# Implicit in the documentation is that testMethodPrefix is respected by # Implicit in the documentation is that testMethodPrefix is respected by
# all loadTestsFrom* methods. # all loadTestsFrom* methods.
def test_testMethodPrefix__loadTestsFromModule(self): def test_testMethodPrefix__loadTestsFromModule(self):
...@@ -1048,20 +1048,20 @@ class Test_TestLoader(TestCase): ...@@ -1048,20 +1048,20 @@ class Test_TestLoader(TestCase):
def test_2(self): pass def test_2(self): pass
def foo_bar(self): pass def foo_bar(self): pass
m.Foo = Foo m.Foo = Foo
tests_1 = [unittest.TestSuite([Foo('foo_bar')])] tests_1 = [unittest.TestSuite([Foo('foo_bar')])]
tests_2 = [unittest.TestSuite([Foo('test_1'), Foo('test_2')])] tests_2 = [unittest.TestSuite([Foo('test_1'), Foo('test_2')])]
loader = unittest.TestLoader() loader = unittest.TestLoader()
loader.testMethodPrefix = 'foo' loader.testMethodPrefix = 'foo'
self.assertEqual(list(loader.loadTestsFromModule(m)), tests_1) self.assertEqual(list(loader.loadTestsFromModule(m)), tests_1)
loader.testMethodPrefix = 'test' loader.testMethodPrefix = 'test'
self.assertEqual(list(loader.loadTestsFromModule(m)), tests_2) self.assertEqual(list(loader.loadTestsFromModule(m)), tests_2)
# "String giving the prefix of method names which will be interpreted as # "String giving the prefix of method names which will be interpreted as
# test methods" # test methods"
# #
# Implicit in the documentation is that testMethodPrefix is respected by # Implicit in the documentation is that testMethodPrefix is respected by
# all loadTestsFrom* methods. # all loadTestsFrom* methods.
def test_testMethodPrefix__loadTestsFromName(self): def test_testMethodPrefix__loadTestsFromName(self):
...@@ -1072,20 +1072,20 @@ class Test_TestLoader(TestCase): ...@@ -1072,20 +1072,20 @@ class Test_TestLoader(TestCase):
def test_2(self): pass def test_2(self): pass
def foo_bar(self): pass def foo_bar(self): pass
m.Foo = Foo m.Foo = Foo
tests_1 = unittest.TestSuite([Foo('foo_bar')]) tests_1 = unittest.TestSuite([Foo('foo_bar')])
tests_2 = unittest.TestSuite([Foo('test_1'), Foo('test_2')]) tests_2 = unittest.TestSuite([Foo('test_1'), Foo('test_2')])
loader = unittest.TestLoader() loader = unittest.TestLoader()
loader.testMethodPrefix = 'foo' loader.testMethodPrefix = 'foo'
self.assertEqual(loader.loadTestsFromName('Foo', m), tests_1) self.assertEqual(loader.loadTestsFromName('Foo', m), tests_1)
loader.testMethodPrefix = 'test' loader.testMethodPrefix = 'test'
self.assertEqual(loader.loadTestsFromName('Foo', m), tests_2) self.assertEqual(loader.loadTestsFromName('Foo', m), tests_2)
# "String giving the prefix of method names which will be interpreted as # "String giving the prefix of method names which will be interpreted as
# test methods" # test methods"
# #
# Implicit in the documentation is that testMethodPrefix is respected by # Implicit in the documentation is that testMethodPrefix is respected by
# all loadTestsFrom* methods. # all loadTestsFrom* methods.
def test_testMethodPrefix__loadTestsFromNames(self): def test_testMethodPrefix__loadTestsFromNames(self):
...@@ -1096,102 +1096,102 @@ class Test_TestLoader(TestCase): ...@@ -1096,102 +1096,102 @@ class Test_TestLoader(TestCase):
def test_2(self): pass def test_2(self): pass
def foo_bar(self): pass def foo_bar(self): pass
m.Foo = Foo m.Foo = Foo
tests_1 = unittest.TestSuite([unittest.TestSuite([Foo('foo_bar')])]) tests_1 = unittest.TestSuite([unittest.TestSuite([Foo('foo_bar')])])
tests_2 = unittest.TestSuite([Foo('test_1'), Foo('test_2')]) tests_2 = unittest.TestSuite([Foo('test_1'), Foo('test_2')])
tests_2 = unittest.TestSuite([tests_2]) tests_2 = unittest.TestSuite([tests_2])
loader = unittest.TestLoader() loader = unittest.TestLoader()
loader.testMethodPrefix = 'foo' loader.testMethodPrefix = 'foo'
self.assertEqual(loader.loadTestsFromNames(['Foo'], m), tests_1) self.assertEqual(loader.loadTestsFromNames(['Foo'], m), tests_1)
loader.testMethodPrefix = 'test' loader.testMethodPrefix = 'test'
self.assertEqual(loader.loadTestsFromNames(['Foo'], m), tests_2) self.assertEqual(loader.loadTestsFromNames(['Foo'], m), tests_2)
# "The default value is 'test'" # "The default value is 'test'"
def test_testMethodPrefix__default_value(self): def test_testMethodPrefix__default_value(self):
loader = unittest.TestLoader() loader = unittest.TestLoader()
self.failUnless(loader.testMethodPrefix == 'test') self.failUnless(loader.testMethodPrefix == 'test')
################################################################ ################################################################
### /Tests for TestLoader.testMethodPrefix ### /Tests for TestLoader.testMethodPrefix
### Tests for TestLoader.sortTestMethodsUsing ### Tests for TestLoader.sortTestMethodsUsing
################################################################ ################################################################
# "Function to be used to compare method names when sorting them in # "Function to be used to compare method names when sorting them in
# getTestCaseNames() and all the loadTestsFromX() methods" # getTestCaseNames() and all the loadTestsFromX() methods"
def test_sortTestMethodsUsing__loadTestsFromTestCase(self): def test_sortTestMethodsUsing__loadTestsFromTestCase(self):
def reversed_cmp(x, y): def reversed_cmp(x, y):
return -cmp(x, y) return -cmp(x, y)
class Foo(unittest.TestCase): class Foo(unittest.TestCase):
def test_1(self): pass def test_1(self): pass
def test_2(self): pass def test_2(self): pass
loader = unittest.TestLoader() loader = unittest.TestLoader()
loader.sortTestMethodsUsing = reversed_cmp loader.sortTestMethodsUsing = reversed_cmp
tests = loader.suiteClass([Foo('test_2'), Foo('test_1')]) tests = loader.suiteClass([Foo('test_2'), Foo('test_1')])
self.assertEqual(loader.loadTestsFromTestCase(Foo), tests) self.assertEqual(loader.loadTestsFromTestCase(Foo), tests)
# "Function to be used to compare method names when sorting them in # "Function to be used to compare method names when sorting them in
# getTestCaseNames() and all the loadTestsFromX() methods" # getTestCaseNames() and all the loadTestsFromX() methods"
def test_sortTestMethodsUsing__loadTestsFromModule(self): def test_sortTestMethodsUsing__loadTestsFromModule(self):
def reversed_cmp(x, y): def reversed_cmp(x, y):
return -cmp(x, y) return -cmp(x, y)
import new import new
m = new.module('m') m = new.module('m')
class Foo(unittest.TestCase): class Foo(unittest.TestCase):
def test_1(self): pass def test_1(self): pass
def test_2(self): pass def test_2(self): pass
m.Foo = Foo m.Foo = Foo
loader = unittest.TestLoader() loader = unittest.TestLoader()
loader.sortTestMethodsUsing = reversed_cmp loader.sortTestMethodsUsing = reversed_cmp
tests = [loader.suiteClass([Foo('test_2'), Foo('test_1')])] tests = [loader.suiteClass([Foo('test_2'), Foo('test_1')])]
self.assertEqual(list(loader.loadTestsFromModule(m)), tests) self.assertEqual(list(loader.loadTestsFromModule(m)), tests)
# "Function to be used to compare method names when sorting them in # "Function to be used to compare method names when sorting them in
# getTestCaseNames() and all the loadTestsFromX() methods" # getTestCaseNames() and all the loadTestsFromX() methods"
def test_sortTestMethodsUsing__loadTestsFromName(self): def test_sortTestMethodsUsing__loadTestsFromName(self):
def reversed_cmp(x, y): def reversed_cmp(x, y):
return -cmp(x, y) return -cmp(x, y)
import new import new
m = new.module('m') m = new.module('m')
class Foo(unittest.TestCase): class Foo(unittest.TestCase):
def test_1(self): pass def test_1(self): pass
def test_2(self): pass def test_2(self): pass
m.Foo = Foo m.Foo = Foo
loader = unittest.TestLoader() loader = unittest.TestLoader()
loader.sortTestMethodsUsing = reversed_cmp loader.sortTestMethodsUsing = reversed_cmp
tests = loader.suiteClass([Foo('test_2'), Foo('test_1')]) tests = loader.suiteClass([Foo('test_2'), Foo('test_1')])
self.assertEqual(loader.loadTestsFromName('Foo', m), tests) self.assertEqual(loader.loadTestsFromName('Foo', m), tests)
# "Function to be used to compare method names when sorting them in # "Function to be used to compare method names when sorting them in
# getTestCaseNames() and all the loadTestsFromX() methods" # getTestCaseNames() and all the loadTestsFromX() methods"
def test_sortTestMethodsUsing__loadTestsFromNames(self): def test_sortTestMethodsUsing__loadTestsFromNames(self):
def reversed_cmp(x, y): def reversed_cmp(x, y):
return -cmp(x, y) return -cmp(x, y)
import new import new
m = new.module('m') m = new.module('m')
class Foo(unittest.TestCase): class Foo(unittest.TestCase):
def test_1(self): pass def test_1(self): pass
def test_2(self): pass def test_2(self): pass
m.Foo = Foo m.Foo = Foo
loader = unittest.TestLoader() loader = unittest.TestLoader()
loader.sortTestMethodsUsing = reversed_cmp loader.sortTestMethodsUsing = reversed_cmp
tests = [loader.suiteClass([Foo('test_2'), Foo('test_1')])] tests = [loader.suiteClass([Foo('test_2'), Foo('test_1')])]
self.assertEqual(list(loader.loadTestsFromNames(['Foo'], m)), tests) self.assertEqual(list(loader.loadTestsFromNames(['Foo'], m)), tests)
# "Function to be used to compare method names when sorting them in # "Function to be used to compare method names when sorting them in
# getTestCaseNames()" # getTestCaseNames()"
# #
...@@ -1199,22 +1199,22 @@ class Test_TestLoader(TestCase): ...@@ -1199,22 +1199,22 @@ class Test_TestLoader(TestCase):
def test_sortTestMethodsUsing__getTestCaseNames(self): def test_sortTestMethodsUsing__getTestCaseNames(self):
def reversed_cmp(x, y): def reversed_cmp(x, y):
return -cmp(x, y) return -cmp(x, y)
class Foo(unittest.TestCase): class Foo(unittest.TestCase):
def test_1(self): pass def test_1(self): pass
def test_2(self): pass def test_2(self): pass
loader = unittest.TestLoader() loader = unittest.TestLoader()
loader.sortTestMethodsUsing = reversed_cmp loader.sortTestMethodsUsing = reversed_cmp
test_names = ['test_2', 'test_1'] test_names = ['test_2', 'test_1']
self.assertEqual(loader.getTestCaseNames(Foo), test_names) self.assertEqual(loader.getTestCaseNames(Foo), test_names)
# "The default value is the built-in cmp() function" # "The default value is the built-in cmp() function"
def test_sortTestMethodsUsing__default_value(self): def test_sortTestMethodsUsing__default_value(self):
loader = unittest.TestLoader() loader = unittest.TestLoader()
self.failUnless(loader.sortTestMethodsUsing is cmp) self.failUnless(loader.sortTestMethodsUsing is cmp)
# "it can be set to None to disable the sort." # "it can be set to None to disable the sort."
# #
# XXX How is this different from reassigning cmp? Are the tests returned # XXX How is this different from reassigning cmp? Are the tests returned
...@@ -1223,34 +1223,34 @@ class Test_TestLoader(TestCase): ...@@ -1223,34 +1223,34 @@ class Test_TestLoader(TestCase):
class Foo(unittest.TestCase): class Foo(unittest.TestCase):
def test_1(self): pass def test_1(self): pass
def test_2(self): pass def test_2(self): pass
loader = unittest.TestLoader() loader = unittest.TestLoader()
loader.sortTestMethodsUsing = None loader.sortTestMethodsUsing = None
test_names = ['test_2', 'test_1'] test_names = ['test_2', 'test_1']
self.assertEqual(set(loader.getTestCaseNames(Foo)), set(test_names)) self.assertEqual(set(loader.getTestCaseNames(Foo)), set(test_names))
################################################################ ################################################################
### /Tests for TestLoader.sortTestMethodsUsing ### /Tests for TestLoader.sortTestMethodsUsing
### Tests for TestLoader.suiteClass ### Tests for TestLoader.suiteClass
################################################################ ################################################################
# "Callable object that constructs a test suite from a list of tests." # "Callable object that constructs a test suite from a list of tests."
def test_suiteClass__loadTestsFromTestCase(self): def test_suiteClass__loadTestsFromTestCase(self):
class Foo(unittest.TestCase): class Foo(unittest.TestCase):
def test_1(self): pass def test_1(self): pass
def test_2(self): pass def test_2(self): pass
def foo_bar(self): pass def foo_bar(self): pass
tests = [Foo('test_1'), Foo('test_2')] tests = [Foo('test_1'), Foo('test_2')]
loader = unittest.TestLoader() loader = unittest.TestLoader()
loader.suiteClass = list loader.suiteClass = list
self.assertEqual(loader.loadTestsFromTestCase(Foo), tests) self.assertEqual(loader.loadTestsFromTestCase(Foo), tests)
# It is implicit in the documentation for TestLoader.suiteClass that # It is implicit in the documentation for TestLoader.suiteClass that
# all TestLoader.loadTestsFrom* methods respect it. Let's make sure # all TestLoader.loadTestsFrom* methods respect it. Let's make sure
def test_suiteClass__loadTestsFromModule(self): def test_suiteClass__loadTestsFromModule(self):
import new import new
m = new.module('m') m = new.module('m')
...@@ -1259,15 +1259,15 @@ class Test_TestLoader(TestCase): ...@@ -1259,15 +1259,15 @@ class Test_TestLoader(TestCase):
def test_2(self): pass def test_2(self): pass
def foo_bar(self): pass def foo_bar(self): pass
m.Foo = Foo m.Foo = Foo
tests = [[Foo('test_1'), Foo('test_2')]] tests = [[Foo('test_1'), Foo('test_2')]]
loader = unittest.TestLoader() loader = unittest.TestLoader()
loader.suiteClass = list loader.suiteClass = list
self.assertEqual(loader.loadTestsFromModule(m), tests) self.assertEqual(loader.loadTestsFromModule(m), tests)
# It is implicit in the documentation for TestLoader.suiteClass that # It is implicit in the documentation for TestLoader.suiteClass that
# all TestLoader.loadTestsFrom* methods respect it. Let's make sure # all TestLoader.loadTestsFrom* methods respect it. Let's make sure
def test_suiteClass__loadTestsFromName(self): def test_suiteClass__loadTestsFromName(self):
import new import new
m = new.module('m') m = new.module('m')
...@@ -1276,15 +1276,15 @@ class Test_TestLoader(TestCase): ...@@ -1276,15 +1276,15 @@ class Test_TestLoader(TestCase):
def test_2(self): pass def test_2(self): pass
def foo_bar(self): pass def foo_bar(self): pass
m.Foo = Foo m.Foo = Foo
tests = [Foo('test_1'), Foo('test_2')] tests = [Foo('test_1'), Foo('test_2')]
loader = unittest.TestLoader() loader = unittest.TestLoader()
loader.suiteClass = list loader.suiteClass = list
self.assertEqual(loader.loadTestsFromName('Foo', m), tests) self.assertEqual(loader.loadTestsFromName('Foo', m), tests)
# It is implicit in the documentation for TestLoader.suiteClass that # It is implicit in the documentation for TestLoader.suiteClass that
# all TestLoader.loadTestsFrom* methods respect it. Let's make sure # all TestLoader.loadTestsFrom* methods respect it. Let's make sure
def test_suiteClass__loadTestsFromNames(self): def test_suiteClass__loadTestsFromNames(self):
import new import new
m = new.module('m') m = new.module('m')
...@@ -1293,18 +1293,18 @@ class Test_TestLoader(TestCase): ...@@ -1293,18 +1293,18 @@ class Test_TestLoader(TestCase):
def test_2(self): pass def test_2(self): pass
def foo_bar(self): pass def foo_bar(self): pass
m.Foo = Foo m.Foo = Foo
tests = [[Foo('test_1'), Foo('test_2')]] tests = [[Foo('test_1'), Foo('test_2')]]
loader = unittest.TestLoader() loader = unittest.TestLoader()
loader.suiteClass = list loader.suiteClass = list
self.assertEqual(loader.loadTestsFromNames(['Foo'], m), tests) self.assertEqual(loader.loadTestsFromNames(['Foo'], m), tests)
# "The default value is the TestSuite class" # "The default value is the TestSuite class"
def test_suiteClass__default_value(self): def test_suiteClass__default_value(self):
loader = unittest.TestLoader() loader = unittest.TestLoader()
self.failUnless(loader.suiteClass is unittest.TestSuite) self.failUnless(loader.suiteClass is unittest.TestSuite)
################################################################ ################################################################
### /Tests for TestLoader.suiteClass ### /Tests for TestLoader.suiteClass
...@@ -1319,7 +1319,7 @@ class Foo(unittest.TestCase): ...@@ -1319,7 +1319,7 @@ class Foo(unittest.TestCase):
def _mk_TestSuite(*names): def _mk_TestSuite(*names):
return unittest.TestSuite(Foo(n) for n in names) return unittest.TestSuite(Foo(n) for n in names)
################################################################ ################################################################
### /Support code for Test_TestSuite ### /Support code for Test_TestSuite
...@@ -1332,13 +1332,13 @@ class Test_TestSuite(TestCase, TestEquality): ...@@ -1332,13 +1332,13 @@ class Test_TestSuite(TestCase, TestEquality):
eq_pairs = [(unittest.TestSuite(), unittest.TestSuite()) eq_pairs = [(unittest.TestSuite(), unittest.TestSuite())
,(unittest.TestSuite(), unittest.TestSuite([])) ,(unittest.TestSuite(), unittest.TestSuite([]))
,(_mk_TestSuite('test_1'), _mk_TestSuite('test_1'))] ,(_mk_TestSuite('test_1'), _mk_TestSuite('test_1'))]
# Used by TestEquality.test_ne # Used by TestEquality.test_ne
ne_pairs = [(unittest.TestSuite(), _mk_TestSuite('test_1')) ne_pairs = [(unittest.TestSuite(), _mk_TestSuite('test_1'))
,(unittest.TestSuite([]), _mk_TestSuite('test_1')) ,(unittest.TestSuite([]), _mk_TestSuite('test_1'))
,(_mk_TestSuite('test_1', 'test_2'), _mk_TestSuite('test_1', 'test_3')) ,(_mk_TestSuite('test_1', 'test_2'), _mk_TestSuite('test_1', 'test_3'))
,(_mk_TestSuite('test_1'), _mk_TestSuite('test_2'))] ,(_mk_TestSuite('test_1'), _mk_TestSuite('test_2'))]
################################################################ ################################################################
### /Set up attributes needed by inherited tests ### /Set up attributes needed by inherited tests
...@@ -1350,41 +1350,41 @@ class Test_TestSuite(TestCase, TestEquality): ...@@ -1350,41 +1350,41 @@ class Test_TestSuite(TestCase, TestEquality):
# The tests iterable should be optional # The tests iterable should be optional
def test_init__tests_optional(self): def test_init__tests_optional(self):
suite = unittest.TestSuite() suite = unittest.TestSuite()
self.assertEqual(suite.countTestCases(), 0) self.assertEqual(suite.countTestCases(), 0)
# "class TestSuite([tests])" # "class TestSuite([tests])"
# ... # ...
# "If tests is given, it must be an iterable of individual test cases # "If tests is given, it must be an iterable of individual test cases
# or other test suites that will be used to build the suite initially" # or other test suites that will be used to build the suite initially"
# #
# TestSuite should deal with empty tests iterables by allowing the # TestSuite should deal with empty tests iterables by allowing the
# creation of an empty suite # creation of an empty suite
def test_init__empty_tests(self): def test_init__empty_tests(self):
suite = unittest.TestSuite([]) suite = unittest.TestSuite([])
self.assertEqual(suite.countTestCases(), 0) self.assertEqual(suite.countTestCases(), 0)
# "class TestSuite([tests])" # "class TestSuite([tests])"
# ... # ...
# "If tests is given, it must be an iterable of individual test cases # "If tests is given, it must be an iterable of individual test cases
# or other test suites that will be used to build the suite initially" # or other test suites that will be used to build the suite initially"
# #
# TestSuite should allow any iterable to provide tests # TestSuite should allow any iterable to provide tests
def test_init__tests_from_any_iterable(self): def test_init__tests_from_any_iterable(self):
def tests(): def tests():
yield unittest.FunctionTestCase(lambda: None) yield unittest.FunctionTestCase(lambda: None)
yield unittest.FunctionTestCase(lambda: None) yield unittest.FunctionTestCase(lambda: None)
suite_1 = unittest.TestSuite(tests()) suite_1 = unittest.TestSuite(tests())
self.assertEqual(suite_1.countTestCases(), 2) self.assertEqual(suite_1.countTestCases(), 2)
suite_2 = unittest.TestSuite(suite_1) suite_2 = unittest.TestSuite(suite_1)
self.assertEqual(suite_2.countTestCases(), 2) self.assertEqual(suite_2.countTestCases(), 2)
suite_3 = unittest.TestSuite(set(suite_1)) suite_3 = unittest.TestSuite(set(suite_1))
self.assertEqual(suite_3.countTestCases(), 2) self.assertEqual(suite_3.countTestCases(), 2)
# "class TestSuite([tests])" # "class TestSuite([tests])"
# ... # ...
# "If tests is given, it must be an iterable of individual test cases # "If tests is given, it must be an iterable of individual test cases
...@@ -1397,10 +1397,10 @@ class Test_TestSuite(TestCase, TestEquality): ...@@ -1397,10 +1397,10 @@ class Test_TestSuite(TestCase, TestEquality):
ftc = unittest.FunctionTestCase(lambda: None) ftc = unittest.FunctionTestCase(lambda: None)
yield unittest.TestSuite([ftc]) yield unittest.TestSuite([ftc])
yield unittest.FunctionTestCase(lambda: None) yield unittest.FunctionTestCase(lambda: None)
suite = unittest.TestSuite(tests()) suite = unittest.TestSuite(tests())
self.assertEqual(suite.countTestCases(), 2) self.assertEqual(suite.countTestCases(), 2)
################################################################ ################################################################
### /Tests for TestSuite.__init__ ### /Tests for TestSuite.__init__
...@@ -1409,19 +1409,19 @@ class Test_TestSuite(TestCase, TestEquality): ...@@ -1409,19 +1409,19 @@ class Test_TestSuite(TestCase, TestEquality):
test1 = unittest.FunctionTestCase(lambda: None) test1 = unittest.FunctionTestCase(lambda: None)
test2 = unittest.FunctionTestCase(lambda: None) test2 = unittest.FunctionTestCase(lambda: None)
suite = unittest.TestSuite((test1, test2)) suite = unittest.TestSuite((test1, test2))
self.assertEqual(list(suite), [test1, test2]) self.assertEqual(list(suite), [test1, test2])
# "Return the number of tests represented by the this test object. # "Return the number of tests represented by the this test object.
# ...this method is also implemented by the TestSuite class, which can # ...this method is also implemented by the TestSuite class, which can
# return larger [greater than 1] values" # return larger [greater than 1] values"
# #
# Presumably an empty TestSuite returns 0? # Presumably an empty TestSuite returns 0?
def test_countTestCases_zero_simple(self): def test_countTestCases_zero_simple(self):
suite = unittest.TestSuite() suite = unittest.TestSuite()
self.assertEqual(suite.countTestCases(), 0) self.assertEqual(suite.countTestCases(), 0)
# "Return the number of tests represented by the this test object. # "Return the number of tests represented by the this test object.
# ...this method is also implemented by the TestSuite class, which can # ...this method is also implemented by the TestSuite class, which can
# return larger [greater than 1] values" # return larger [greater than 1] values"
...@@ -1434,9 +1434,9 @@ class Test_TestSuite(TestCase, TestEquality): ...@@ -1434,9 +1434,9 @@ class Test_TestSuite(TestCase, TestEquality):
pass pass
suite = unittest.TestSuite([unittest.TestSuite()]) suite = unittest.TestSuite([unittest.TestSuite()])
self.assertEqual(suite.countTestCases(), 0) self.assertEqual(suite.countTestCases(), 0)
# "Return the number of tests represented by the this test object. # "Return the number of tests represented by the this test object.
# ...this method is also implemented by the TestSuite class, which can # ...this method is also implemented by the TestSuite class, which can
# return larger [greater than 1] values" # return larger [greater than 1] values"
...@@ -1444,9 +1444,9 @@ class Test_TestSuite(TestCase, TestEquality): ...@@ -1444,9 +1444,9 @@ class Test_TestSuite(TestCase, TestEquality):
test1 = unittest.FunctionTestCase(lambda: None) test1 = unittest.FunctionTestCase(lambda: None)
test2 = unittest.FunctionTestCase(lambda: None) test2 = unittest.FunctionTestCase(lambda: None)
suite = unittest.TestSuite((test1, test2)) suite = unittest.TestSuite((test1, test2))
self.assertEqual(suite.countTestCases(), 2) self.assertEqual(suite.countTestCases(), 2)
# "Return the number of tests represented by the this test object. # "Return the number of tests represented by the this test object.
# ...this method is also implemented by the TestSuite class, which can # ...this method is also implemented by the TestSuite class, which can
# return larger [greater than 1] values" # return larger [greater than 1] values"
...@@ -1456,14 +1456,14 @@ class Test_TestSuite(TestCase, TestEquality): ...@@ -1456,14 +1456,14 @@ class Test_TestSuite(TestCase, TestEquality):
class Test1(unittest.TestCase): class Test1(unittest.TestCase):
def test1(self): pass def test1(self): pass
def test2(self): pass def test2(self): pass
test2 = unittest.FunctionTestCase(lambda: None) test2 = unittest.FunctionTestCase(lambda: None)
test3 = unittest.FunctionTestCase(lambda: None) test3 = unittest.FunctionTestCase(lambda: None)
child = unittest.TestSuite((Test1('test2'), test2)) child = unittest.TestSuite((Test1('test2'), test2))
parent = unittest.TestSuite((test3, child, Test1('test1'))) parent = unittest.TestSuite((test3, child, Test1('test1')))
self.assertEqual(parent.countTestCases(), 4) self.assertEqual(parent.countTestCases(), 4)
# "Run the tests associated with this suite, collecting the result into # "Run the tests associated with this suite, collecting the result into
# the test result object passed as result." # the test result object passed as result."
# #
...@@ -1471,109 +1471,109 @@ class Test_TestSuite(TestCase, TestEquality): ...@@ -1471,109 +1471,109 @@ class Test_TestSuite(TestCase, TestEquality):
def test_run__empty_suite(self): def test_run__empty_suite(self):
events = [] events = []
result = LoggingResult(events) result = LoggingResult(events)
suite = unittest.TestSuite() suite = unittest.TestSuite()
suite.run(result) suite.run(result)
self.assertEqual(events, []) self.assertEqual(events, [])
# "Note that unlike TestCase.run(), TestSuite.run() requires the # "Note that unlike TestCase.run(), TestSuite.run() requires the
# "result object to be passed in." # "result object to be passed in."
def test_run__requires_result(self): def test_run__requires_result(self):
suite = unittest.TestSuite() suite = unittest.TestSuite()
try: try:
suite.run() suite.run()
except TypeError: except TypeError:
pass pass
else: else:
self.fail("Failed to raise TypeError") self.fail("Failed to raise TypeError")
# "Run the tests associated with this suite, collecting the result into # "Run the tests associated with this suite, collecting the result into
# the test result object passed as result." # the test result object passed as result."
def test_run(self): def test_run(self):
events = [] events = []
result = LoggingResult(events) result = LoggingResult(events)
class LoggingCase(unittest.TestCase): class LoggingCase(unittest.TestCase):
def run(self, result): def run(self, result):
events.append('run %s' % self._testMethodName) events.append('run %s' % self._testMethodName)
def test1(self): pass def test1(self): pass
def test2(self): pass def test2(self): pass
tests = [LoggingCase('test1'), LoggingCase('test2')] tests = [LoggingCase('test1'), LoggingCase('test2')]
unittest.TestSuite(tests).run(result) unittest.TestSuite(tests).run(result)
self.assertEqual(events, ['run test1', 'run test2']) self.assertEqual(events, ['run test1', 'run test2'])
# "Add a TestCase ... to the suite" # "Add a TestCase ... to the suite"
def test_addTest__TestCase(self): def test_addTest__TestCase(self):
class Foo(unittest.TestCase): class Foo(unittest.TestCase):
def test(self): pass def test(self): pass
test = Foo('test') test = Foo('test')
suite = unittest.TestSuite() suite = unittest.TestSuite()
suite.addTest(test) suite.addTest(test)
self.assertEqual(suite.countTestCases(), 1) self.assertEqual(suite.countTestCases(), 1)
self.assertEqual(list(suite), [test]) self.assertEqual(list(suite), [test])
# "Add a ... TestSuite to the suite" # "Add a ... TestSuite to the suite"
def test_addTest__TestSuite(self): def test_addTest__TestSuite(self):
class Foo(unittest.TestCase): class Foo(unittest.TestCase):
def test(self): pass def test(self): pass
suite_2 = unittest.TestSuite([Foo('test')]) suite_2 = unittest.TestSuite([Foo('test')])
suite = unittest.TestSuite() suite = unittest.TestSuite()
suite.addTest(suite_2) suite.addTest(suite_2)
self.assertEqual(suite.countTestCases(), 1) self.assertEqual(suite.countTestCases(), 1)
self.assertEqual(list(suite), [suite_2]) self.assertEqual(list(suite), [suite_2])
# "Add all the tests from an iterable of TestCase and TestSuite # "Add all the tests from an iterable of TestCase and TestSuite
# instances to this test suite." # instances to this test suite."
# #
# "This is equivalent to iterating over tests, calling addTest() for # "This is equivalent to iterating over tests, calling addTest() for
# each element" # each element"
def test_addTests(self): def test_addTests(self):
class Foo(unittest.TestCase): class Foo(unittest.TestCase):
def test_1(self): pass def test_1(self): pass
def test_2(self): pass def test_2(self): pass
test_1 = Foo('test_1') test_1 = Foo('test_1')
test_2 = Foo('test_2') test_2 = Foo('test_2')
inner_suite = unittest.TestSuite([test_2]) inner_suite = unittest.TestSuite([test_2])
def gen(): def gen():
yield test_1 yield test_1
yield test_2 yield test_2
yield inner_suite yield inner_suite
suite_1 = unittest.TestSuite() suite_1 = unittest.TestSuite()
suite_1.addTests(gen()) suite_1.addTests(gen())
self.assertEqual(list(suite_1), list(gen())) self.assertEqual(list(suite_1), list(gen()))
# "This is equivalent to iterating over tests, calling addTest() for # "This is equivalent to iterating over tests, calling addTest() for
# each element" # each element"
suite_2 = unittest.TestSuite() suite_2 = unittest.TestSuite()
for t in gen(): for t in gen():
suite_2.addTest(t) suite_2.addTest(t)
self.assertEqual(suite_1, suite_2) self.assertEqual(suite_1, suite_2)
# "Add all the tests from an iterable of TestCase and TestSuite # "Add all the tests from an iterable of TestCase and TestSuite
# instances to this test suite." # instances to this test suite."
# #
# What happens if it doesn't get an iterable? # What happens if it doesn't get an iterable?
def test_addTest__noniterable(self): def test_addTest__noniterable(self):
suite = unittest.TestSuite() suite = unittest.TestSuite()
try: try:
suite.addTests(5) suite.addTests(5)
except TypeError: except TypeError:
...@@ -1593,17 +1593,17 @@ class Test_TestSuite(TestCase, TestEquality): ...@@ -1593,17 +1593,17 @@ class Test_TestSuite(TestCase, TestEquality):
def test_addTests__string(self): def test_addTests__string(self):
suite = unittest.TestSuite() suite = unittest.TestSuite()
self.assertRaises(TypeError, suite.addTests, "foo") self.assertRaises(TypeError, suite.addTests, "foo")
class Test_FunctionTestCase(TestCase): class Test_FunctionTestCase(TestCase):
# "Return the number of tests represented by the this test object. For # "Return the number of tests represented by the this test object. For
# TestCase instances, this will always be 1" # TestCase instances, this will always be 1"
def test_countTestCases(self): def test_countTestCases(self):
test = unittest.FunctionTestCase(lambda: None) test = unittest.FunctionTestCase(lambda: None)
self.assertEqual(test.countTestCases(), 1) self.assertEqual(test.countTestCases(), 1)
# "When a setUp() method is defined, the test runner will run that method # "When a setUp() method is defined, the test runner will run that method
# prior to each test. Likewise, if a tearDown() method is defined, the # prior to each test. Likewise, if a tearDown() method is defined, the
# test runner will invoke that method after each test. In the example, # test runner will invoke that method after each test. In the example,
...@@ -1614,7 +1614,7 @@ class Test_FunctionTestCase(TestCase): ...@@ -1614,7 +1614,7 @@ class Test_FunctionTestCase(TestCase):
def test_run_call_order__error_in_setUp(self): def test_run_call_order__error_in_setUp(self):
events = [] events = []
result = LoggingResult(events) result = LoggingResult(events)
def setUp(): def setUp():
events.append('setUp') events.append('setUp')
raise RuntimeError('raised by setUp') raise RuntimeError('raised by setUp')
...@@ -1624,11 +1624,11 @@ class Test_FunctionTestCase(TestCase): ...@@ -1624,11 +1624,11 @@ class Test_FunctionTestCase(TestCase):
def tearDown(): def tearDown():
events.append('tearDown') events.append('tearDown')
expected = ['startTest', 'setUp', 'addError', 'stopTest'] expected = ['startTest', 'setUp', 'addError', 'stopTest']
unittest.FunctionTestCase(test, setUp, tearDown).run(result) unittest.FunctionTestCase(test, setUp, tearDown).run(result)
self.assertEqual(events, expected) self.assertEqual(events, expected)
# "When a setUp() method is defined, the test runner will run that method # "When a setUp() method is defined, the test runner will run that method
# prior to each test. Likewise, if a tearDown() method is defined, the # prior to each test. Likewise, if a tearDown() method is defined, the
# test runner will invoke that method after each test. In the example, # test runner will invoke that method after each test. In the example,
...@@ -1639,7 +1639,7 @@ class Test_FunctionTestCase(TestCase): ...@@ -1639,7 +1639,7 @@ class Test_FunctionTestCase(TestCase):
def test_run_call_order__error_in_test(self): def test_run_call_order__error_in_test(self):
events = [] events = []
result = LoggingResult(events) result = LoggingResult(events)
def setUp(): def setUp():
events.append('setUp') events.append('setUp')
...@@ -1649,12 +1649,12 @@ class Test_FunctionTestCase(TestCase): ...@@ -1649,12 +1649,12 @@ class Test_FunctionTestCase(TestCase):
def tearDown(): def tearDown():
events.append('tearDown') events.append('tearDown')
expected = ['startTest', 'setUp', 'test', 'addError', 'tearDown', expected = ['startTest', 'setUp', 'test', 'addError', 'tearDown',
'stopTest'] 'stopTest']
unittest.FunctionTestCase(test, setUp, tearDown).run(result) unittest.FunctionTestCase(test, setUp, tearDown).run(result)
self.assertEqual(events, expected) self.assertEqual(events, expected)
# "When a setUp() method is defined, the test runner will run that method # "When a setUp() method is defined, the test runner will run that method
# prior to each test. Likewise, if a tearDown() method is defined, the # prior to each test. Likewise, if a tearDown() method is defined, the
# test runner will invoke that method after each test. In the example, # test runner will invoke that method after each test. In the example,
...@@ -1665,7 +1665,7 @@ class Test_FunctionTestCase(TestCase): ...@@ -1665,7 +1665,7 @@ class Test_FunctionTestCase(TestCase):
def test_run_call_order__failure_in_test(self): def test_run_call_order__failure_in_test(self):
events = [] events = []
result = LoggingResult(events) result = LoggingResult(events)
def setUp(): def setUp():
events.append('setUp') events.append('setUp')
...@@ -1675,12 +1675,12 @@ class Test_FunctionTestCase(TestCase): ...@@ -1675,12 +1675,12 @@ class Test_FunctionTestCase(TestCase):
def tearDown(): def tearDown():
events.append('tearDown') events.append('tearDown')
expected = ['startTest', 'setUp', 'test', 'addFailure', 'tearDown', expected = ['startTest', 'setUp', 'test', 'addFailure', 'tearDown',
'stopTest'] 'stopTest']
unittest.FunctionTestCase(test, setUp, tearDown).run(result) unittest.FunctionTestCase(test, setUp, tearDown).run(result)
self.assertEqual(events, expected) self.assertEqual(events, expected)
# "When a setUp() method is defined, the test runner will run that method # "When a setUp() method is defined, the test runner will run that method
# prior to each test. Likewise, if a tearDown() method is defined, the # prior to each test. Likewise, if a tearDown() method is defined, the
# test runner will invoke that method after each test. In the example, # test runner will invoke that method after each test. In the example,
...@@ -1691,7 +1691,7 @@ class Test_FunctionTestCase(TestCase): ...@@ -1691,7 +1691,7 @@ class Test_FunctionTestCase(TestCase):
def test_run_call_order__error_in_tearDown(self): def test_run_call_order__error_in_tearDown(self):
events = [] events = []
result = LoggingResult(events) result = LoggingResult(events)
def setUp(): def setUp():
events.append('setUp') events.append('setUp')
...@@ -1701,12 +1701,12 @@ class Test_FunctionTestCase(TestCase): ...@@ -1701,12 +1701,12 @@ class Test_FunctionTestCase(TestCase):
def tearDown(): def tearDown():
events.append('tearDown') events.append('tearDown')
raise RuntimeError('raised by tearDown') raise RuntimeError('raised by tearDown')
expected = ['startTest', 'setUp', 'test', 'tearDown', 'addError', expected = ['startTest', 'setUp', 'test', 'tearDown', 'addError',
'stopTest'] 'stopTest']
unittest.FunctionTestCase(test, setUp, tearDown).run(result) unittest.FunctionTestCase(test, setUp, tearDown).run(result)
self.assertEqual(events, expected) self.assertEqual(events, expected)
# "Return a string identifying the specific test case." # "Return a string identifying the specific test case."
# #
# Because of the vague nature of the docs, I'm not going to lock this # Because of the vague nature of the docs, I'm not going to lock this
...@@ -1715,26 +1715,26 @@ class Test_FunctionTestCase(TestCase): ...@@ -1715,26 +1715,26 @@ class Test_FunctionTestCase(TestCase):
# just say "string") # just say "string")
def test_id(self): def test_id(self):
test = unittest.FunctionTestCase(lambda: None) test = unittest.FunctionTestCase(lambda: None)
self.failUnless(isinstance(test.id(), basestring)) self.failUnless(isinstance(test.id(), basestring))
# "Returns a one-line description of the test, or None if no description # "Returns a one-line description of the test, or None if no description
# has been provided. The default implementation of this method returns # has been provided. The default implementation of this method returns
# the first line of the test method's docstring, if available, or None." # the first line of the test method's docstring, if available, or None."
def test_shortDescription__no_docstring(self): def test_shortDescription__no_docstring(self):
test = unittest.FunctionTestCase(lambda: None) test = unittest.FunctionTestCase(lambda: None)
self.assertEqual(test.shortDescription(), None) self.assertEqual(test.shortDescription(), None)
# "Returns a one-line description of the test, or None if no description # "Returns a one-line description of the test, or None if no description
# has been provided. The default implementation of this method returns # has been provided. The default implementation of this method returns
# the first line of the test method's docstring, if available, or None." # the first line of the test method's docstring, if available, or None."
def test_shortDescription__singleline_docstring(self): def test_shortDescription__singleline_docstring(self):
desc = "this tests foo" desc = "this tests foo"
test = unittest.FunctionTestCase(lambda: None, description=desc) test = unittest.FunctionTestCase(lambda: None, description=desc)
self.assertEqual(test.shortDescription(), "this tests foo") self.assertEqual(test.shortDescription(), "this tests foo")
class Test_TestResult(TestCase): class Test_TestResult(TestCase):
# Note: there are not separate tests for TestResult.wasSuccessful(), # Note: there are not separate tests for TestResult.wasSuccessful(),
# TestResult.errors, TestResult.failures, TestResult.testsRun or # TestResult.errors, TestResult.failures, TestResult.testsRun or
...@@ -1744,75 +1744,75 @@ class Test_TestResult(TestCase): ...@@ -1744,75 +1744,75 @@ class Test_TestResult(TestCase):
# Accordingly, tests for the aforenamed attributes are incorporated # Accordingly, tests for the aforenamed attributes are incorporated
# in with the tests for the defining methods. # in with the tests for the defining methods.
################################################################ ################################################################
def test_init(self): def test_init(self):
result = unittest.TestResult() result = unittest.TestResult()
self.failUnless(result.wasSuccessful()) self.failUnless(result.wasSuccessful())
self.assertEqual(len(result.errors), 0) self.assertEqual(len(result.errors), 0)
self.assertEqual(len(result.failures), 0) self.assertEqual(len(result.failures), 0)
self.assertEqual(result.testsRun, 0) self.assertEqual(result.testsRun, 0)
self.assertEqual(result.shouldStop, False) self.assertEqual(result.shouldStop, False)
# "This method can be called to signal that the set of tests being # "This method can be called to signal that the set of tests being
# run should be aborted by setting the TestResult's shouldStop # run should be aborted by setting the TestResult's shouldStop
# attribute to True." # attribute to True."
def test_stop(self): def test_stop(self):
result = unittest.TestResult() result = unittest.TestResult()
result.stop() result.stop()
self.assertEqual(result.shouldStop, True) self.assertEqual(result.shouldStop, True)
# "Called when the test case test is about to be run. The default # "Called when the test case test is about to be run. The default
# implementation simply increments the instance's testsRun counter." # implementation simply increments the instance's testsRun counter."
def test_startTest(self): def test_startTest(self):
class Foo(unittest.TestCase): class Foo(unittest.TestCase):
def test_1(self): def test_1(self):
pass pass
test = Foo('test_1') test = Foo('test_1')
result = unittest.TestResult() result = unittest.TestResult()
result.startTest(test) result.startTest(test)
self.failUnless(result.wasSuccessful()) self.failUnless(result.wasSuccessful())
self.assertEqual(len(result.errors), 0) self.assertEqual(len(result.errors), 0)
self.assertEqual(len(result.failures), 0) self.assertEqual(len(result.failures), 0)
self.assertEqual(result.testsRun, 1) self.assertEqual(result.testsRun, 1)
self.assertEqual(result.shouldStop, False) self.assertEqual(result.shouldStop, False)
result.stopTest(test) result.stopTest(test)
# "Called after the test case test has been executed, regardless of # "Called after the test case test has been executed, regardless of
# the outcome. The default implementation does nothing." # the outcome. The default implementation does nothing."
def test_stopTest(self): def test_stopTest(self):
class Foo(unittest.TestCase): class Foo(unittest.TestCase):
def test_1(self): def test_1(self):
pass pass
test = Foo('test_1') test = Foo('test_1')
result = unittest.TestResult() result = unittest.TestResult()
result.startTest(test) result.startTest(test)
self.failUnless(result.wasSuccessful()) self.failUnless(result.wasSuccessful())
self.assertEqual(len(result.errors), 0) self.assertEqual(len(result.errors), 0)
self.assertEqual(len(result.failures), 0) self.assertEqual(len(result.failures), 0)
self.assertEqual(result.testsRun, 1) self.assertEqual(result.testsRun, 1)
self.assertEqual(result.shouldStop, False) self.assertEqual(result.shouldStop, False)
result.stopTest(test) result.stopTest(test)
# Same tests as above; make sure nothing has changed # Same tests as above; make sure nothing has changed
self.failUnless(result.wasSuccessful()) self.failUnless(result.wasSuccessful())
self.assertEqual(len(result.errors), 0) self.assertEqual(len(result.errors), 0)
self.assertEqual(len(result.failures), 0) self.assertEqual(len(result.failures), 0)
self.assertEqual(result.testsRun, 1) self.assertEqual(result.testsRun, 1)
self.assertEqual(result.shouldStop, False) self.assertEqual(result.shouldStop, False)
# "addSuccess(test)" # "addSuccess(test)"
# ... # ...
# "Called when the test case test succeeds" # "Called when the test case test succeeds"
...@@ -1836,21 +1836,21 @@ class Test_TestResult(TestCase): ...@@ -1836,21 +1836,21 @@ class Test_TestResult(TestCase):
class Foo(unittest.TestCase): class Foo(unittest.TestCase):
def test_1(self): def test_1(self):
pass pass
test = Foo('test_1') test = Foo('test_1')
result = unittest.TestResult() result = unittest.TestResult()
result.startTest(test) result.startTest(test)
result.addSuccess(test) result.addSuccess(test)
result.stopTest(test) result.stopTest(test)
self.failUnless(result.wasSuccessful()) self.failUnless(result.wasSuccessful())
self.assertEqual(len(result.errors), 0) self.assertEqual(len(result.errors), 0)
self.assertEqual(len(result.failures), 0) self.assertEqual(len(result.failures), 0)
self.assertEqual(result.testsRun, 1) self.assertEqual(result.testsRun, 1)
self.assertEqual(result.shouldStop, False) self.assertEqual(result.shouldStop, False)
# "addFailure(test, err)" # "addFailure(test, err)"
# ... # ...
# "Called when the test case test signals a failure. err is a tuple of # "Called when the test case test signals a failure. err is a tuple of
...@@ -1873,33 +1873,33 @@ class Test_TestResult(TestCase): ...@@ -1873,33 +1873,33 @@ class Test_TestResult(TestCase):
# of sys.exc_info() results." # of sys.exc_info() results."
def test_addFailure(self): def test_addFailure(self):
import sys import sys
class Foo(unittest.TestCase): class Foo(unittest.TestCase):
def test_1(self): def test_1(self):
pass pass
test = Foo('test_1') test = Foo('test_1')
try: try:
test.fail("foo") test.fail("foo")
except: except:
exc_info_tuple = sys.exc_info() exc_info_tuple = sys.exc_info()
result = unittest.TestResult() result = unittest.TestResult()
result.startTest(test) result.startTest(test)
result.addFailure(test, exc_info_tuple) result.addFailure(test, exc_info_tuple)
result.stopTest(test) result.stopTest(test)
self.failIf(result.wasSuccessful()) self.failIf(result.wasSuccessful())
self.assertEqual(len(result.errors), 0) self.assertEqual(len(result.errors), 0)
self.assertEqual(len(result.failures), 1) self.assertEqual(len(result.failures), 1)
self.assertEqual(result.testsRun, 1) self.assertEqual(result.testsRun, 1)
self.assertEqual(result.shouldStop, False) self.assertEqual(result.shouldStop, False)
test_case, formatted_exc = result.failures[0] test_case, formatted_exc = result.failures[0]
self.failUnless(test_case is test) self.failUnless(test_case is test)
self.failUnless(isinstance(formatted_exc, str)) self.failUnless(isinstance(formatted_exc, str))
# "addError(test, err)" # "addError(test, err)"
# ... # ...
# "Called when the test case test raises an unexpected exception err # "Called when the test case test raises an unexpected exception err
...@@ -1923,29 +1923,29 @@ class Test_TestResult(TestCase): ...@@ -1923,29 +1923,29 @@ class Test_TestResult(TestCase):
# of sys.exc_info() results." # of sys.exc_info() results."
def test_addError(self): def test_addError(self):
import sys import sys
class Foo(unittest.TestCase): class Foo(unittest.TestCase):
def test_1(self): def test_1(self):
pass pass
test = Foo('test_1') test = Foo('test_1')
try: try:
raise TypeError() raise TypeError()
except: except:
exc_info_tuple = sys.exc_info() exc_info_tuple = sys.exc_info()
result = unittest.TestResult() result = unittest.TestResult()
result.startTest(test) result.startTest(test)
result.addError(test, exc_info_tuple) result.addError(test, exc_info_tuple)
result.stopTest(test) result.stopTest(test)
self.failIf(result.wasSuccessful()) self.failIf(result.wasSuccessful())
self.assertEqual(len(result.errors), 1) self.assertEqual(len(result.errors), 1)
self.assertEqual(len(result.failures), 0) self.assertEqual(len(result.failures), 0)
self.assertEqual(result.testsRun, 1) self.assertEqual(result.testsRun, 1)
self.assertEqual(result.shouldStop, False) self.assertEqual(result.shouldStop, False)
test_case, formatted_exc = result.errors[0] test_case, formatted_exc = result.errors[0]
self.failUnless(test_case is test) self.failUnless(test_case is test)
self.failUnless(isinstance(formatted_exc, str)) self.failUnless(isinstance(formatted_exc, str))
...@@ -1956,10 +1956,10 @@ class Test_TestResult(TestCase): ...@@ -1956,10 +1956,10 @@ class Test_TestResult(TestCase):
class Foo(unittest.TestCase): class Foo(unittest.TestCase):
def runTest(self): pass def runTest(self): pass
def test1(self): pass def test1(self): pass
class Bar(Foo): class Bar(Foo):
def test2(self): pass def test2(self): pass
################################################################ ################################################################
### /Support code for Test_TestCase ### /Support code for Test_TestCase
...@@ -1970,15 +1970,15 @@ class Test_TestCase(TestCase, TestEquality, TestHashing): ...@@ -1970,15 +1970,15 @@ class Test_TestCase(TestCase, TestEquality, TestHashing):
# Used by TestHashing.test_hash and TestEquality.test_eq # Used by TestHashing.test_hash and TestEquality.test_eq
eq_pairs = [(Foo('test1'), Foo('test1'))] eq_pairs = [(Foo('test1'), Foo('test1'))]
# Used by TestEquality.test_ne # Used by TestEquality.test_ne
ne_pairs = [(Foo('test1'), Foo('runTest')) ne_pairs = [(Foo('test1'), Foo('runTest'))
,(Foo('test1'), Bar('test1')) ,(Foo('test1'), Bar('test1'))
,(Foo('test1'), Bar('test2'))] ,(Foo('test1'), Bar('test2'))]
################################################################ ################################################################
### /Set up attributes used by inherited tests ### /Set up attributes used by inherited tests
# "class TestCase([methodName])" # "class TestCase([methodName])"
# ... # ...
...@@ -1993,44 +1993,44 @@ class Test_TestCase(TestCase, TestEquality, TestHashing): ...@@ -1993,44 +1993,44 @@ class Test_TestCase(TestCase, TestEquality, TestHashing):
class Test(unittest.TestCase): class Test(unittest.TestCase):
def runTest(self): raise MyException() def runTest(self): raise MyException()
def test(self): pass def test(self): pass
self.assertEqual(Test().id()[-13:], '.Test.runTest') self.assertEqual(Test().id()[-13:], '.Test.runTest')
# "class TestCase([methodName])" # "class TestCase([methodName])"
# ... # ...
# "Each instance of TestCase will run a single test method: the # "Each instance of TestCase will run a single test method: the
# method named methodName." # method named methodName."
def test_init__test_name__valid(self): def test_init__test_name__valid(self):
class Test(unittest.TestCase): class Test(unittest.TestCase):
def runTest(self): raise MyException() def runTest(self): raise MyException()
def test(self): pass def test(self): pass
self.assertEqual(Test('test').id()[-10:], '.Test.test') self.assertEqual(Test('test').id()[-10:], '.Test.test')
# "class TestCase([methodName])" # "class TestCase([methodName])"
# ... # ...
# "Each instance of TestCase will run a single test method: the # "Each instance of TestCase will run a single test method: the
# method named methodName." # method named methodName."
def test_init__test_name__invalid(self): def test_init__test_name__invalid(self):
class Test(unittest.TestCase): class Test(unittest.TestCase):
def runTest(self): raise MyException() def runTest(self): raise MyException()
def test(self): pass def test(self): pass
try: try:
Test('testfoo') Test('testfoo')
except ValueError: except ValueError:
pass pass
else: else:
self.fail("Failed to raise ValueError") self.fail("Failed to raise ValueError")
# "Return the number of tests represented by the this test object. For # "Return the number of tests represented by the this test object. For
# TestCase instances, this will always be 1" # TestCase instances, this will always be 1"
def test_countTestCases(self): def test_countTestCases(self):
class Foo(unittest.TestCase): class Foo(unittest.TestCase):
def test(self): pass def test(self): pass
self.assertEqual(Foo('test').countTestCases(), 1) self.assertEqual(Foo('test').countTestCases(), 1)
# "Return the default type of test result object to be used to run this # "Return the default type of test result object to be used to run this
# test. For TestCase instances, this will always be # test. For TestCase instances, this will always be
# unittest.TestResult; subclasses of TestCase should # unittest.TestResult; subclasses of TestCase should
...@@ -2039,7 +2039,7 @@ class Test_TestCase(TestCase, TestEquality, TestHashing): ...@@ -2039,7 +2039,7 @@ class Test_TestCase(TestCase, TestEquality, TestHashing):
class Foo(unittest.TestCase): class Foo(unittest.TestCase):
def runTest(self): def runTest(self):
pass pass
result = Foo().defaultTestResult() result = Foo().defaultTestResult()
self.assertEqual(type(result), unittest.TestResult) self.assertEqual(type(result), unittest.TestResult)
...@@ -2053,22 +2053,22 @@ class Test_TestCase(TestCase, TestEquality, TestHashing): ...@@ -2053,22 +2053,22 @@ class Test_TestCase(TestCase, TestEquality, TestHashing):
def test_run_call_order__error_in_setUp(self): def test_run_call_order__error_in_setUp(self):
events = [] events = []
result = LoggingResult(events) result = LoggingResult(events)
class Foo(unittest.TestCase): class Foo(unittest.TestCase):
def setUp(self): def setUp(self):
events.append('setUp') events.append('setUp')
raise RuntimeError('raised by Foo.setUp') raise RuntimeError('raised by Foo.setUp')
def test(self): def test(self):
events.append('test') events.append('test')
def tearDown(self): def tearDown(self):
events.append('tearDown') events.append('tearDown')
Foo('test').run(result) Foo('test').run(result)
expected = ['startTest', 'setUp', 'addError', 'stopTest'] expected = ['startTest', 'setUp', 'addError', 'stopTest']
self.assertEqual(events, expected) self.assertEqual(events, expected)
# "When a setUp() method is defined, the test runner will run that method # "When a setUp() method is defined, the test runner will run that method
# prior to each test. Likewise, if a tearDown() method is defined, the # prior to each test. Likewise, if a tearDown() method is defined, the
# test runner will invoke that method after each test. In the example, # test runner will invoke that method after each test. In the example,
...@@ -2079,23 +2079,23 @@ class Test_TestCase(TestCase, TestEquality, TestHashing): ...@@ -2079,23 +2079,23 @@ class Test_TestCase(TestCase, TestEquality, TestHashing):
def test_run_call_order__error_in_test(self): def test_run_call_order__error_in_test(self):
events = [] events = []
result = LoggingResult(events) result = LoggingResult(events)
class Foo(unittest.TestCase): class Foo(unittest.TestCase):
def setUp(self): def setUp(self):
events.append('setUp') events.append('setUp')
def test(self): def test(self):
events.append('test') events.append('test')
raise RuntimeError('raised by Foo.test') raise RuntimeError('raised by Foo.test')
def tearDown(self): def tearDown(self):
events.append('tearDown') events.append('tearDown')
expected = ['startTest', 'setUp', 'test', 'addError', 'tearDown', expected = ['startTest', 'setUp', 'test', 'addError', 'tearDown',
'stopTest'] 'stopTest']
Foo('test').run(result) Foo('test').run(result)
self.assertEqual(events, expected) self.assertEqual(events, expected)
# "When a setUp() method is defined, the test runner will run that method # "When a setUp() method is defined, the test runner will run that method
# prior to each test. Likewise, if a tearDown() method is defined, the # prior to each test. Likewise, if a tearDown() method is defined, the
# test runner will invoke that method after each test. In the example, # test runner will invoke that method after each test. In the example,
...@@ -2106,23 +2106,23 @@ class Test_TestCase(TestCase, TestEquality, TestHashing): ...@@ -2106,23 +2106,23 @@ class Test_TestCase(TestCase, TestEquality, TestHashing):
def test_run_call_order__failure_in_test(self): def test_run_call_order__failure_in_test(self):
events = [] events = []
result = LoggingResult(events) result = LoggingResult(events)
class Foo(unittest.TestCase): class Foo(unittest.TestCase):
def setUp(self): def setUp(self):
events.append('setUp') events.append('setUp')
def test(self): def test(self):
events.append('test') events.append('test')
self.fail('raised by Foo.test') self.fail('raised by Foo.test')
def tearDown(self): def tearDown(self):
events.append('tearDown') events.append('tearDown')
expected = ['startTest', 'setUp', 'test', 'addFailure', 'tearDown', expected = ['startTest', 'setUp', 'test', 'addFailure', 'tearDown',
'stopTest'] 'stopTest']
Foo('test').run(result) Foo('test').run(result)
self.assertEqual(events, expected) self.assertEqual(events, expected)
# "When a setUp() method is defined, the test runner will run that method # "When a setUp() method is defined, the test runner will run that method
# prior to each test. Likewise, if a tearDown() method is defined, the # prior to each test. Likewise, if a tearDown() method is defined, the
# test runner will invoke that method after each test. In the example, # test runner will invoke that method after each test. In the example,
...@@ -2133,23 +2133,23 @@ class Test_TestCase(TestCase, TestEquality, TestHashing): ...@@ -2133,23 +2133,23 @@ class Test_TestCase(TestCase, TestEquality, TestHashing):
def test_run_call_order__error_in_tearDown(self): def test_run_call_order__error_in_tearDown(self):
events = [] events = []
result = LoggingResult(events) result = LoggingResult(events)
class Foo(unittest.TestCase): class Foo(unittest.TestCase):
def setUp(self): def setUp(self):
events.append('setUp') events.append('setUp')
def test(self): def test(self):
events.append('test') events.append('test')
def tearDown(self): def tearDown(self):
events.append('tearDown') events.append('tearDown')
raise RuntimeError('raised by Foo.tearDown') raise RuntimeError('raised by Foo.tearDown')
Foo('test').run(result) Foo('test').run(result)
expected = ['startTest', 'setUp', 'test', 'tearDown', 'addError', expected = ['startTest', 'setUp', 'test', 'tearDown', 'addError',
'stopTest'] 'stopTest']
self.assertEqual(events, expected) self.assertEqual(events, expected)
# "This class attribute gives the exception raised by the test() method. # "This class attribute gives the exception raised by the test() method.
# If a test framework needs to use a specialized exception, possibly to # If a test framework needs to use a specialized exception, possibly to
# carry additional information, it must subclass this exception in # carry additional information, it must subclass this exception in
...@@ -2159,9 +2159,9 @@ class Test_TestCase(TestCase, TestEquality, TestHashing): ...@@ -2159,9 +2159,9 @@ class Test_TestCase(TestCase, TestEquality, TestHashing):
class Foo(unittest.TestCase): class Foo(unittest.TestCase):
def test(self): def test(self):
pass pass
self.failUnless(Foo('test').failureException is AssertionError) self.failUnless(Foo('test').failureException is AssertionError)
# "This class attribute gives the exception raised by the test() method. # "This class attribute gives the exception raised by the test() method.
# If a test framework needs to use a specialized exception, possibly to # If a test framework needs to use a specialized exception, possibly to
# carry additional information, it must subclass this exception in # carry additional information, it must subclass this exception in
...@@ -2171,20 +2171,20 @@ class Test_TestCase(TestCase, TestEquality, TestHashing): ...@@ -2171,20 +2171,20 @@ class Test_TestCase(TestCase, TestEquality, TestHashing):
def test_failureException__subclassing__explicit_raise(self): def test_failureException__subclassing__explicit_raise(self):
events = [] events = []
result = LoggingResult(events) result = LoggingResult(events)
class Foo(unittest.TestCase): class Foo(unittest.TestCase):
def test(self): def test(self):
raise RuntimeError() raise RuntimeError()
failureException = RuntimeError failureException = RuntimeError
self.failUnless(Foo('test').failureException is RuntimeError) self.failUnless(Foo('test').failureException is RuntimeError)
Foo('test').run(result) Foo('test').run(result)
expected = ['startTest', 'addFailure', 'stopTest'] expected = ['startTest', 'addFailure', 'stopTest']
self.assertEqual(events, expected) self.assertEqual(events, expected)
# "This class attribute gives the exception raised by the test() method. # "This class attribute gives the exception raised by the test() method.
# If a test framework needs to use a specialized exception, possibly to # If a test framework needs to use a specialized exception, possibly to
# carry additional information, it must subclass this exception in # carry additional information, it must subclass this exception in
...@@ -2194,38 +2194,38 @@ class Test_TestCase(TestCase, TestEquality, TestHashing): ...@@ -2194,38 +2194,38 @@ class Test_TestCase(TestCase, TestEquality, TestHashing):
def test_failureException__subclassing__implicit_raise(self): def test_failureException__subclassing__implicit_raise(self):
events = [] events = []
result = LoggingResult(events) result = LoggingResult(events)
class Foo(unittest.TestCase): class Foo(unittest.TestCase):
def test(self): def test(self):
self.fail("foo") self.fail("foo")
failureException = RuntimeError failureException = RuntimeError
self.failUnless(Foo('test').failureException is RuntimeError) self.failUnless(Foo('test').failureException is RuntimeError)
Foo('test').run(result) Foo('test').run(result)
expected = ['startTest', 'addFailure', 'stopTest'] expected = ['startTest', 'addFailure', 'stopTest']
self.assertEqual(events, expected) self.assertEqual(events, expected)
# "The default implementation does nothing." # "The default implementation does nothing."
def test_setUp(self): def test_setUp(self):
class Foo(unittest.TestCase): class Foo(unittest.TestCase):
def runTest(self): def runTest(self):
pass pass
# ... and nothing should happen # ... and nothing should happen
Foo().setUp() Foo().setUp()
# "The default implementation does nothing." # "The default implementation does nothing."
def test_tearDown(self): def test_tearDown(self):
class Foo(unittest.TestCase): class Foo(unittest.TestCase):
def runTest(self): def runTest(self):
pass pass
# ... and nothing should happen # ... and nothing should happen
Foo().tearDown() Foo().tearDown()
# "Return a string identifying the specific test case." # "Return a string identifying the specific test case."
# #
# Because of the vague nature of the docs, I'm not going to lock this # Because of the vague nature of the docs, I'm not going to lock this
...@@ -2236,57 +2236,57 @@ class Test_TestCase(TestCase, TestEquality, TestHashing): ...@@ -2236,57 +2236,57 @@ class Test_TestCase(TestCase, TestEquality, TestHashing):
class Foo(unittest.TestCase): class Foo(unittest.TestCase):
def runTest(self): def runTest(self):
pass pass
self.failUnless(isinstance(Foo().id(), basestring)) self.failUnless(isinstance(Foo().id(), basestring))
# "Returns a one-line description of the test, or None if no description # "Returns a one-line description of the test, or None if no description
# has been provided. The default implementation of this method returns # has been provided. The default implementation of this method returns
# the first line of the test method's docstring, if available, or None." # the first line of the test method's docstring, if available, or None."
def test_shortDescription__no_docstring(self): def test_shortDescription__no_docstring(self):
class Foo(unittest.TestCase): class Foo(unittest.TestCase):
def runTest(self): def runTest(self):
pass pass
self.assertEqual(Foo().shortDescription(), None) self.assertEqual(Foo().shortDescription(), None)
# "Returns a one-line description of the test, or None if no description # "Returns a one-line description of the test, or None if no description
# has been provided. The default implementation of this method returns # has been provided. The default implementation of this method returns
# the first line of the test method's docstring, if available, or None." # the first line of the test method's docstring, if available, or None."
def test_shortDescription__singleline_docstring(self): def test_shortDescription__singleline_docstring(self):
class Foo(unittest.TestCase): class Foo(unittest.TestCase):
def runTest(self): def runTest(self):
"this tests foo" "this tests foo"
pass pass
self.assertEqual(Foo().shortDescription(), "this tests foo") self.assertEqual(Foo().shortDescription(), "this tests foo")
# "Returns a one-line description of the test, or None if no description # "Returns a one-line description of the test, or None if no description
# has been provided. The default implementation of this method returns # has been provided. The default implementation of this method returns
# the first line of the test method's docstring, if available, or None." # the first line of the test method's docstring, if available, or None."
def test_shortDescription__multiline_docstring(self): def test_shortDescription__multiline_docstring(self):
class Foo(unittest.TestCase): class Foo(unittest.TestCase):
def runTest(self): def runTest(self):
"""this tests foo """this tests foo
blah, bar and baz are also tested""" blah, bar and baz are also tested"""
pass pass
self.assertEqual(Foo().shortDescription(), "this tests foo") self.assertEqual(Foo().shortDescription(), "this tests foo")
# "If result is omitted or None, a temporary result object is created # "If result is omitted or None, a temporary result object is created
# and used, but is not made available to the caller" # and used, but is not made available to the caller"
def test_run__uses_defaultTestResult(self): def test_run__uses_defaultTestResult(self):
events = [] events = []
class Foo(unittest.TestCase): class Foo(unittest.TestCase):
def test(self): def test(self):
events.append('test') events.append('test')
def defaultTestResult(self): def defaultTestResult(self):
return LoggingResult(events) return LoggingResult(events)
# Make run() find a result object on its own # Make run() find a result object on its own
Foo('test').run() Foo('test').run()
expected = ['startTest', 'test', 'stopTest'] expected = ['startTest', 'test', 'stopTest']
self.assertEqual(events, expected) self.assertEqual(events, expected)
...@@ -2299,4 +2299,4 @@ def test_main(): ...@@ -2299,4 +2299,4 @@ def test_main():
Test_TestSuite, Test_TestResult, Test_FunctionTestCase) Test_TestSuite, Test_TestResult, Test_FunctionTestCase)
if __name__ == "__main__": if __name__ == "__main__":
test_main() test_main()
...@@ -117,12 +117,12 @@ class TestsWithSourceFile(unittest.TestCase): ...@@ -117,12 +117,12 @@ class TestsWithSourceFile(unittest.TestCase):
if not read_data: if not read_data:
break break
zipdata2.append(read_data) zipdata2.append(read_data)
self.assertEqual(''.join(zipdata1), self.data) self.assertEqual(''.join(zipdata1), self.data)
self.assertEqual(''.join(zipdata2), self.data) self.assertEqual(''.join(zipdata2), self.data)
zipfp.close() zipfp.close()
def testOpenStored(self): def testOpenStored(self):
for f in (TESTFN2, TemporaryFile(), StringIO()): for f in (TESTFN2, TemporaryFile(), StringIO()):
self.zipOpenTest(f, zipfile.ZIP_STORED) self.zipOpenTest(f, zipfile.ZIP_STORED)
...@@ -141,11 +141,11 @@ class TestsWithSourceFile(unittest.TestCase): ...@@ -141,11 +141,11 @@ class TestsWithSourceFile(unittest.TestCase):
self.assertEqual(''.join(zipdata1), self.data) self.assertEqual(''.join(zipdata1), self.data)
zipfp.close() zipfp.close()
def testRandomOpenStored(self): def testRandomOpenStored(self):
for f in (TESTFN2, TemporaryFile(), StringIO()): for f in (TESTFN2, TemporaryFile(), StringIO()):
self.zipRandomOpenTest(f, zipfile.ZIP_STORED) self.zipRandomOpenTest(f, zipfile.ZIP_STORED)
def zipReadlineTest(self, f, compression): def zipReadlineTest(self, f, compression):
self.makeTestArchive(f, compression) self.makeTestArchive(f, compression)
...@@ -178,16 +178,16 @@ class TestsWithSourceFile(unittest.TestCase): ...@@ -178,16 +178,16 @@ class TestsWithSourceFile(unittest.TestCase):
self.assertEqual(zipline, line + '\n') self.assertEqual(zipline, line + '\n')
zipfp.close() zipfp.close()
def testReadlineStored(self): def testReadlineStored(self):
for f in (TESTFN2, TemporaryFile(), StringIO()): for f in (TESTFN2, TemporaryFile(), StringIO()):
self.zipReadlineTest(f, zipfile.ZIP_STORED) self.zipReadlineTest(f, zipfile.ZIP_STORED)
def testReadlinesStored(self): def testReadlinesStored(self):
for f in (TESTFN2, TemporaryFile(), StringIO()): for f in (TESTFN2, TemporaryFile(), StringIO()):
self.zipReadlinesTest(f, zipfile.ZIP_STORED) self.zipReadlinesTest(f, zipfile.ZIP_STORED)
def testIterlinesStored(self): def testIterlinesStored(self):
for f in (TESTFN2, TemporaryFile(), StringIO()): for f in (TESTFN2, TemporaryFile(), StringIO()):
self.zipIterlinesTest(f, zipfile.ZIP_STORED) self.zipIterlinesTest(f, zipfile.ZIP_STORED)
...@@ -204,18 +204,18 @@ class TestsWithSourceFile(unittest.TestCase): ...@@ -204,18 +204,18 @@ class TestsWithSourceFile(unittest.TestCase):
for f in (TESTFN2, TemporaryFile(), StringIO()): for f in (TESTFN2, TemporaryFile(), StringIO()):
self.zipRandomOpenTest(f, zipfile.ZIP_DEFLATED) self.zipRandomOpenTest(f, zipfile.ZIP_DEFLATED)
def testReadlineDeflated(self): def testReadlineDeflated(self):
for f in (TESTFN2, TemporaryFile(), StringIO()): for f in (TESTFN2, TemporaryFile(), StringIO()):
self.zipReadlineTest(f, zipfile.ZIP_DEFLATED) self.zipReadlineTest(f, zipfile.ZIP_DEFLATED)
def testReadlinesDeflated(self): def testReadlinesDeflated(self):
for f in (TESTFN2, TemporaryFile(), StringIO()): for f in (TESTFN2, TemporaryFile(), StringIO()):
self.zipReadlinesTest(f, zipfile.ZIP_DEFLATED) self.zipReadlinesTest(f, zipfile.ZIP_DEFLATED)
def testIterlinesDeflated(self): def testIterlinesDeflated(self):
for f in (TESTFN2, TemporaryFile(), StringIO()): for f in (TESTFN2, TemporaryFile(), StringIO()):
self.zipIterlinesTest(f, zipfile.ZIP_DEFLATED) self.zipIterlinesTest(f, zipfile.ZIP_DEFLATED)
def testLowCompression(self): def testLowCompression(self):
# Checks for cases where compressed data is larger than original # Checks for cases where compressed data is larger than original
# Create the ZIP archive # Create the ZIP archive
...@@ -437,10 +437,10 @@ class OtherTests(unittest.TestCase): ...@@ -437,10 +437,10 @@ class OtherTests(unittest.TestCase):
def testCreateNonExistentFileForAppend(self): def testCreateNonExistentFileForAppend(self):
if os.path.exists(TESTFN): if os.path.exists(TESTFN):
os.unlink(TESTFN) os.unlink(TESTFN)
filename = 'testfile.txt' filename = 'testfile.txt'
content = 'hello, world. this is some content.' content = 'hello, world. this is some content.'
try: try:
zf = zipfile.ZipFile(TESTFN, 'a') zf = zipfile.ZipFile(TESTFN, 'a')
zf.writestr(filename, content) zf.writestr(filename, content)
...@@ -453,9 +453,9 @@ class OtherTests(unittest.TestCase): ...@@ -453,9 +453,9 @@ class OtherTests(unittest.TestCase):
zf = zipfile.ZipFile(TESTFN, 'r') zf = zipfile.ZipFile(TESTFN, 'r')
self.assertEqual(zf.read(filename), content) self.assertEqual(zf.read(filename), content)
zf.close() zf.close()
os.unlink(TESTFN) os.unlink(TESTFN)
def testCloseErroneousFile(self): def testCloseErroneousFile(self):
# This test checks that the ZipFile constructor closes the file object # This test checks that the ZipFile constructor closes the file object
# it opens if there's an error in the file. If it doesn't, the traceback # it opens if there's an error in the file. If it doesn't, the traceback
...@@ -472,24 +472,24 @@ class OtherTests(unittest.TestCase): ...@@ -472,24 +472,24 @@ class OtherTests(unittest.TestCase):
os.unlink(TESTFN) os.unlink(TESTFN)
def testIsZipErroneousFile(self): def testIsZipErroneousFile(self):
# This test checks that the is_zipfile function correctly identifies # This test checks that the is_zipfile function correctly identifies
# a file that is not a zip file # a file that is not a zip file
fp = open(TESTFN, "w") fp = open(TESTFN, "w")
fp.write("this is not a legal zip file\n") fp.write("this is not a legal zip file\n")
fp.close() fp.close()
chk = zipfile.is_zipfile(TESTFN) chk = zipfile.is_zipfile(TESTFN)
os.unlink(TESTFN) os.unlink(TESTFN)
self.assert_(chk is False) self.assert_(chk is False)
def testIsZipValidFile(self): def testIsZipValidFile(self):
# This test checks that the is_zipfile function correctly identifies # This test checks that the is_zipfile function correctly identifies
# a file that is a zip file # a file that is a zip file
zipf = zipfile.ZipFile(TESTFN, mode="w") zipf = zipfile.ZipFile(TESTFN, mode="w")
zipf.writestr("foo.txt", "O, for a Muse of Fire!") zipf.writestr("foo.txt", "O, for a Muse of Fire!")
zipf.close() zipf.close()
chk = zipfile.is_zipfile(TESTFN) chk = zipfile.is_zipfile(TESTFN)
os.unlink(TESTFN) os.unlink(TESTFN)
self.assert_(chk is True) self.assert_(chk is True)
def testNonExistentFileRaisesIOError(self): def testNonExistentFileRaisesIOError(self):
# make sure we don't raise an AttributeError when a partially-constructed # make sure we don't raise an AttributeError when a partially-constructed
...@@ -552,7 +552,7 @@ class DecryptionTests(unittest.TestCase): ...@@ -552,7 +552,7 @@ class DecryptionTests(unittest.TestCase):
def testBadPassword(self): def testBadPassword(self):
self.zip.setpassword("perl") self.zip.setpassword("perl")
self.assertRaises(RuntimeError, self.zip.read, "test.txt") self.assertRaises(RuntimeError, self.zip.read, "test.txt")
def testGoodPassword(self): def testGoodPassword(self):
self.zip.setpassword("python") self.zip.setpassword("python")
self.assertEquals(self.zip.read("test.txt"), self.plain) self.assertEquals(self.zip.read("test.txt"), self.plain)
...@@ -589,7 +589,7 @@ class TestsWithRandomBinaryFiles(unittest.TestCase): ...@@ -589,7 +589,7 @@ class TestsWithRandomBinaryFiles(unittest.TestCase):
def testStored(self): def testStored(self):
for f in (TESTFN2, TemporaryFile(), StringIO()): for f in (TESTFN2, TemporaryFile(), StringIO()):
self.zipTest(f, zipfile.ZIP_STORED) self.zipTest(f, zipfile.ZIP_STORED)
def zipOpenTest(self, f, compression): def zipOpenTest(self, f, compression):
self.makeTestArchive(f, compression) self.makeTestArchive(f, compression)
...@@ -610,17 +610,17 @@ class TestsWithRandomBinaryFiles(unittest.TestCase): ...@@ -610,17 +610,17 @@ class TestsWithRandomBinaryFiles(unittest.TestCase):
if not read_data: if not read_data:
break break
zipdata2.append(read_data) zipdata2.append(read_data)
testdata1 = ''.join(zipdata1) testdata1 = ''.join(zipdata1)
self.assertEqual(len(testdata1), len(self.data)) self.assertEqual(len(testdata1), len(self.data))
self.assertEqual(testdata1, self.data) self.assertEqual(testdata1, self.data)
testdata2 = ''.join(zipdata2) testdata2 = ''.join(zipdata2)
self.assertEqual(len(testdata1), len(self.data)) self.assertEqual(len(testdata1), len(self.data))
self.assertEqual(testdata1, self.data) self.assertEqual(testdata1, self.data)
zipfp.close() zipfp.close()
def testOpenStored(self): def testOpenStored(self):
for f in (TESTFN2, TemporaryFile(), StringIO()): for f in (TESTFN2, TemporaryFile(), StringIO()):
self.zipOpenTest(f, zipfile.ZIP_STORED) self.zipOpenTest(f, zipfile.ZIP_STORED)
...@@ -641,8 +641,8 @@ class TestsWithRandomBinaryFiles(unittest.TestCase): ...@@ -641,8 +641,8 @@ class TestsWithRandomBinaryFiles(unittest.TestCase):
self.assertEqual(len(testdata), len(self.data)) self.assertEqual(len(testdata), len(self.data))
self.assertEqual(testdata, self.data) self.assertEqual(testdata, self.data)
zipfp.close() zipfp.close()
def testRandomOpenStored(self): def testRandomOpenStored(self):
for f in (TESTFN2, TemporaryFile(), StringIO()): for f in (TESTFN2, TemporaryFile(), StringIO()):
self.zipRandomOpenTest(f, zipfile.ZIP_STORED) self.zipRandomOpenTest(f, zipfile.ZIP_STORED)
...@@ -653,7 +653,7 @@ class TestsWithMultipleOpens(unittest.TestCase): ...@@ -653,7 +653,7 @@ class TestsWithMultipleOpens(unittest.TestCase):
zipfp.writestr('ones', '1'*FIXEDTEST_SIZE) zipfp.writestr('ones', '1'*FIXEDTEST_SIZE)
zipfp.writestr('twos', '2'*FIXEDTEST_SIZE) zipfp.writestr('twos', '2'*FIXEDTEST_SIZE)
zipfp.close() zipfp.close()
def testSameFile(self): def testSameFile(self):
# Verify that (when the ZipFile is in control of creating file objects) # Verify that (when the ZipFile is in control of creating file objects)
# multiple open() calls can be made without interfering with each other. # multiple open() calls can be made without interfering with each other.
...@@ -694,10 +694,10 @@ class TestsWithMultipleOpens(unittest.TestCase): ...@@ -694,10 +694,10 @@ class TestsWithMultipleOpens(unittest.TestCase):
self.assertEqual(data1, '1'*FIXEDTEST_SIZE) self.assertEqual(data1, '1'*FIXEDTEST_SIZE)
self.assertEqual(data2, '2'*FIXEDTEST_SIZE) self.assertEqual(data2, '2'*FIXEDTEST_SIZE)
zipf.close() zipf.close()
def tearDown(self): def tearDown(self):
os.remove(TESTFN2) os.remove(TESTFN2)
class UniversalNewlineTests(unittest.TestCase): class UniversalNewlineTests(unittest.TestCase):
def setUp(self): def setUp(self):
...@@ -726,7 +726,7 @@ class UniversalNewlineTests(unittest.TestCase): ...@@ -726,7 +726,7 @@ class UniversalNewlineTests(unittest.TestCase):
self.assertEqual(self.arcdata[sep], zipdata) self.assertEqual(self.arcdata[sep], zipdata)
zipfp.close() zipfp.close()
def readlineTest(self, f, compression): def readlineTest(self, f, compression):
self.makeTestArchive(f, compression) self.makeTestArchive(f, compression)
...@@ -763,36 +763,36 @@ class UniversalNewlineTests(unittest.TestCase): ...@@ -763,36 +763,36 @@ class UniversalNewlineTests(unittest.TestCase):
zipfp.close() zipfp.close()
def testReadStored(self): def testReadStored(self):
for f in (TESTFN2, TemporaryFile(), StringIO()): for f in (TESTFN2, TemporaryFile(), StringIO()):
self.readTest(f, zipfile.ZIP_STORED) self.readTest(f, zipfile.ZIP_STORED)
def testReadlineStored(self): def testReadlineStored(self):
for f in (TESTFN2, TemporaryFile(), StringIO()): for f in (TESTFN2, TemporaryFile(), StringIO()):
self.readlineTest(f, zipfile.ZIP_STORED) self.readlineTest(f, zipfile.ZIP_STORED)
def testReadlinesStored(self): def testReadlinesStored(self):
for f in (TESTFN2, TemporaryFile(), StringIO()): for f in (TESTFN2, TemporaryFile(), StringIO()):
self.readlinesTest(f, zipfile.ZIP_STORED) self.readlinesTest(f, zipfile.ZIP_STORED)
def testIterlinesStored(self): def testIterlinesStored(self):
for f in (TESTFN2, TemporaryFile(), StringIO()): for f in (TESTFN2, TemporaryFile(), StringIO()):
self.iterlinesTest(f, zipfile.ZIP_STORED) self.iterlinesTest(f, zipfile.ZIP_STORED)
if zlib: if zlib:
def testReadDeflated(self): def testReadDeflated(self):
for f in (TESTFN2, TemporaryFile(), StringIO()): for f in (TESTFN2, TemporaryFile(), StringIO()):
self.readTest(f, zipfile.ZIP_DEFLATED) self.readTest(f, zipfile.ZIP_DEFLATED)
def testReadlineDeflated(self): def testReadlineDeflated(self):
for f in (TESTFN2, TemporaryFile(), StringIO()): for f in (TESTFN2, TemporaryFile(), StringIO()):
self.readlineTest(f, zipfile.ZIP_DEFLATED) self.readlineTest(f, zipfile.ZIP_DEFLATED)
def testReadlinesDeflated(self): def testReadlinesDeflated(self):
for f in (TESTFN2, TemporaryFile(), StringIO()): for f in (TESTFN2, TemporaryFile(), StringIO()):
self.readlinesTest(f, zipfile.ZIP_DEFLATED) self.readlinesTest(f, zipfile.ZIP_DEFLATED)
def testIterlinesDeflated(self): def testIterlinesDeflated(self):
for f in (TESTFN2, TemporaryFile(), StringIO()): for f in (TESTFN2, TemporaryFile(), StringIO()):
self.iterlinesTest(f, zipfile.ZIP_DEFLATED) self.iterlinesTest(f, zipfile.ZIP_DEFLATED)
...@@ -802,8 +802,8 @@ class UniversalNewlineTests(unittest.TestCase): ...@@ -802,8 +802,8 @@ class UniversalNewlineTests(unittest.TestCase):
def test_main(): def test_main():
run_unittest(TestsWithSourceFile, TestZip64InSmallFiles, OtherTests, run_unittest(TestsWithSourceFile, TestZip64InSmallFiles, OtherTests,
PyZipFileTests, DecryptionTests, TestsWithMultipleOpens, PyZipFileTests, DecryptionTests, TestsWithMultipleOpens,
UniversalNewlineTests, TestsWithRandomBinaryFiles) UniversalNewlineTests, TestsWithRandomBinaryFiles)
#run_unittest(TestZip64InSmallFiles) #run_unittest(TestZip64InSmallFiles)
......
...@@ -30,7 +30,7 @@ handler, the argument will be installed instead of the default. ...@@ -30,7 +30,7 @@ handler, the argument will be installed instead of the default.
install_opener -- Installs a new opener as the default opener. install_opener -- Installs a new opener as the default opener.
objects of interest: objects of interest:
OpenerDirector -- OpenerDirector --
Request -- An object that encapsulates the state of a request. The Request -- An object that encapsulates the state of a request. The
state can be as simple as the URL. It can also include extra HTTP state can be as simple as the URL. It can also include extra HTTP
......
...@@ -357,9 +357,9 @@ class _ZipDecrypter: ...@@ -357,9 +357,9 @@ class _ZipDecrypter:
class ZipExtFile: class ZipExtFile:
"""File-like object for reading an archive member. """File-like object for reading an archive member.
Is returned by ZipFile.open(). Is returned by ZipFile.open().
""" """
def __init__(self, fileobj, zipinfo, decrypt=None): def __init__(self, fileobj, zipinfo, decrypt=None):
self.fileobj = fileobj self.fileobj = fileobj
self.decrypter = decrypt self.decrypter = decrypt
...@@ -374,7 +374,7 @@ class ZipExtFile: ...@@ -374,7 +374,7 @@ class ZipExtFile:
self.compress_type = zipinfo.compress_type self.compress_type = zipinfo.compress_type
self.compress_size = zipinfo.compress_size self.compress_size = zipinfo.compress_size
self.closed = False self.closed = False
self.mode = "r" self.mode = "r"
self.name = zipinfo.filename self.name = zipinfo.filename
...@@ -386,7 +386,7 @@ class ZipExtFile: ...@@ -386,7 +386,7 @@ class ZipExtFile:
def set_univ_newlines(self, univ_newlines): def set_univ_newlines(self, univ_newlines):
self.univ_newlines = univ_newlines self.univ_newlines = univ_newlines
# pick line separator char(s) based on universal newlines flag # pick line separator char(s) based on universal newlines flag
self.nlSeps = ("\n", ) self.nlSeps = ("\n", )
if self.univ_newlines: if self.univ_newlines:
...@@ -394,7 +394,7 @@ class ZipExtFile: ...@@ -394,7 +394,7 @@ class ZipExtFile:
def __iter__(self): def __iter__(self):
return self return self
def next(self): def next(self):
nextline = self.readline() nextline = self.readline()
if not nextline: if not nextline:
...@@ -414,17 +414,17 @@ class ZipExtFile: ...@@ -414,17 +414,17 @@ class ZipExtFile:
if (self.lastdiscard, self.linebuffer[0]) == ('\r','\n'): if (self.lastdiscard, self.linebuffer[0]) == ('\r','\n'):
self.linebuffer = self.linebuffer[1:] self.linebuffer = self.linebuffer[1:]
for sep in self.nlSeps: for sep in self.nlSeps:
nl = self.linebuffer.find(sep) nl = self.linebuffer.find(sep)
if nl >= 0: if nl >= 0:
nllen = len(sep) nllen = len(sep)
return nl, nllen return nl, nllen
return nl, nllen return nl, nllen
def readline(self, size = -1): def readline(self, size = -1):
"""Read a line with approx. size. If size is negative, """Read a line with approx. size. If size is negative,
read a whole line. read a whole line.
""" """
if size < 0: if size < 0:
size = sys.maxint size = sys.maxint
...@@ -433,7 +433,7 @@ class ZipExtFile: ...@@ -433,7 +433,7 @@ class ZipExtFile:
# check for a newline already in buffer # check for a newline already in buffer
nl, nllen = self._checkfornewline() nl, nllen = self._checkfornewline()
if nl >= 0: if nl >= 0:
# the next line was already in the buffer # the next line was already in the buffer
nl = min(nl, size) nl = min(nl, size)
...@@ -449,7 +449,7 @@ class ZipExtFile: ...@@ -449,7 +449,7 @@ class ZipExtFile:
# check for a newline in buffer # check for a newline in buffer
nl, nllen = self._checkfornewline() nl, nllen = self._checkfornewline()
# we either ran out of bytes in the file, or # we either ran out of bytes in the file, or
# met the specified size limit without finding a newline, # met the specified size limit without finding a newline,
# so return current buffer # so return current buffer
...@@ -528,8 +528,8 @@ class ZipExtFile: ...@@ -528,8 +528,8 @@ class ZipExtFile:
newdata = self.dc.decompress(newdata) newdata = self.dc.decompress(newdata)
self.rawbuffer = self.dc.unconsumed_tail self.rawbuffer = self.dc.unconsumed_tail
if self.eof and len(self.rawbuffer) == 0: if self.eof and len(self.rawbuffer) == 0:
# we're out of raw bytes (both from the file and # we're out of raw bytes (both from the file and
# the local buffer); flush just to make sure the # the local buffer); flush just to make sure the
# decompressor is done # decompressor is done
newdata += self.dc.flush() newdata += self.dc.flush()
# prevent decompressor from being used again # prevent decompressor from being used again
...@@ -547,7 +547,7 @@ class ZipExtFile: ...@@ -547,7 +547,7 @@ class ZipExtFile:
self.readbuffer = self.readbuffer[size:] self.readbuffer = self.readbuffer[size:]
return bytes return bytes
class ZipFile: class ZipFile:
""" Class with methods to open, read, write, close, list zip files. """ Class with methods to open, read, write, close, list zip files.
...@@ -738,7 +738,7 @@ class ZipFile: ...@@ -738,7 +738,7 @@ class ZipFile:
raise RuntimeError, \ raise RuntimeError, \
"Attempt to read ZIP archive that was already closed" "Attempt to read ZIP archive that was already closed"
# Only open a new file for instances where we were not # Only open a new file for instances where we were not
# given a file object in the constructor # given a file object in the constructor
if self._filePassed: if self._filePassed:
zef_file = self.fp zef_file = self.fp
......
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