SF.net SVN: jython:[7228] trunk/jython/Lib/test/regrtest.py

[email protected] Mon, 14 Mar 2011 01:51:34 +0000
Newsgroups gmane.comp.lang.jython.cvs
Message-ID <[email protected]>
Revision: 7228
          http://jython.svn.sourceforge.net/jython/?rev=7228&view=rev
Author:   pjenvey
Date:     2011-03-14 01:51:34 +0000 (Mon, 14 Mar 2011)

Log Message:
-----------
from:
https://svn.python.org/projects/python/branches/release26-maint/Lib/test/regrtest.py@83687

Modified Paths:
--------------
    trunk/jython/Lib/test/regrtest.py

Modified: trunk/jython/Lib/test/regrtest.py
===================================================================
--- trunk/jython/Lib/test/regrtest.py	2011-03-13 18:54:43 UTC (rev 7227)
+++ trunk/jython/Lib/test/regrtest.py	2011-03-14 01:51:34 UTC (rev 7228)
@@ -11,12 +11,10 @@
 -v: verbose    -- run tests in verbose mode with output to stdout
 -w: verbose2   -- re-run failed tests in verbose mode
 -q: quiet      -- don't print anything except if a test fails
--g: generate   -- write the output file for a test instead of comparing it
 -x: exclude    -- arguments are tests to *exclude*
 -s: single     -- run only a single test (see below)
+-S: slow       -- print the slowest 10 tests
 -r: random     -- randomize test execution order
--m: memo       -- save results to file
--j: junit-xml  -- save results as JUnit XML to files in directory
 -f: fromfile   -- read names of tests to run from a file (see below)
 -l: findleaks  -- if GC is available detect tests that leak memory
 -u: use        -- specify which special resource intensive tests to run
@@ -28,14 +26,11 @@
 -L: runleaks   -- run the leaks(1) command just before exit
 -R: huntrleaks -- search for reference leaks (needs debug build, v. slow)
 -M: memlimit   -- run very large memory-consuming tests
--e: expected  -- run only tests that are expected to run and pass
 
 If non-option arguments are present, they are names for tests to run,
 unless -x is given, in which case they are names for tests not to run.
 If no test names are given, all tests are run.
 
--v is incompatible with -g and does not compare test output files.
-
 -T turns on code coverage tracing with the trace module.
 
 -D specifies the directory where coverage files are put.
@@ -96,6 +91,8 @@
     curses -    Tests that use curses and will modify the terminal's
                 state and output modes.
 
+    lib2to3 -   Run the tests for 2to3 (They take a while.)
+
     largefile - It is okay to run some test that may create huge
                 files.  These tests can take a long time and may
                 consume >2GB of disk space temporarily.
@@ -124,15 +121,19 @@
 option '-uall,-bsddb'.
 """
 
-import os
-import sys
+import cStringIO
 import getopt
+import os
 import random
-import warnings
 import re
-import cStringIO
-import traceback
+import sys
 import time
+import traceback
+import warnings
+# keep a reference to the ascii module to workaround #7140 bug
+# (see issue #7027)
+import encodings.ascii
+import imp
 
 # I see no other way to suppress these warnings;
 # putting them in test_grammar.py has no effect:
@@ -168,7 +169,6 @@
         newsoft = min(hard, max(soft, 1024*2048))
         resource.setrlimit(resource.RLIMIT_STACK, (newsoft, hard))
 
-import test as _test
 from test import test_support
 
 RESOURCE_NAMES = ('audio', 'curses', 'largefile', 'network', 'bsddb',
@@ -181,11 +181,10 @@
     sys.exit(code)
 
 
-def main(tests=None, testdir=None, verbose=0, quiet=False, generate=False,
+def main(tests=None, testdir=None, verbose=0, quiet=False,
          exclude=False, single=False, randomize=False, fromfile=None,
          findleaks=False, use_resources=None, trace=False, coverdir='coverage',
-         runleaks=False, huntrleaks=False, verbose2=False, expected=False,
-         memo=None, junit_xml=None):
+         runleaks=False, huntrleaks=False, verbose2=False, print_slow=False):
     """Execute a test suite.
 
     This also parses command-line options and modifies its behavior
@@ -202,27 +201,25 @@
     command-line will be used.  If that's empty, too, then all *.py
     files beginning with test_ will be used.
 
