classicregrtest.py :  » Development » Psyco » psyco-dist » test » Python Open Source

Home
Python Open Source
1.3.1.2 Python
2.Ajax
3.Aspect Oriented
4.Blog
5.Build
6.Business Application
7.Chart Report
8.Content Management Systems
9.Cryptographic
10.Database
11.Development
12.Editor
13.Email
14.ERP
15.Game 2D 3D
16.GIS
17.GUI
18.IDE
19.Installer
20.IRC
21.Issue Tracker
22.Language Interface
23.Log
24.Math
25.Media Sound Audio
26.Mobile
27.Network
28.Parser
29.PDF
30.Project Management
31.RSS
32.Search
33.Security
34.Template Engines
35.Test
36.UML
37.USB Serial
38.Web Frameworks
39.Web Server
40.Web Services
41.Web Unit
42.Wiki
43.Windows
44.XML
Python Open Source » Development » Psyco 
Psyco » psyco dist » test » classicregrtest.py
import sys, os, StringIO, psyco, psyco.logger

LOGFILE = 'log-regrtest-psyco'


#NO_SYS_GETFRAME = """using sys._getframe() fails with Psyco"""

#NO_THREAD = """XXX not reliable, check if Psyco is generally
#        unreliable with threads or if there is another problem"""

#NO_PICKLE = """pickles function objects that Psyco rebinds"""

#NO_SYS_EXC = """XXX Psyco does not set sys.exc_xxx upon exception"""


SKIP = {'test_gc': "test_gc.test_frame() does not create a cycle with Psyco's limited frames",
#        'test_thread': NO_THREAD,
#        'test_asynchat': NO_THREAD,
#        'test_extcall': 'prints to stdout a function object that Psyco rebinds',
        'test_descr': 'seems that it mutates user-defined types and Psyco does not like it at all',
#        'test_pickle': NO_PICKLE,
#        'test_cpickle': NO_PICKLE,
#        'test_re': NO_PICKLE,
#        'test_sre': NO_SYS_EXC,
#        'test_string': NO_SYS_EXC,
#        'test_unicode': NO_SYS_EXC,
#        'test_inspect': 'gets confused with Psyco rebinding functions',
        'test_profilehooks': 'profiling does not see all functions run by Psyco',
        'test_profile': 'profiling does not see all functions run by Psyco',
        'test_repr': 'self-nested tuples and lists not supported',
        'test_builtin': 'vars() and locals() not supported',
        'test_inspect': 'does not run even in Python (when called the way classicregrtest.py calls it) and leaves buggy temp files around',
        'test_trace': 'no line tracing with Psyco',
        'test_threaded_import': 'Python hang-ups',
        'test_hotshot': "PyEval_SetProfile(NULL,NULL) doesn't allow Psyco to take control back",
        'test_coercion': 'uses eval() with locals',
        'test_weakref': 'incompatible with early unused variable deletion',
        }
#    SKIP['test_operator'] = NO_SYS_EXC
#    SKIP['test_strop'] = NO_SYS_EXC
if sys.version_info[:2] >= (2,3):
    SKIP['test_threadedtempfile'] = 'Python bug: Python test just hangs up'

if hasattr(psyco._psyco, 'VERBOSE_LEVEL'):
    SKIP['test_popen2'] = 'gets confused by Psyco debugging output to stderr'

GROUP_TESTS = 5    # number of tests to run per Python process


if '' in sys.path:
    sys.path.remove('')  # don't import the test.py in this directory!

from test import regrtest,test_support

repeat_counter = 4


def alltests():
    import random
    # randomize the list of tests, but try to ensure that we start with
    # not-already-seen tests and only after go on with the rest
    try:
        os.unlink(LOGFILE)
    except OSError:
        pass
    filename = "tmp_tests_passed"
    try:
        f = open(filename)
        tests_passed = eval(f.read())
        f.close()
    except IOError:
        tests_passed = {}
    testlist = regrtest.findtests()
    testlist = [test for test in testlist if not tests_passed.has_key(test)]
    random.shuffle(testlist)
    testlist1 = tests_passed.keys()
    random.shuffle(testlist1)
    print '\t'.join(['Scheduled tests:']+testlist)
    if testlist1:
        print '%d more tests were already passed and are scheduled to run thereafter.' % len(testlist1)
    testlist += testlist1
    while testlist:
        print '='*40
        tests1 = testlist[:GROUP_TESTS]
        del testlist[:GROUP_TESTS]
        err = os.system('"%s" %s %s' % (sys.executable, sys.argv[0],
                                          ' '.join(tests1)))
        if err:
            print '*** exited with error code', err
            return err
        for test in tests1:
            tests_passed[test] = 1
        f = open(filename, 'w')
        f.write(repr(tests_passed))
        f.close()
    print "="*60
    print
    print "Classic Regression Tests with Psyco successfully completed."
    print "All tests that succeeded twice in the same Python process"
    print "also succeeded %d more times with Psyco activated." % repeat_counter
    print
    try:
        os.unlink(filename)
    except:
        pass
    print "Psyco compilation flags:",
    d = psyco._psyco.__dict__
    if not d.has_key('ALL_CHECKS'):
        print "Release mode",
    for key in d.keys():
        if key == key.upper() and type(d[key]) == type(0):
            print "%s=%s" % (key, hex(d[key])),
    print

def python_check(test):
    if SKIP.has_key(test):
        print '%s skipped -- %s' % (test, SKIP[test])
        return 0
    for i in range(min(repeat_counter, 2)):
        print '%s, Python iteration %d' % (test, i+1)
        ok = regrtest.runtest(test, 0, 0, 0)
        special_cleanup()
        if ok <= 0:
            return 0   # skipped or failed -- don't test with Psyco
    return 1

def main(testlist, verbose=0, use_resources=None):
    if use_resources is None:
        use_resources = []
    test_support.verbose = verbose      # Tell tests to be moderately quiet
    test_support.use_resources = use_resources
    
    if type(testlist) == type(""):
        testlist = [testlist]
    if not verbose:
        testlist = filter(python_check, testlist)

    # Psyco selective compilation is only activated here
    psyco.log(LOGFILE, 'a')
    for test in testlist:
        psyco.logger.write('with test ' + test, 1)
    psyco.full()
    #print "sleeping, time for a Ctrl-C !..."
    #import time; time.sleep(1.5)


    for test in testlist:
        for i in range(repeat_counter):
            print '%s, Psyco iteration %d' % (test, i+1)
            ok = regrtest.runtest(test, 0, verbose, 0)
            special_cleanup()
            if ok == 0:
                return 0
            elif ok < 0:
                break
    return 1

def special_cleanup():
    try:
        dircache = sys.modules['dircache']
    except KeyError:
        pass
    else:
        for key in dircache.cache.keys():
            del dircache.cache[key]


if __name__ == '__main__':
    if len(sys.argv) <= 1:
        sys.exit(alltests() or 0)
    else:
        try:
            err = not main(sys.argv[1:])
        finally:
            # Write psyco.dump
            psyco.dumpcodebuf()
        if err:
            sys.exit(2)
www.java2java.com | Contact Us
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.