1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
|
# -*- coding: utf-8 -*-
"""
Pygments unit tests
~~~~~~~~~~~~~~~~~~
Usage::
python run.py [testfile ...]
:copyright: 2006 by Georg Brandl.
:license: GNU GPL, see LICENSE for more details.
"""
import sys, os, new
import unittest
import __builtin__
from os.path import dirname, basename, join, abspath
testdir = abspath(dirname(__file__))
# useful for all tests
__builtin__.testdir = testdir
failed = []
total_test_count = 0
error_test_count = 0
def err(file, what, exc):
print >>sys.stderr, file, 'failed %s:' % what,
print >>sys.stderr, exc
failed.append(file[:-3])
class QuietTestRunner(object):
"""Customized test runner for relatively quiet output"""
def __init__(self, testname, stream=sys.stderr):
self.testname = testname
self.stream = unittest._WritelnDecorator(stream)
def run(self, test):
global total_test_count
global error_test_count
result = unittest._TextTestResult(self.stream, True, 1)
test(result)
if not result.wasSuccessful():
self.stream.write(' FAIL:')
result.printErrors()
failed.append(self.testname)
else:
self.stream.write(' ok\n')
total_test_count += result.testsRun
error_test_count += len(result.errors) + len(result.failures)
return result
def run_tests():
# needed to avoid confusion involving atexit handlers
import logging
orig_modules = sys.modules.keys()
if sys.argv[1:]:
# test only files given on cmdline
files = [entry + '.py' for entry in sys.argv[1:] if entry.startswith('test_')]
else:
files = [entry for entry in os.listdir(testdir)
if (entry.startswith('test_') and entry.endswith('.py'))]
files.sort()
print >>sys.stderr, ' Pygments Test Suite running, stand by... '
print >>sys.stderr, '==============================================='
for testfile in files:
globs = {}
try:
execfile(join(testdir, testfile), globs)
except Exception, exc:
raise
err(testfile, 'execfile', exc)
continue
sys.stderr.write(testfile[:-3] + ': ')
try:
runner = QuietTestRunner(testfile[:-3])
# make a test suite of all TestCases in the file
tests = []
for name, thing in globs.iteritems():
if name.endswith('Test'):
tests.append((name, unittest.makeSuite(thing)))
# PY24: use key keyword arg
tests.sort(lambda x, y: cmp(x[0], y[0]))
suite = unittest.TestSuite()
suite.addTests([x[1] for x in tests])
runner.run(suite)
except Exception, exc:
err(testfile, 'running test', exc)
print >>sys.stderr, '==============================================='
if failed:
print >>sys.stderr, '%d of %d tests failed.' % \
(error_test_count, total_test_count)
print >>sys.stderr, 'Tests failed in:', ', '.join(failed)
return 1
else:
if total_test_count == 1:
print >>sys.stderr, '1 test happy.'
else:
print >>sys.stderr, 'All %d tests happy.' % total_test_count
return 0
if __name__ == '__main__':
sys.exit(run_tests())
|