#!/usr/bin/env python
#
# Unit tests for lists. This example shows how subclassing can be used in
# order to re-use test code wth different test objects. Comments in this
# module explain some points about typical usage. See the documentation for
# more information, including the documentation strings in the unittest module.
#
# $Id: listtests.py,v 1.3 2001/03/12 11:52:56 purcell Exp $
import unittest
from UserList import UserList
class ListTestCase(unittest.TestCase):
"""A simple and incomplete test case for python's built-in lists"""
def setUp(self):
self.list = [] # All list test cases will start with an empty list
def _appendItemsToList(self,items):
"""Do some further set-up. Used by some of the test functions."""
for item in items: self.list.append(item)
def testAppend(self):
# See note in documentation concerning use of 'assert' vs. 'assert_'
self.assert_(len(self.list) == 0)
self.list.append('anItem')
self.assertEquals(len(self.list), 1)
self.assertEquals(self.list[0], 'anItem')
def testCount(self):
"Check count() within heterogeneous list"
self._appendItemsToList(('a','b',1,2,'a','2'))
self.assert_(self.list.count('a') == 2)
# failUnless is synonymous with assert_
self.failUnless(self.list.count('c') == 0)
self.failUnless(self.list.count(2) == 1)
self.failUnless(self.list.count(None) == 0)
def testIndexing(self):
# Normally when an exception is expected we would use
# 'self.assertRaises', but this is not possible when testing behaviour
# of operators such as []
try:
self.list[0]
except IndexError: pass
else: self.fail('expected IndexError when list empty')
self.list.append('first')
self.failUnless(self.list[0] == 'first')
self.failUnless(self.list[-1] == 'first')
def testSlicing(self):
self.failUnless(len(self.list[:0]) == 0)
self.failUnless(len(self.list[:1]) == 0)
self.failUnless(len(self.list[1:]) == 0) # no IndexErrors expected
self.failUnless(len(self.list[1:1]) == 0)
self._appendItemsToList(('first','second','third'))
self.failUnless(len(self.list[:1]) == 1)
self.failUnless(type(self.list[:1]) == type(self.list))
class UserListTestCase(ListTestCase):
"""A ListTestCase subclass that tests UserLists"""
def setUp(self):
self.list = UserList()
def suite():
"""Returns a suite containing all the test cases in this module.
It can be a good idea to put an identically named factory function
like this in every test module. Such a naming convention allows
automation of test discovery.
"""
# Build a TestSuite containing all the possible test case instances
# that can be made from the ListTestCase class using its 'test*'
# functions.
suite1 = unittest.makeSuite(ListTestCase)
# Same with UserListTestCase, which subclasses ListTestCase; the 'test*'
# methods in the base class will be found
suite2 = unittest.makeSuite(UserListTestCase)
# Make a composite test suite containing the two other suites
return unittest.TestSuite((suite1, suite2))
if __name__ == '__main__':
# When this module is executed from the command-line, run all its tests
unittest.main()
|