def main(argv=None): '''Run either all tests, or those specified in argv''' if argv is None: argv = sys.argv # parse options covreport = False failfast = False loglevel = logging.WARNING opts, args = getopt.gnu_getopt(argv[1:], 'hVD', ['help', 'coverage', 'fast', 'failfast', 'ff', 'full', 'debug', 'verbose']) for o, a in opts: if o in ('-h', '--help'): print '''\ usage: %s [OPTIONS] [MODULES] Where MODULE should a module name from ./tests/ If no module is given the whole test suite is run. Options: -h, --help print this text --fast skip a number of slower tests and mock filesystem --failfast stop after the first test that fails --ff alias for "--fast --failfast" --full full test for using filesystem without mock --coverage report test coverage statistics -V, --verbose run with verbose output from logging -D, --debug run with debug output from logging ''' % argv[0] return elif o == '--coverage': if coverage: covreport = True else: print >>sys.stderr, '''\ Can not run test coverage without module 'coverage'. On Ubuntu or Debian install package 'python-coverage'. ''' sys.exit(1) elif o == '--fast': tests.FAST_TEST = True # set before any test classes are loaded ! elif o == '--failfast': failfast = True elif o == '--ff': # --fast --failfast tests.FAST_TEST = True failfast = True elif o == '--full': tests.FULL_TEST = True elif o in ('-V', '--verbose'): loglevel = logging.INFO elif o in ('-D', '--debug'): loglevel = logging.DEBUG else: assert False, 'Unkown option: %s' % o # Start tracing if coverage: cov = coverage.coverage(source=['zim'], branch=True) cov.erase() # clean up old date set cov.exclude('assert ') cov.exclude('raise NotImplementedError') cov.start() # Set logging handler (don't use basicConfig here, we already installed stuff) handler = logging.StreamHandler() handler.setFormatter(logging.Formatter('%(levelname)s: %(message)s')) logger = logging.getLogger() logger.setLevel(loglevel) logger.addHandler(handler) #logging.captureWarnings(True) # FIXME - make all test pass with this enabled # Build the test suite loader = unittest.TestLoader() try: if args: suite = unittest.TestSuite() for name in args: module = name if name.startswith('tests.') else 'tests.' + name test = loader.loadTestsFromName(module) suite.addTest(test) else: suite = tests.load_tests(loader, None, None) except AttributeError as error: # HACK: unittest raises and attribute errors if import of test script # fails try to catch this and show the import error instead - else raise # original error import re m = re.match(r"'module' object has no attribute '(\w+)'", error.args[0]) if m: module = m.group(1) m = __import__('tests.' + module) # should raise ImportError raise error # And run it unittest.installHandler() # Fancy handling for ^C during test result = \ unittest.TextTestRunner(verbosity=2, failfast=failfast, descriptions=False).run(suite) # Check the modules were loaded from the right location # (so no testing based on modules from a previous installed version...) mylib = os.path.abspath('./zim') for module in [m for m in sys.modules.keys() if m == 'zim' or m.startswith('zim.')]: if sys.modules[module] is None: continue file = sys.modules[module].__file__ assert file.startswith(mylib), \ 'Module %s was loaded from %s' % (module, file) test_report(result, 'test_report.html') print '\nWrote test report to test_report.html\n' # Stop tracing if coverage: cov.stop() cov.save() # Create coverage output if asked to do so if covreport: print 'Writing coverage reports...' cov.html_report(directory='./coverage', omit=['zim/inc/*']) print 'Done - Coverage reports can be found in ./coverage/'
def main(argv=None): '''Run either all tests, or those specified in argv''' if argv is None: argv = sys.argv coverage = None loglevel = logging.WARNING opts, args = getopt.gnu_getopt(argv[1:], 'hVD', ['help', 'debug', 'verbose', 'coverage']) for o, a in opts: if o in ('-h', '--help'): print '''\ usage: %s [OPTIONS] [MODULES] Where MODULE should a module name from ./tests/ If no module is given the whole test suite is run. Options: --coverage report test coverage statistics -h, --help print this text -V, --verbose run with verbose output from logging -D, --debug run with debug output from logging ''' % argv[0] return elif o == '--coverage': try: import coverage as coverage_module except ImportError: print >>sys.stderr, '''\ Can not run test coverage without module 'coverage'. On Ubuntu or Debian install package 'python-coverage'. ''' sys.exit(1) #~ coverage = coverage_module.coverage(data_suffix=True, auto_data=True) print "running unittest with coverage." coverage = coverage_module.coverage(data_suffix=True) coverage.erase() # clean up old date set coverage.exclude('assert ') coverage.exclude('raise NotImplementedError') coverage.start() elif o in ('-V', '--verbose'): loglevel = logging.INFO elif o in ('-D', '--debug'): loglevel = logging.DEBUG else: assert False # Set logging handler logging.basicConfig(level=loglevel, format='%(levelname)s: %(message)s') # # Build the test suite loader = unittest.TestLoader() suite = tests.load_tests(loader, None, None) # And run it unittest.installHandler() # Fancy handling for ^C during test unittest.TextTestRunner(verbosity=2).run(suite) # Create coverage output if asked to do so if coverage: coverage.stop() #~ coverage.combine() print 'Writing coverage reports...' pyfiles = list(tests.all_files()) #~ coverage.report(pyfiles, show_missing=False) #~ coverage.html_report(pyfiles, directory='./coverage', omit=['zim/inc/*']) coverage_report(coverage, pyfiles, './coverage') print 'Done - Coverage reports can be found in ./coverage/'
def main(argv=None): '''Run either all tests, or those specified in argv''' if argv is None: argv = sys.argv # parse options coverage = None failfast = False loglevel = logging.WARNING opts, args = getopt.gnu_getopt(argv[1:], 'hVD', ['help', 'coverage', 'fast', 'failfast', 'debug', 'verbose']) for o, a in opts: if o in ('-h', '--help'): print '''\ usage: %s [OPTIONS] [MODULES] Where MODULE should a module name from ./tests/ If no module is given the whole test suite is run. Options: -h, --help print this text --fast skip a number of slower tests (assumes --failfast) --failfast stop after the first test that fails --coverage report test coverage statistics -V, --verbose run with verbose output from logging -D, --debug run with debug output from logging ''' % argv[0] return elif o == '--coverage': try: import coverage as coverage_module except ImportError: print >>sys.stderr, '''\ Can not run test coverage without module 'coverage'. On Ubuntu or Debian install package 'python-coverage'. ''' sys.exit(1) #~ coverage = coverage_module.coverage(data_suffix=True, auto_data=True) coverage = coverage_module.coverage(data_suffix=True) coverage.erase() # clean up old date set coverage.exclude('assert ') coverage.exclude('raise NotImplementedError') coverage.start() elif o == '--fast': failfast = True tests.FAST_TEST = True # set before any test classes are loaded ! elif o == '--failfast': failfast = True elif o in ('-V', '--verbose'): loglevel = logging.INFO elif o in ('-D', '--debug'): loglevel = logging.DEBUG else: assert False # Set logging handler logging.basicConfig(level=loglevel, format='%(levelname)s: %(message)s') # Build the test suite loader = unittest.TestLoader() if args: suite = unittest.TestSuite() for name in args: module = name if name.startswith('tests.') else 'tests.' + name test = loader.loadTestsFromName(module) suite.addTest(test) else: suite = tests.load_tests(loader, None, None) # And run it unittest.installHandler() # Fancy handling for ^C during test result = \ unittest.TextTestRunner(verbosity=2, failfast=failfast, descriptions=False).run(suite) # Check the modules were loaded from the right location # (so no testing based on modules from a previous installed version...) mylib = os.path.abspath('./zim') for module in [m for m in sys.modules.keys() if m == 'zim' or m.startswith('zim.')]: if sys.modules[module] is None: continue file = sys.modules[module].__file__ assert file.startswith(mylib), \ 'Module %s was loaded from %s' % (module, file) test_report(result, 'test_report.html') print '\nWrote test report to test_report.html\n' # Create coverage output if asked to do so if coverage: coverage.stop() #~ coverage.combine() print 'Writing coverage reports...' pyfiles = list(tests.zim_pyfiles()) #~ coverage.report(pyfiles, show_missing=False) #~ coverage.html_report(pyfiles, directory='./coverage', omit=['zim/inc/*']) coverage_report(coverage, pyfiles, './coverage') print 'Done - Coverage reports can be found in ./coverage/'
def main(argv=None): '''Run either all tests, or those specified in argv''' if argv is None: argv = sys.argv # parse options coverage = None failfast = False loglevel = logging.WARNING opts, args = getopt.gnu_getopt(argv[1:], 'hVD', ['help', 'coverage', 'fast', 'failfast', 'debug', 'verbose']) for o, a in opts: if o in ('-h', '--help'): print '''\ usage: %s [OPTIONS] [MODULES] Where MODULE should a module name from ./tests/ If no module is given the whole test suite is run. Options: -h, --help print this text --fast skip a number of slower tests (assumes --failfast) --failfast stop after the first test that fails --coverage report test coverage statistics -V, --verbose run with verbose output from logging -D, --debug run with debug output from logging ''' % argv[0] return elif o == '--coverage': try: import coverage as coverage_module except ImportError: print >>sys.stderr, '''\ Can not run test coverage without module 'coverage'. On Ubuntu or Debian install package 'python-coverage'. ''' sys.exit(1) #~ coverage = coverage_module.coverage(data_suffix=True, auto_data=True) coverage = coverage_module.coverage(data_suffix=True) coverage.erase() # clean up old date set coverage.exclude('assert ') coverage.exclude('raise NotImplementedError') coverage.start() elif o == '--fast': failfast = True tests.FAST_TEST = True # set before any test classes are loaded ! elif o == '--failfast': failfast = True elif o in ('-V', '--verbose'): loglevel = logging.INFO elif o in ('-D', '--debug'): loglevel = logging.DEBUG else: assert False # Set logging handler logging.basicConfig(level=loglevel, format='%(levelname)s: %(message)s') # Build the test suite loader = unittest.TestLoader() if args: suite = unittest.TestSuite() for module in [ 'tests.'+name for name in args ]: test = loader.loadTestsFromName(module) suite.addTest(test) else: suite = tests.load_tests(loader, None, None) # And run it unittest.installHandler() # Fancy handling for ^C during test result = \ unittest.TextTestRunner(verbosity=2, failfast=failfast, descriptions=False).run(suite) # Check the modules were loaded from the right location # (so no testing based on modules from a previous installed version...) mylib = os.path.abspath('./zim') for module in [m for m in sys.modules.keys() if m == 'zim' or m.startswith('zim.')]: if sys.modules[module] is None: continue file = sys.modules[module].__file__ assert file.startswith(mylib), \ 'Module %s was loaded from %s' % (module, file) test_report(result, 'test_report.html') print '\nWrote test report to test_report.html\n' # Create coverage output if asked to do so if coverage: coverage.stop() #~ coverage.combine() print 'Writing coverage reports...' pyfiles = list(tests.zim_pyfiles()) #~ coverage.report(pyfiles, show_missing=False) #~ coverage.html_report(pyfiles, directory='./coverage', omit=['zim/inc/*']) coverage_report(coverage, pyfiles, './coverage') print 'Done - Coverage reports can be found in ./coverage/'
suite.addTest(test) else: suite = tests.load_tests(loader, None, None) except AttributeError, error: # HACK: unittest raises and attribute errors if import of test script # fails try to catch this and show the import error instead - else raise # original error import re m = re.match(r"'module' object has no attribute '(\w+)'", error.args[0]) if m: module = m.group(1) m = __import__('tests.'+module) # should raise ImportError raise error # And run it unittest.installHandler() # Fancy handling for ^C during test result = \ unittest.TextTestRunner(verbosity=2, failfast=failfast, descriptions=False).run(suite) # Check the modules were loaded from the right location # (so no testing based on modules from a previous installed version...) mylib = os.path.abspath('./zim') for module in [m for m in sys.modules.keys() if m == 'zim' or m.startswith('zim.')]: if sys.modules[module] is None: continue file = sys.modules[module].__file__ assert file.startswith(mylib), \ 'Module %s was loaded from %s' % (module, file) test_report(result, 'test_report.html')