-    The other default arguments (verbose, quiet, generate, exclude, single,
-    randomize, findleaks, use_resources, trace and coverdir) allow programmers
-    calling main() directly to set the values that would normally be set by
-    flags on the command line.
+    The other default arguments (verbose, quiet, exclude,
+    single, randomize, findleaks, use_resources, trace, coverdir, and
+    print_slow) allow programmers calling main() directly to set the
+    values that would normally be set by flags on the command line.
     """
 
     test_support.record_original_stdout(sys.stdout)
     try:
-        opts, args = getopt.getopt(sys.argv[1:], 'hvgqxsrf:lu:t:TD:NLR:wM:em:j:',
-                                   ['help', 'verbose', 'quiet', 'generate',
-                                    'exclude', 'single', 'random', 'fromfile',
+        opts, args = getopt.getopt(sys.argv[1:], 'hvqxsSrf:lu:t:TD:NLR:wM:',
+                                   ['help', 'verbose', 'quiet', 'exclude',
+                                    'single', 'slow', 'random', 'fromfile',
                                     'findleaks', 'use=', 'threshold=', 'trace',
                                     'coverdir=', 'nocoverdir', 'runleaks',
                                     'huntrleaks=', 'verbose2', 'memlimit=',
-                                    'expected', 'memo'
                                     ])
     except getopt.error, msg:
         usage(2, msg)
 
     # Defaults
-    allran = True
     if use_resources is None:
         use_resources = []
     for o, a in opts:
@@ -235,16 +232,12 @@
         elif o in ('-q', '--quiet'):
             quiet = True;
             verbose = 0
-        elif o in ('-g', '--generate'):
-            generate = True
         elif o in ('-x', '--exclude'):
             exclude = True
-            allran = False
-        elif o in ('-e', '--expected'):
-            expected = True
-            allran = False
         elif o in ('-s', '--single'):
             single = True
+        elif o in ('-S', '--slow'):
+            print_slow = True
         elif o in ('-r', '--randomize'):
             randomize = True
         elif o in ('-f', '--fromfile'):
@@ -253,10 +246,6 @@
             findleaks = True
         elif o in ('-L', '--runleaks'):
             runleaks = True
-        elif o in ('-m', '--memo'):
-            memo = a
-        elif o in ('-j', '--junit-xml'):
-            junit_xml = a
         elif o in ('-t', '--threshold'):
             import gc
             gc.set_threshold(int(a))
@@ -300,8 +289,10 @@
                         use_resources.remove(r)
                 elif r not in use_resources:
                     use_resources.append(r)
-    if generate and verbose:
-        usage(2, "-g and -v don't go together!")
+        else:
+            print >>sys.stderr, ("No handler for option {0}.  Please "
+                "report this as a bug at http://bugs.python.org.").format(o)
+            sys.exit(1)
     if single and fromfile:
         usage(2, "-s and -f don't go together!")
 
@@ -312,8 +303,6 @@
 
     if findleaks:
         try:
-            if test_support.is_jython:
-                raise ImportError()
             import gc
         except ImportError:
             print 'No GC available, disabling findleaks.'
@@ -348,7 +337,6 @@
     # Strip .py extensions.
     if args:
         args = map(removepy, args)
-        allran = False
     if tests:
         tests = map(removepy, tests)
 
@@ -369,27 +357,24 @@
         import trace
         tracer = trace.Trace(ignoredirs=[sys.prefix, sys.exec_prefix],
                              trace=False, count=True)
+    test_times = []
     test_support.verbose = verbose      # Tell tests to be moderately quiet
     test_support.use_resources = use_resources
-    test_support.junit_xml_dir = junit_xml
     save_modules = sys.modules.keys()
-    skips = _ExpectedSkips()
-    failures = _ExpectedFailures()
     for test in tests:
-        if expected and (test in skips or test in failures):
-            continue
         if not quiet:
             print test
             sys.stdout.flush()
         if trace:
             # If we're tracing code coverage, then we don't exit with status
             # if on a false return value from main.
-            tracer.runctx('runtest(test, generate, verbose, quiet, testdir)',
+            tracer.runctx('runtest(test, verbose, quiet,'
+                          '        test_times, testdir)',
                           globals=globals(), locals=vars())
         else:
             try:
-                ok = runtest(test, generate, verbose, quiet, testdir,
-                             huntrleaks, junit_xml)
+                ok = runtest(test, verbose, quiet, test_times,
+                             testdir, huntrleaks)
             except KeyboardInterrupt:
                 # print a newline separate from the ^C
                 print
@@ -417,38 +402,45 @@
         for module in sys.modules.keys():
             if module not in save_modules and module.startswith("test."):
                 test_support.unload(module)
-                module = module[5:]
-                if hasattr(_test, module):
-                    delattr(_test, module)
 
-    # The lists won't be sorted if running with -r
-    good.sort()
-    bad.sort()
-    skipped.sort()
-
     if good and not quiet:
         if not bad and not skipped and len(good) > 1:
             print "All",
         print count(len(good), "test"), "OK."
-        if verbose:
-            print "CAUTION:  stdout isn't compared in verbose mode:"
-            print "a test that passes in verbose mode may fail without it."
-    surprises = 0
-    if skipped and not quiet:
-        print count(len(skipped), "test"), "skipped:"
-        surprises += countsurprises(skips, skipped, 'skip', 'ran', allran, resource_denieds)
+    if print_slow:
+        test_times.sort(reverse=True)
+        print "10 slowest tests:"
+        for time, test in test_times[:10]:
+            print "%s: %.1fs" % (test, time)
     if bad:
         print count(len(bad), "test"), "failed:"
-        surprises += countsurprises(failures, bad, 'fail', 'passed', allran, resource_denieds)
+        printlist(bad)
+    if skipped and not quiet:
+        print count(len(skipped), "test"), "skipped:"
+        printlist(skipped)
 
+        e = _ExpectedSkips()
+        plat = sys.platform
+        if e.isvalid():
+            surprise = set(skipped) - e.getexpected() - set(resource_denieds)
+            if surprise:
+                print count(len(surprise), "skip"), \
+                      "unexpected on", plat + ":"
+                printlist(surprise)
+            else:
+                print "Those skips are all expected on", plat + "."
+        else:
+            print "Ask someone to teach regrtest.py about which tests are"
+            print "expected to get skipped on", plat + "."
+
     if verbose2 and bad:
         print "Re-running failed tests in verbose mode"
         for test in bad:
             print "Re-running test %r in verbose mode" % test
             sys.stdout.flush()
             try:
-                test_support.verbose = 1
-                ok = runtest(test, generate, 1, quiet, testdir,
+                test_support.verbose = True
+                ok = runtest(test, True, quiet, test_times, testdir,
                              huntrleaks)
             except KeyboardInterrupt:
                 # print a newline separate from the ^C
@@ -478,29 +470,32 @@
     if runleaks:
         os.system("leaks %d" % os.getpid())
 
-    if memo:
-        savememo(memo,good,bad,skipped)
+    sys.exit(len(bad) > 0)
 
-    sys.exit(surprises > 0)
 
-
 STDTESTS = [
     'test_grammar',
     'test_opcodes',
-    'test_operations',
+    'test_dict',
     'test_builtin',
     'test_exceptions',
     'test_types',
     'test_unittest',
     'test_doctest',
     'test_doctest2',
+    # On 2.6, when a C module like dl or linuxaudiodev is imported by some
+    # test, a DeprecationWarning is raised, but test_py3kwarn can not find
+    # it in the __warningregistry__ of the modules in sys.modules.
+    # C modules raise the warning only once, and since there's no way to
+    # find these warnings, test_py3kwarn is executed first to catch them
+    # before the other modules.  This shouldn't affect 2.7+
+    'test_py3kwarn',
    ]
 
 NOTTESTS = [
     'test_support',
     'test_future1',
     'test_future2',
-    'test_future3',
     ]
 
 def findtests(testdir=None, stdtests=STDTESTS, nottests=NOTTESTS):
@@ -516,15 +511,14 @@
     tests.sort()
     return stdtests + tests
 
-def runtest(test, generate, verbose, quiet, testdir=None, huntrleaks=False,
-            junit_xml=None):
+def runtest(test, verbose, quiet, test_times,
+            testdir=None, huntrleaks=False):
     """Run a single test.
 
     test -- the name of the test
