'Load tests from a module object representing a package, and return a
TestSuite containing those tests.
Tests are only loaded from modules whose name begins with \'test_\'
(or whatever C{modulePrefix} is set to).
@param package: a types.ModuleType object (or reasonable facsimile
obtained by importing) which may contain tests.
@param recurse: A boolean.  If True, inspect modules within packages
within the given package (and so on), otherwise, only inspect modules
in the package itself.
@raise: TypeError if \'package\' is not a package.
@return: a TestSuite created with my suiteFactory, containing all the
tests.'

def loadPackage(self, package, recurse=False):

    if (not isPackage(package)):
        raise TypeError(('%r    is    not    a    package' % (package,)))
    pkgobj = modules.getModule(package.__name__)
    if recurse:
        discovery = pkgobj.walkModules()
    else:
        discovery = pkgobj.iterModules()
    discovered = []
    for disco in discovery:
        if disco.name.split('.')[(-1)].startswith(self.modulePrefix):
            discovered.append(disco)
    suite = self.suiteFactory()
    for modinfo in self.sort(discovered):
        try:
            module = modinfo.load()
        except:
            thingToAdd = ErrorHolder(modinfo.name, failure.Failure())
        else:
            thingToAdd = self.loadModule(module)
        suite.addTest(thingToAdd)
    return suite
