view tests/run.py @ 676:2a9c009790ce

svnwrap: add subvertpy wrapper Subvertpy is, in many ways, a better interface to Subversion than the SWIG bindings. It's faster, leaks less and offers a cleaner API. The added wrapper is able to coexist with the SWIG wrapper, and not enabled by default. In order to allow this, the wrapper adapts the output from Subvertpy so that it is similar to the output from the SWIG bindings. An example of this can be seen in the modules that work with editors: the nested editors offered by Subvertpy had to be flattened to work with our editor code. This change does not activate the Subvertpy wrapper, yet, and thus does not affect any functionality.
author Dan Villiom Podlaski Christiansen <danchr@gmail.com>
date Wed, 11 Aug 2010 19:57:35 +0200
parents ab454ee515d4
children 52fbb272a147
line wrap: on
line source

import optparse
import os
import sys
import unittest

def tests():
    import test_binaryfiles
    import test_diff
    import test_externals
    import test_fetch_branches
    import test_fetch_command
    import test_fetch_command_regexes
    import test_fetch_exec
    import test_fetch_mappings
    import test_fetch_renames
    import test_fetch_symlinks
    import test_fetch_truncated
    import test_pull
    import test_push_command
    import test_push_renames
    import test_push_dirs
    import test_push_eol
    import test_rebuildmeta
    import test_single_dir_clone
    import test_startrev
    import test_svnwrap
    import test_tags
    import test_utility_commands
    import test_urls

    sys.path.append(os.path.dirname(__file__))
    sys.path.append(os.path.join(os.path.dirname(__file__), 'comprehensive'))

    import test_stupid_pull
    import test_verify

    return locals()

def comprehensive(mod):
    dir = os.path.basename(os.path.dirname(mod.__file__))
    return dir == 'comprehensive'

if __name__ == '__main__':
    description = ("This script runs the hgsubversion tests. If no tests are "
                   "specified, all known tests are implied.")
    parser = optparse.OptionParser(usage="%prog [options] [TESTS ...]",
                                   description=description)
    parser.add_option("-A", "--all",
                      dest="comprehensive", action="store_true", default=False,
                      help="include slow, but comprehensive tests")
    parser.add_option("-v", "--verbose",
                      dest="verbose", action="store_true", default=False,
                      help="enable verbose output")
    parser.add_option("", "--no-demandimport",
                      dest="demandimport", action="store_false", default=True,
                      help="disable Mercurial demandimport loading")

    (options, args) = parser.parse_args()

    if options.verbose:
        testargs = { 'descriptions': 3, 'verbosity': 2 }
    else:
        testargs = {'descriptions': 2}

    sys.path.append(os.path.dirname(os.path.dirname(__file__)))

    if options.demandimport:
        from mercurial import demandimport
        demandimport.enable()

    # make sure our copy of hgsubversion gets imported by loading test_util
    import test_util
    test_util.TestBase

    # silence output when running outside nose
    import tempfile
    sys.stdout = tempfile.TemporaryFile()

    all = tests()

    args = [i.split('.py')[0].replace('-', '_') for i in args]

    if not args:
        check = lambda x: options.comprehensive or not comprehensive(x)
        mods = [m for (n, m) in sorted(all.iteritems()) if check(m)]
        suite = [m.suite() for m in mods]
    else:
        suite = []
        for arg in args:
            if arg == 'test_util':
                continue
            elif arg not in all:
                print >> sys.stderr, 'test module %s not available' % arg
            else:
                suite.append(all[arg].suite())

    runner = unittest.TextTestRunner(**testargs)
    result = runner.run(unittest.TestSuite(suite))
    if not result.wasSuccessful():
        sys.exit(1)