-    generate -- if true, generate output, instead of running the test
-                and comparing it to a previously created output file
     verbose -- if true, print more messages
     quiet -- if true, don't print 'skipped' messages (probably redundant)
+    test_times -- a list of (time, test_name) pairs
     testdir -- test directory
     huntrleaks -- run multiple times to test for leaks; requires a debug
                   build; a triple corresponding to -R's three arguments
@@ -536,91 +530,61 @@
     """
 
     try:
-        return runtest_inner(test, generate, verbose, quiet, testdir,
-                             huntrleaks, junit_xml)
+        return runtest_inner(test, verbose, quiet, test_times,
+                             testdir, huntrleaks)
     finally:
         cleanup_test_droppings(test, verbose)
 
-def runtest_inner(test, generate, verbose, quiet,
-                     testdir=None, huntrleaks=False, junit_xml_dir=None):
+def runtest_inner(test, verbose, quiet, test_times,
+                  testdir=None, huntrleaks=False):
     test_support.unload(test)
     if not testdir:
         testdir = findtestdir()
-    outputdir = os.path.join(testdir, "output")
-    outputfile = os.path.join(outputdir, test)
     if verbose:
-        cfp = None
+        capture_stdout = None
     else:
-        cfp = cStringIO.StringIO()
+        capture_stdout = cStringIO.StringIO()
 
-    from test.junit_xml import Tee, write_direct_test
     try:
         save_stdout = sys.stdout
-
-        indirect_test = None
-        if junit_xml_dir:
-            save_stderr = sys.stderr
-            sys.stdout = stdout = Tee(sys.stdout)
-            sys.stderr = stderr = Tee(sys.stderr)
         try:
-            if cfp:
-                sys.stdout = cfp
-                print test              # Output file starts with test name
+            if capture_stdout:
+                sys.stdout = capture_stdout
             if test.startswith('test.'):
                 abstest = test
             else:
                 # Always import it from the test package
                 abstest = 'test.' + test
-            start = time.time()
+            start_time = time.time()
             the_package = __import__(abstest, globals(), locals(), [])
             the_module = getattr(the_package, test)
-            # Most tests run to completion simply as a side-effect of
-            # being imported.  For the benefit of tests that can't run
-            # that way (like test_threaded_import), explicitly invoke
-            # their test_main() function (if it exists).
+            # Old tests run to completion simply as a side-effect of
+            # being imported.  For tests based on unittest or doctest,
+            # explicitly invoke their test_main() function (if it exists).
             indirect_test = getattr(the_module, "test_main", None)
             if indirect_test is not None:
                 indirect_test()
-            elif junit_xml_dir:
-                write_direct_test(junit_xml_dir, abstest, time.time() - start,
-                                  stdout=stdout.getvalue(),
-                                  stderr=stderr.getvalue())
             if huntrleaks:
                 dash_R(the_module, test, indirect_test, huntrleaks)
+            test_time = time.time() - start_time
+            test_times.append((test_time, test))
         finally:
             sys.stdout = save_stdout
-            if junit_xml_dir:
-                sys.stderr = save_stderr
     except test_support.ResourceDenied, msg:
         if not quiet:
             print test, "skipped --", msg
             sys.stdout.flush()
-        if junit_xml_dir:
-            write_direct_test(junit_xml_dir, abstest, time.time() - start,
-                              'skipped', sys.exc_info(),
-                              stdout=stdout.getvalue(),
-                              stderr=stderr.getvalue())
         return -2
     except (ImportError, test_support.TestSkipped), msg:
         if not quiet:
             print test, "skipped --", msg
             sys.stdout.flush()
-        if junit_xml_dir:
-            write_direct_test(junit_xml_dir, abstest, time.time() - start,
-                              'skipped', sys.exc_info(),
-                              stdout=stdout.getvalue(),
-                              stderr=stderr.getvalue())
         return -1
     except KeyboardInterrupt:
         raise
     except test_support.TestFailed, msg:
         print "test", test, "failed --", msg
         sys.stdout.flush()
-        if junit_xml_dir and indirect_test is None:
-            write_direct_test(junit_xml_dir, abstest, time.time() - start,
-                              'failure', sys.exc_info(),
-                              stdout=stdout.getvalue(),
-                              stderr=stderr.getvalue())
         return 0
     except:
         type, value = sys.exc_info()[:2]
@@ -629,42 +593,19 @@
         if verbose:
             traceback.print_exc(file=sys.stdout)
             sys.stdout.flush()
-        if junit_xml_dir and indirect_test is None:
-            write_direct_test(junit_xml_dir, abstest, time.time() - start,
-                              'error', sys.exc_info(),
-                              stdout=stdout.getvalue(),
-                              stderr=stderr.getvalue())
         return 0
     else:
-        if not cfp:
+        # Except in verbose mode, tests should not print anything
+        if verbose or huntrleaks:
             return 1
-        output = cfp.getvalue()
-        if generate:
-            if output == test + "\n":
-                if os.path.exists(outputfile):
-                    # Write it since it already exists (and the contents
-                    # may have changed), but let the user know it isn't
-                    # needed:
-                    print "output file", outputfile, \
-                          "is no longer needed; consider removing it"
-                else:
-                    # We don't need it, so don't create it.
-                    return 1
-            fp = open(outputfile, "w")
-            fp.write(output)
-            fp.close()
+        output = capture_stdout.getvalue()
+        if not output:
             return 1
-        if os.path.exists(outputfile):
-            fp = open(outputfile, "r")
-            expected = fp.read()
-            fp.close()
-        else:
-            expected = test + "\n"
-        if output == expected or huntrleaks:
-            return 1
+        print "test", test, "produced unexpected output:"
+        print "*" * 70
+        print output
+        print "*" * 70
         sys.stdout.flush()
-        reportdiff(expected, output)
-        sys.stdout.flush()
         return 0
 
 def cleanup_test_droppings(testname, verbose):
@@ -700,7 +641,7 @@
 
 def dash_R(the_module, test, indirect_test, huntrleaks):
     # This code is hackish and inelegant, but it seems to do the job.
-    import copy_reg
+    import copy_reg, _abcoll, io
 
     if not hasattr(sys, 'gettotalrefcount'):
         raise Exception("Tracking reference leaks requires a debug build "
@@ -710,41 +651,56 @@
     fs = warnings.filters[:]
     ps = copy_reg.dispatch_table.copy()
     pic = sys.path_importer_cache.copy()
+    abcs = {}
+    modules = _abcoll, io
+    for abc in [getattr(mod, a) for mod in modules for a in mod.__all__]:
+        # XXX isinstance(abc, ABCMeta) leads to infinite recursion
+        if not hasattr(abc, '_abc_registry'):
+            continue
+        for obj in abc.__subclasses__() + [abc]:
+            abcs[obj] = obj._abc_registry.copy()
 
     if indirect_test:
         def run_the_test():
             indirect_test()
     else:
         def run_the_test():
-            reload(the_module)
+            imp.reload(the_module)
 
     deltas = []
     nwarmup, ntracked, fname = huntrleaks
     repcount = nwarmup + ntracked
     print >> sys.stderr, "beginning", repcount, "repetitions"
     print >> sys.stderr, ("1234567890"*(repcount//10 + 1))[:repcount]
-    dash_R_cleanup(fs, ps, pic)
+    dash_R_cleanup(fs, ps, pic, abcs)
     for i in range(repcount):
         rc = sys.gettotalrefcount()
         run_the_test()
         sys.stderr.write('.')
-        dash_R_cleanup(fs, ps, pic)
+        dash_R_cleanup(fs, ps, pic, abcs)
         if i >= nwarmup:
             deltas.append(sys.gettotalrefcount() - rc - 2)
     print >> sys.stderr
     if any(deltas):
-        print >> sys.stderr, test, 'leaked', deltas, 'references'
+        msg = '%s leaked %s references, sum=%s' % (test, deltas, sum(deltas))
+        print >> sys.stderr, msg
         refrep = open(fname, "a")
-        print >> refrep, test, 'leaked', deltas, 'references'
+        print >> refrep, msg
         refrep.close()
 
-def dash_R_cleanup(fs, ps, pic):
+def dash_R_cleanup(fs, ps, pic, abcs):
     import gc, copy_reg
-    import _strptime, linecache, dircache
+    import _strptime, linecache
+    dircache = test_support.import_module('dircache', deprecated=True)
     import urlparse, urllib, urllib2, mimetypes, doctest
     import struct, filecmp
     from distutils.dir_util import _path_created
 
+    # Clear the warnings registry, so they can be displayed again
+    for mod in sys.modules.values():
+        if hasattr(mod, '__warningregistry__'):
+            del mod.__warningregistry__
+
     # Restore some original values.
     warnings.filters[:] = fs
     copy_reg.dispatch_table.clear()
@@ -752,6 +708,15 @@
     sys.path_importer_cache.clear()
     sys.path_importer_cache.update(pic)
 
+    # clear type cache
+    sys._clear_type_cache()
+
+    # Clear ABC registries, restoring previously saved ABC registries.
+    for abc, registry in abcs.items():
+        abc._abc_registry = registry.copy()
+        abc._abc_cache.clear()
+        abc._abc_negative_cache.clear()
+
     # Clear assorted module caches.
     _path_created.clear()
     re.purge()
@@ -762,55 +727,13 @@
     dircache.reset()
     linecache.clearcache()
     mimetypes._default_mime_types()
-    struct._cache.clear()
     filecmp._cache.clear()
+    struct._clearcache()
     doctest.master = None
 
     # Collect cyclic trash.
     gc.collect()
 
-def reportdiff(expected, output):
-    import difflib
-    print "*" * 70
-    a = expected.splitlines(1)
-    b = output.splitlines(1)
-    sm = difflib.SequenceMatcher(a=a, b=b)
-    tuples = sm.get_opcodes()
-
-    def pair(x0, x1):
-        # x0:x1 are 0-based slice indices; convert to 1-based line indices.
-        x0 += 1
-        if x0 >= x1:
-            return "line " + str(x0)
-        else:
-            return "lines %d-%d" % (x0, x1)
-
-    for op, a0, a1, b0, b1 in tuples:
-        if op == 'equal':
-            pass
-
-        elif op == 'delete':
-            print "***", pair(a0, a1), "of expected output missing:"
-            for line in a[a0:a1]:
-                print "-", line,
-
-        elif op == 'replace':
-            print "*** mismatch between", pair(a0, a1), "of expected", \
-                  "output and", pair(b0, b1), "of actual output:"
-            for line in difflib.ndiff(a[a0:a1], b[b0:b1]):
-                print line,
-
-        elif op == 'insert':
-            print "***", pair(b0, b1), "of actual output doesn't appear", \
-                  "in expected output after line", str(a1)+":"
-            for line in b[b0:b1]:
-                print "+", line,
-
-        else:
-            print "get_opcodes() returned bad tuple?!?!", (op, a0, a1, b0, b1)
-
-    print "*" * 70
-
 def findtestdir():
     if __name__ == '__main__':
         file = sys.argv[0]
@@ -840,26 +763,10 @@
 
     from textwrap import fill
     blanks = ' ' * indent
-    print fill(' '.join(map(str, sorted(x))), width,
+    # Print the sorted list: 'x' may be a '--random' list or a set()
+    print fill(' '.join(str(elt) for elt in sorted(x)), width,
                initial_indent=blanks, subsequent_indent=blanks)
 
-def countsurprises(expected, actual, action, antiaction, allran, resource_denieds):
-    """returns the number of items in actual that aren't in expected."""
-    printlist(actual)
-    if not expected.isvalid():
-        print "Ask someone to teach regrtest.py about which tests are"
-        print "expected to %s on %s." % (action, sys.platform)
-        return 1#Surprising not to know what to expect....
-    good_surprise = expected.getexpected() - set(actual)
-    if allran and good_surprise:
-        print count(len(good_surprise), 'test'), antiaction, 'unexpectedly:'
-        printlist(good_surprise)
-    bad_surprise = set(actual) - expected.getexpected() - set(resource_denieds)
-    if bad_surprise:
-        print count(len(bad_surprise), action), "unexpected:"
-        printlist(bad_surprise)
-    return len(bad_surprise)
-
 # Map sys.platform to a string containing the basenames of tests
 # expected to be skipped on that platform.
 #
