view tests/run.py @ 1500:f75c1d112793

tox: give up on Mercurial older than 3.2 Mercurial 3.2 is from November of 2014, and there's a more recent Ubuntu LTS release than 2014 now available. Debian stable has 3.1, but the backports get users up to 3.7.x, so I'm comfortable just letting these older versions of hg be broken.
author Augie Fackler <raf@durin42.com>
date Sun, 12 Feb 2017 18:31:47 -0500
parents dcf9eff9b5b7
children
line wrap: on
line source

#!/usr/bin/env python

import optparse
import os
import sys
import unittest

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")
    parser.add_option("", "--bindings",
                      dest="bindings", action="store", default=None,
                      choices=["swig", "subvertpy"],
                      help="test using the specified bindings (swig or "
                      "subvertpy)")
    parser.add_option("", "--show-stdout",
                      dest="showstdout", action="store_true", default=False,
                      help="show stdout (hidden by default)")

    (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()

    if options.bindings:
        os.environ['HGSUBVERSION_BINDINGS'] = options.bindings

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

    # silence output when running outside nose
    if not options.showstdout:
        import tempfile
        sys.stdout = tempfile.TemporaryFile()

    args = [os.path.basename(os.path.splitext(arg)[0]).replace('-', '_')
            for arg in args]

    loader = unittest.TestLoader()
    suite = unittest.TestSuite()

    if sys.version_info[:2] < (2, 7):
        import glob
        def discover(start_dir, pattern='test*.py', top_level_dir=None):
            tests = []
            sys.path.append(start_dir)
            for path in glob.glob(os.path.join(start_dir, pattern)):
                name = os.path.splitext(os.path.basename(path))[0]
                tests.append(loader.loadTestsFromModule(__import__(name)))
            return tests
        loader.discover = discover

    if not args:
        suite.addTests(loader.discover('.'))

        if options.comprehensive:
            suite.addTests(loader.discover('comprehensive',
                                           top_level_dir='comprehensive'))
    else:
        sys.path.append(os.path.join(os.path.dirname(__file__), 'comprehensive'))

        suite.addTests(loader.loadTestsFromNames(args))

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