@@ -873,17 +780,16 @@
 #     test_timeout
 #         Controlled by test_timeout.skip_expected.  Requires the network
 #         resource and a socket module.
+#
+# Tests that are expected to be skipped everywhere except on one platform
+# are also handled separately.
 
 _expectations = {
     'win32':
         """
         test__locale
-        test_applesingle
-        test_al
         test_bsddb185
         test_bsddb3
-        test_cd
-        test_cl
         test_commands
         test_crypt
         test_curses
@@ -891,24 +797,22 @@
         test_dl
         test_fcntl
         test_fork1
+        test_epoll
         test_gdbm
-        test_gl
         test_grp
-        test_imgfile
         test_ioctl
         test_largefile
-        test_linuxaudiodev
+        test_kqueue
         test_mhlib
-        test_nis
         test_openpty
         test_ossaudiodev
+        test_pipes
         test_poll
         test_posix
         test_pty
         test_pwd
         test_resource
         test_signal
-        test_sunaudiodev
         test_threadsignals
         test_timing
         test_wait3
@@ -916,34 +820,20 @@
         """,
     'linux2':
         """
-        test_al
-        test_applesingle
         test_bsddb185
-        test_cd
-        test_cl
         test_curses
         test_dl
-        test_gl
-        test_imgfile
         test_largefile
-        test_linuxaudiodev
-        test_nis
-        test_ntpath
+        test_kqueue
         test_ossaudiodev
-        test_sqlite
-        test_startfile
-        test_sunaudiodev
         """,
    'mac':
         """
-        test_al
         test_atexit
         test_bsddb
         test_bsddb185
         test_bsddb3
         test_bz2
-        test_cd
-        test_cl
         test_commands
         test_crypt
         test_curses
@@ -951,16 +841,13 @@
         test_dl
         test_fcntl
         test_fork1
-        test_gl
+        test_epoll
         test_grp
         test_ioctl
-        test_imgfile
         test_largefile
-        test_linuxaudiodev
         test_locale
+        test_kqueue
         test_mmap
-        test_nis
-        test_ntpath
         test_openpty
         test_ossaudiodev
         test_poll
@@ -971,88 +858,55 @@
         test_pwd
         test_resource
         test_signal
-        test_sqlite
-        test_startfile
-        test_sunaudiodev
         test_sundry
         test_tarfile
         test_timing
         """,
     'unixware7':
         """
-        test_al
-        test_applesingle
         test_bsddb
         test_bsddb185
-        test_cd
-        test_cl
         test_dl
-        test_gl
-        test_imgfile
+        test_epoll
         test_largefile
-        test_linuxaudiodev
+        test_kqueue
         test_minidom
-        test_nis
-        test_ntpath
         test_openpty
         test_pyexpat
         test_sax
-        test_startfile
-        test_sqlite
-        test_sunaudiodev
         test_sundry
         """,
     'openunix8':
         """
-        test_al
-        test_applesingle
         test_bsddb
         test_bsddb185
-        test_cd
-        test_cl
         test_dl
-        test_gl
-        test_imgfile
+        test_epoll
         test_largefile
-        test_linuxaudiodev
+        test_kqueue
         test_minidom
-        test_nis
-        test_ntpath
         test_openpty
         test_pyexpat
         test_sax
-        test_sqlite
-        test_startfile
-        test_sunaudiodev
         test_sundry
         """,
     'sco_sv3':
         """
-        test_al
-        test_applesingle
         test_asynchat
         test_bsddb
         test_bsddb185
-        test_cd
-        test_cl
         test_dl
         test_fork1
+        test_epoll
         test_gettext
-        test_gl
-        test_imgfile
         test_largefile
-        test_linuxaudiodev
         test_locale
+        test_kqueue
         test_minidom
-        test_nis
-        test_ntpath
         test_openpty
         test_pyexpat
         test_queue
         test_sax
-        test_sqlite
-        test_startfile
-        test_sunaudiodev
         test_sundry
         test_thread
         test_threaded_import
@@ -1061,40 +915,30 @@
         """,
     'riscos':
         """
-        test_al
-        test_applesingle
         test_asynchat
         test_atexit
         test_bsddb
         test_bsddb185
         test_bsddb3
-        test_cd
-        test_cl
         test_commands
         test_crypt
         test_dbm
         test_dl
         test_fcntl
         test_fork1
+        test_epoll
         test_gdbm
-        test_gl
         test_grp
-        test_imgfile
         test_largefile
-        test_linuxaudiodev
         test_locale
+        test_kqueue
         test_mmap
-        test_nis
-        test_ntpath
         test_openpty
         test_poll
         test_popen2
         test_pty
         test_pwd
         test_strop
-        test_sqlite
-        test_startfile
-        test_sunaudiodev
         test_sundry
         test_thread
         test_threaded_import
@@ -1105,452 +949,232 @@
     'darwin':
         """
         test__locale
-        test_al
         test_bsddb
         test_bsddb3
-        test_cd
-        test_cl
         test_curses
+        test_epoll
         test_gdbm
-        test_gl
-        test_imgfile
         test_largefile
-        test_linuxaudiodev
         test_locale
+        test_kqueue
         test_minidom
-        test_nis
-        test_ntpath
         test_ossaudiodev
         test_poll
-        test_sqlite
-        test_startfile
-        test_sunaudiodev
         """,
     'sunos5':
         """
-        test_al
-        test_applesingle
         test_bsddb
         test_bsddb185
-        test_cd
-        test_cl
         test_curses
         test_dbm
+        test_epoll
+        test_kqueue
         test_gdbm
-        test_gl
         test_gzip
-        test_imgfile
-        test_linuxaudiodev
         test_openpty
-        test_sqlite
-        test_startfile
         test_zipfile
         test_zlib
         """,
     'hp-ux11':
         """
-        test_al
-        test_applesingle
         test_bsddb
         test_bsddb185
-        test_cd
-        test_cl
         test_curses
         test_dl
+        test_epoll
         test_gdbm
-        test_gl
         test_gzip
-        test_imgfile
         test_largefile
-        test_linuxaudiodev
         test_locale
+        test_kqueue
         test_minidom
-        test_nis
-        test_ntpath
         test_openpty
         test_pyexpat
         test_sax
-        test_sqlite
-        test_startfile
-        test_sunaudiodev
         test_zipfile
         test_zlib
         """,
     'atheos':
         """
-        test_al
-        test_applesingle
         test_bsddb185
-        test_cd
-        test_cl
         test_curses
         test_dl
         test_gdbm
-        test_gl
-        test_imgfile
+        test_epoll
         test_largefile
-        test_linuxaudiodev
         test_locale
+        test_kqueue
         test_mhlib
         test_mmap
-        test_nis
         test_poll
         test_popen2
         test_resource
-        test_sqlite
-        test_startfile
-        test_sunaudiodev
         """,
     'cygwin':
         """
-        test_al
-        test_applesingle
         test_bsddb185
         test_bsddb3
-        test_cd
-        test_cl
         test_curses
         test_dbm
-        test_gl
-        test_imgfile
+        test_epoll
         test_ioctl
+        test_kqueue
         test_largefile
-        test_linuxaudiodev
         test_locale
-        test_nis
         test_ossaudiodev
         test_socketserver
-        test_sqlite
-        test_sunaudiodev
         """,
     'os2emx':
         """
-        test_al
-        test_applesingle
         test_audioop
         test_bsddb185
         test_bsddb3
-        test_cd
-        test_cl
         test_commands
         test_curses
         test_dl
-        test_gl
-        test_imgfile
+        test_epoll
+        test_kqueue
         test_largefile
-        test_linuxaudiodev
         test_mhlib
         test_mmap
-        test_nis
         test_openpty
         test_ossaudiodev
         test_pty
         test_resource
         test_signal
-        test_sqlite
-        test_startfile
-        test_sunaudiodev
         """,
     'freebsd4':
         """
-        test_aepack
-        test_al
-        test_applesingle
         test_bsddb
         test_bsddb3
-        test_cd
-        test_cl
+        test_epoll
         test_gdbm
-        test_gl
-        test_imgfile
-        test_linuxaudiodev
         test_locale
-        test_macfs
-        test_macostools
-        test_nis
         test_ossaudiodev
         test_pep277
-        test_plistlib
         test_pty
-        test_scriptpackages
         test_socket_ssl
         test_socketserver
-        test_sqlite
-        test_startfile
-        test_sunaudiodev
         test_tcl
         test_timeout
-        test_unicode_file
         test_urllibnet
-        test_winreg
-        test_winsound
+        test_multiprocessing
         """,
     'aix5':
         """
-        test_aepack
-        test_al
-        test_applesingle
         test_bsddb
         test_bsddb185
         test_bsddb3
         test_bz2
-        test_cd
-        test_cl
         test_dl
+        test_epoll
         test_gdbm
-        test_gl
         test_gzip
-        test_imgfile
-        test_linuxaudiodev
-        test_macfs
-        test_macostools
-        test_nis
+        test_kqueue
         test_ossaudiodev
-        test_sqlite
-        test_startfile
-        test_sunaudiodev
         test_tcl
-        test_winreg
-        test_winsound
         test_zipimport
         test_zlib
         """,
     'openbsd3':
         """
-        test_aepack
-        test_al
-        test_applesingle
         test_bsddb
         test_bsddb3
-        test_cd
-        test_cl
         test_ctypes
         test_dl
+        test_epoll
         test_gdbm
-        test_gl
-        test_imgfile
-        test_linuxaudiodev
         test_locale
-        test_macfs
-        test_macostools
-        test_nis
         test_normalization
         test_ossaudiodev
         test_pep277
-        test_plistlib
-        test_scriptpackages
         test_tcl
-        test_sqlite
-        test_startfile
-        test_sunaudiodev
-        test_unicode_file
-        test_winreg
-        test_winsound
+        test_multiprocessing
         """,
     'netbsd3':
         """
-        test_aepack
-        test_al
-        test_applesingle
         test_bsddb
         test_bsddb185
         test_bsddb3
-        test_cd
-        test_cl
         test_ctypes
         test_curses
         test_dl
+        test_epoll
         test_gdbm
-        test_gl
-        test_imgfile
-        test_linuxaudiodev
         test_locale
-        test_macfs
-        test_macostools
-        test_nis
         test_ossaudiodev
         test_pep277
-        test_sqlite
-        test_startfile
-        test_sunaudiodev
         test_tcl
-        test_unicode_file
-        test_winreg
-        test_winsound
+        test_multiprocessing
         """,
-    'java':
-        """
-        test__locale
-        test__rawffi
-        test_aepack
-        test_al
-        test_applesingle
-        test_audioop
-        test_bsddb
-        test_bsddb185
-        test_bsddb3
-        test_bz2
-        test_cProfile
-        test_capi
-        test_cd
-        test_cl
-        test_commands
-        test_crypt
-        test_ctypes
-        test_curses
-        test_dbm
-        test_dl
-        test_email_codecs
-        test_fcntl
-        test_fork1
-        test_gdbm
-        test_getargs2
-        test_gl
-        test_hotshot
-        test_imageop
-        test_imgfile
-        test_ioctl
-        test_largefile
-        test_linuxaudiodev
-        test_locale
-        test_longexp
-        test_macfs
-        test_macostools
-        test_mmap
-        test_nis
-        test_normalization
-        test_openpty
-        test_ossaudiodev
-        test_parser
-        test_plistlib
-        test_poll
-        test_pty
-        test_resource
-        test_rgbimg
-        test_scriptpackages
-        test_socket_ssl
-        test_socketserver
-        test_sqlite
-        test_startfile
-        test_strop
-        test_structmembers
-        test_sunaudiodev
-        test_sundry
-        test_symtable
-        test_tcl
-        test_timeout
-        test_unicode_file
-        test_wait3
-        test_wait4
-        test_wave
-        test_winreg
-        test_winsound
-        test_zipfile64
-
-        test_gzip
-        test_ftplib
-        test_logging
-        test_poplib
-        test_pydoc
-        test_queue
-        test_smtplib
-        test_telnetlib
-        """
 }
 _expectations['freebsd5'] = _expectations['freebsd4']
 _expectations['freebsd6'] = _expectations['freebsd4']
 _expectations['freebsd7'] = _expectations['freebsd4']
+_expectations['freebsd8'] = _expectations['freebsd4']
 
-_failures = {
-    'java':
-        """
-        test_codecencodings_cn
-        test_codecencodings_hk
-        test_codecencodings_jp
-        test_codecencodings_kr
-        test_codecencodings_tw
-        test_codecmaps_cn
-        test_codecmaps_hk
-        test_codecmaps_jp
-        test_codecmaps_kr
-        test_codecmaps_tw
-        test_compiler
-        test_dis
-        test_dummy_threading
-        test_eof
-        test_frozen
-        test_gc
-        test_import
-        test_iterlen
-        test_multibytecodec
-        test_multibytecodec_support
-        test_peepholer
-        test_pyclbr
-        test_pyexpat
-        test_stringprep
-        test_threadsignals
-        test_transformer
-        test_ucn
-        test_unicodedata
-        test_zipimport
-        """,
-}
-
-_platform = sys.platform
-if _platform[:4] == 'java':
-    _platform = 'java'
-    if os._name == 'nt':
-        # XXX: Omitted for now because it fails so miserably and ruins
-        # other tests
-        _failures['java'] += '\ntest_mailbox'
-        if ' ' in sys.executable:
-            # http://bugs.python.org/issue1559298
-            _failures['java'] += '\ntest_popen'
-
 class _ExpectedSkips:
     def __init__(self):
         import os.path
-        from test import test_socket_ssl
         from test import test_timeout
 
         self.valid = False
-        if _platform in _expectations:
-            s = _expectations[_platform]
+        if sys.platform in _expectations:
+            s = _expectations[sys.platform]
             self.expected = set(s.split())
 
+            # expected to be skipped on every platform, even Linux
+            self.expected.add('test_linuxaudiodev')
+
             if not os.path.supports_unicode_filenames:
                 self.expected.add('test_pep277')
 
-            if test_socket_ssl.skip_expected:
-                self.expected.add('test_socket_ssl')
+            try:
+                from test import test_socket_ssl
+            except ImportError:
+                pass
+            else:
+                if test_socket_ssl.skip_expected:
+                    self.expected.add('test_socket_ssl')
 
             if test_timeout.skip_expected:
                 self.expected.add('test_timeout')
 
             if sys.maxint == 9223372036854775807L:
-                self.expected.add('test_rgbimg')
                 self.expected.add('test_imageop')
 
             if not sys.platform in ("mac", "darwin"):
-                MAC_ONLY = ["test_macostools", "test_macfs", "test_aepack",
-                            "test_plistlib", "test_scriptpackages"]
+                MAC_ONLY = ["test_macos", "test_macostools", "test_aepack",
+                            "test_plistlib", "test_scriptpackages",
+                            "test_applesingle"]
                 for skip in MAC_ONLY:
                     self.expected.add(skip)
+            elif len(u'\0'.encode('unicode-internal')) == 4:
+                self.expected.add("test_macostools")
 
+
             if sys.platform != "win32":
+                # test_sqlite is only reliable on Windows where the library
+                # is distributed with Python
                 WIN_ONLY = ["test_unicode_file", "test_winreg",
-                            "test_winsound"]
+                            "test_winsound", "test_startfile",
+                            "test_sqlite"]
                 for skip in WIN_ONLY:
                     self.expected.add(skip)
 
-            if test_support.is_jython:
-                if os._name != 'posix':
-                    self.expected.update([
-                            'test_grp', 'test_mhlib', 'test_posix', 'test_pwd',
-                            'test_signal'])
-                if os._name != 'nt':
-                    self.expected.add('test_nt_paths_jy')
+            if sys.platform != 'irix':
+                IRIX_ONLY = ["test_imageop", "test_al", "test_cd", "test_cl",
+                             "test_gl", "test_imgfile"]
+                for skip in IRIX_ONLY:
+                    self.expected.add(skip)
 
+            if sys.platform != 'sunos5':
+                self.expected.add('test_sunaudiodev')
+                self.expected.add('test_nis')
+
+            if not sys.py3kwarning:
+                self.expected.add('test_py3kwarn')
+
             self.valid = True
 
     def isvalid(self):
@@ -1566,28 +1190,6 @@
         assert self.isvalid()
         return self.expected
 
-    def __contains__(self, key):
-        return key in self.expected
-
-class _ExpectedFailures(_ExpectedSkips):
-    def __init__(self):
-        self.valid = False
-        if _platform in _failures:
-            s = _failures[_platform]
-            self.expected = set(s.split())
-            self.valid = True
-
-def savememo(memo,good,bad,skipped):
-    f = open(memo,'w')
-    try:
-        for n,l in [('good',good),('bad',bad),('skipped',skipped)]:
-            print >>f,"%s = [" % n
-            for x in l:
-                print >>f,"    %r," % x
-            print >>f," ]"
-    finally:
-        f.close()
-
 if __name__ == '__main__':
     # Remove regrtest.py's own directory from the module search path.  This
     # prevents relative imports from working, and relative imports will screw
@@ -1596,11 +1198,9 @@
     # much of the testing framework relies on the globals in the
     # test.test_support module.
     mydir = os.path.abspath(os.path.normpath(os.path.dirname(sys.argv[0])))
-    i = pathlen = len(sys.path)
+    i = len(sys.path)
     while i >= 0:
         i -= 1
         if os.path.abspath(os.path.normpath(sys.path[i])) == mydir:
             del sys.path[i]
-    if len(sys.path) == pathlen:
-        print 'Could not find %r in sys.path to remove it' % mydir
     main()


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.

------------------------------------------------------------------------------
Colocation vs. Managed Hosting
A question and answer guide to determining the best fit
for your organization - today and in the future.
http://p.sf.net/sfu/internap-sfd2d