Merged revisions 70734,70775,70856,70874,70876-70877 via svnmerge

........
  r70734 | r.david.murray | 2009-03-30 15:04:00 -0400 (Mon, 30 Mar 2009) | 7 lines

  Add import_function method to test.test_support, and modify a number of
  tests that expect to be skipped if imports fail or functions don't
  exist to use import_function and import_module.  The ultimate goal is
  to change regrtest to not skip automatically on ImportError.  Checking
  in now to make sure the buldbots don't show any errors on platforms
  I can't direct test on.
........
  r70775 | r.david.murray | 2009-03-30 19:05:48 -0400 (Mon, 30 Mar 2009) | 4 lines

  Change more tests to use import_module for the modules that
  should cause tests to be skipped.  Also rename import_function
  to the more descriptive get_attribute and add a docstring.
........
  r70856 | r.david.murray | 2009-03-31 14:32:17 -0400 (Tue, 31 Mar 2009) | 7 lines

  A few more test skips via import_module, and change import_module to
  return the error message produced by importlib, so that if an import
  in the package whose import is being wrapped is what failed the skip
  message will contain the name of that module instead of the name of the
  wrapped module.  Also fixed formatting of some previous comments.
........
  r70874 | r.david.murray | 2009-03-31 15:33:15 -0400 (Tue, 31 Mar 2009) | 5 lines

  Improve test_support.import_module docstring, remove
  deprecated flag from get_attribute since it isn't likely
  to do anything useful.
........
  r70876 | r.david.murray | 2009-03-31 15:49:15 -0400 (Tue, 31 Mar 2009) | 4 lines

  Remove the regrtest check that turns any ImportError into a skipped test.
  Hopefully all modules whose imports legitimately result in a skipped
  test have been properly wrapped by the previous commits.
........
  r70877 | r.david.murray | 2009-03-31 15:57:24 -0400 (Tue, 31 Mar 2009) | 2 lines

  Add NEWS entry for regrtest change.
........
This commit is contained in:
R. David Murray 2009-03-31 23:16:50 +00:00
parent a1b49013f4
commit a21e4ca3c6
30 changed files with 124 additions and 67 deletions

View File

@ -628,7 +628,7 @@ def runtest_inner(test, generate, verbose, quiet, test_times,
print(test, "skipped --", msg)
sys.stdout.flush()
return -2
except (ImportError, unittest.SkipTest) as msg:
except unittest.SkipTest as msg:
if not quiet:
print(test, "skipped --", msg)
sys.stdout.flush()

View File

@ -12,6 +12,7 @@ import platform
import shutil
import warnings
import unittest
import importlib
__all__ = ["Error", "TestFailed", "ResourceDenied", "import_module",
"verbose", "use_resources", "max_memuse", "record_original_stdout",
@ -24,7 +25,7 @@ __all__ = ["Error", "TestFailed", "ResourceDenied", "import_module",
"TransientResource", "transient_internet", "run_with_locale",
"set_memlimit", "bigmemtest", "bigaddrspacetest", "BasicTestRunner",
"run_unittest", "run_doctest", "threading_setup", "threading_cleanup",
"reap_children", "cpython_only", "check_impl_detail"]
"reap_children", "cpython_only", "check_impl_detail", "get_attribute"]
class Error(Exception):
"""Base class for regression test exceptions."""
@ -41,19 +42,32 @@ class ResourceDenied(unittest.SkipTest):
"""
def import_module(name, deprecated=False):
"""Import the module to be tested, raising SkipTest if it is not
available."""
"""Import and return the module to be tested, raising SkipTest if
it is not available.
If deprecated is True, any module or package deprecation messages
will be suppressed."""
with warnings.catch_warnings():
if deprecated:
warnings.filterwarnings("ignore", ".+ (module|package)",
DeprecationWarning)
try:
module = __import__(name, level=0)
except ImportError:
raise unittest.SkipTest("No module named " + name)
module = importlib.import_module(name)
except ImportError as msg:
raise unittest.SkipTest(str(msg))
else:
return module
def get_attribute(obj, name):
"""Get an attribute, raising SkipTest if AttributeError is raised."""
try:
attribute = getattr(obj, name)
except AttributeError:
raise unittest.SkipTest("module %s has no attribute %s" % (
obj.__name__, name))
else:
return attribute
verbose = 1 # Flag set to 0 by regrtest.py
use_resources = None # Flag set to [] by regrtest.py
max_memuse = 0 # Disable bigmem tests (they will still be run with

View File

@ -1,10 +1,13 @@
# test asynchat -- requires threading
# test asynchat
from test import support
# If this fails, the test will be skipped.
thread = support.import_module('_thread')
import _thread as thread # If this fails, we can't test this module
import asyncore, asynchat, socket, threading, time
import unittest
import sys
from test import support
HOST = support.HOST
SERVER_QUIT = b'QUIT\n'

View File

@ -8,7 +8,9 @@ import os
import subprocess
import sys
import bz2
# Skip tests if the bz2 module doesn't exist.
bz2 = support.import_module('bz2')
from bz2 import BZ2File, BZ2Compressor, BZ2Decompressor
has_cmdline_bunzip2 = sys.platform not in ("win32", "os2emx")

View File

@ -1,6 +1,7 @@
from test import support
import unittest
import crypt
crypt = support.import_module('crypt')
class CryptTestCase(unittest.TestCase):

View File

@ -1,6 +1,10 @@
import unittest
from test.support import run_unittest
from test.support import run_unittest, import_module
# Skip tests if _ctypes module was not built.
import_module('_ctypes')
import ctypes.test
def test_main():

View File

@ -9,16 +9,19 @@
# Only called, not tested: getmouse(), ungetmouse()
#
import curses, sys, tempfile, os
import curses.panel
import sys, tempfile, os
# Optionally test curses module. This currently requires that the
# 'curses' resource be given on the regrtest command line using the -u
# option. If not available, nothing after this line will be executed.
from test.support import requires
from test.support import requires, import_module
requires('curses')
# If either of these don't exist, skip the tests.
curses = import_module('curses')
curses.panel = import_module('curses.panel')
# XXX: if newterm was supported we could use it instead of initscr and not exit
term = os.environ.get('TERM')
if not term or term == 'unknown':

View File

@ -3,10 +3,12 @@
import os
import unittest
import dbm
import glob
import test.support
# Skip tests if dbm module doesn't exist.
dbm = test.support.import_module('dbm')
_fname = test.support.TESTFN
#

View File

@ -3,12 +3,15 @@
OS/2+EMX doesn't support the file locking operations.
"""
import fcntl
import os
import struct
import sys
import unittest
from test.support import verbose, TESTFN, unlink, run_unittest
from test.support import verbose, TESTFN, unlink, run_unittest, import_module
# Skip test if no fnctl module.
fcntl = import_module('fcntl')
# TODO - Write tests for flock() and lockf().

View File

@ -3,14 +3,12 @@
import os
import time
import unittest
from test.fork_wait import ForkWait
from test.support import run_unittest, reap_children
from test.support import run_unittest, reap_children, get_attribute
# Skip test if fork does not exist.
get_attribute(os, 'fork')
try:
os.fork
except AttributeError:
raise unittest.SkipTest("os.fork not defined -- skipping test_fork1")
class ForkTest(ForkWait):
def wait_impl(self, cpid):

View File

@ -1,9 +1,10 @@
"""Test script for the grp module."""
import grp
import unittest
from test import support
grp = support.import_module('grp')
class GroupDatabaseTestCase(unittest.TestCase):
def check_value(self, value):

View File

@ -1,12 +1,9 @@
import unittest
from test.support import run_unittest
from test.support import run_unittest, import_module, get_attribute
import os, struct
try:
import fcntl, termios
except ImportError:
raise unittest.SkipTest("No fcntl or termios module")
if not hasattr(termios,'TIOCGPGRP'):
raise unittest.SkipTest("termios module doesn't have TIOCGPGRP")
fcntl = import_module('fcntl')
termios = import_module('termios')
get_attribute(termios, 'TIOCGPGRP') #Can't run tests without this feature
try:
tty = open("/dev/tty", "r")

View File

@ -1,8 +1,10 @@
from test.support import TESTFN, run_unittest
import mmap
from test.support import TESTFN, run_unittest, import_module
import unittest
import os, re, itertools
# Skip test if we can't import mmap.
mmap = import_module('mmap')
PAGESIZE = mmap.PAGESIZE
class MmapTests(unittest.TestCase):

View File

@ -17,20 +17,19 @@ import copy
import socket
import random
import logging
import test.support
# Work around broken sem_open implementations
try:
import multiprocessing.synchronize
except ImportError as e:
raise unittest.SkipTest(e)
# Skip tests if _multiprocessing wasn't built.
_multiprocessing = test.support.import_module('_multiprocessing')
# Skip tests if sem_open implementation is broken.
test.support.import_module('multiprocessing.synchronize')
import multiprocessing.dummy
import multiprocessing.connection
import multiprocessing.managers
import multiprocessing.heap
import multiprocessing.pool
import _multiprocessing
from multiprocessing import util

View File

@ -1,6 +1,8 @@
from test import support
import unittest
import nis
# Skip test if nis module does not exist.
nis = support.import_module('nis')
raise unittest.SkipTest("test_nis hangs on Solaris")

View File

@ -3,8 +3,9 @@ support.requires('audio')
from test.support import findfile
ossaudiodev = support.import_module('ossaudiodev')
import errno
import ossaudiodev
import sys
import sunau
import time

View File

@ -2,17 +2,15 @@
from test import support
try:
import posix
except ImportError:
raise unittest.SkipTest("posix is not available")
import time
import os
import pwd
import shutil
import unittest
import warnings
posix = support.import_module('posix')
warnings.filterwarnings('ignore', '.* potential security risk .*',
RuntimeWarning)

View File

@ -1,7 +1,7 @@
import unittest
from test import support
import pwd
pwd = support.import_module('pwd')
class PwdTest(unittest.TestCase):

View File

@ -1,9 +1,9 @@
import unittest
from test import support
import resource
import time
resource = support.import_module('resource')
# This test is checking a few specific problem spots with the resource module.
class ResourceTest(unittest.TestCase):

View File

@ -1,10 +1,9 @@
import unittest
from test.support import run_unittest
from test.support import run_unittest, import_module
# Skip test if _sqlite3 module not installed
import_module('_sqlite3')
try:
import _sqlite3
except ImportError:
raise unittest.SkipTest('no sqlite available')
from sqlite3.test import (dbapi, types, userfunctions,
factory, transactions, hooks, regression,
dump)

View File

@ -9,9 +9,11 @@
import unittest
from test import support
import os
from os import path
startfile = support.get_attribute(os, 'startfile')
# use this form so that the test is skipped when startfile is not available:
from os import startfile, path
class TestCase(unittest.TestCase):
def test_nonexisting(self):

View File

@ -2,8 +2,11 @@
import unittest
import os
import _tkinter
from test import support
# Skip this test if the _tkinter module wasn't built.
_tkinter = support.import_module('_tkinter')
from tkinter import Tcl
from _tkinter import TclError

View File

@ -3,6 +3,11 @@ from tkinter.test import runtktests
from test import support
import unittest
# Skip test if _tkinter wasn't built.
support.import_module('_tkinter')
import tkinter
try:
tkinter.Button()
except tkinter.TclError as msg:

View File

@ -1,10 +1,14 @@
import os
import sys
import unittest
from test import support
# Skip this test if _tkinter wasn't built.
support.import_module('_tkinter')
from _tkinter import TclError
from tkinter import ttk
from tkinter.test import runtktests
import unittest
from _tkinter import TclError
from test import support
try:
ttk.Button()

View File

@ -1,6 +1,10 @@
import os
import sys
from test import support
# Skip this test if _tkinter does not exist.
support.import_module('_tkinter')
from tkinter.test import runtktests
def test_main():

View File

@ -2,12 +2,15 @@
# Test the windows specific win32reg module.
# Only win32reg functions not hit here: FlushKey, LoadKey and SaveKey
from winreg import *
import os, sys
import unittest
from test import support
# Do this first so test will be skipped if module doesn't exist
support.import_module('winreg')
# Now import everything
from winreg import *
test_key_name = "SOFTWARE\\Python Registry Test Key - Delete Me"
test_data = [

View File

@ -3,10 +3,12 @@
import unittest
from test import support
support.requires('audio')
import winsound, time
import time
import os
import subprocess
winsound = support.import_module('winsound')
class BeepTest(unittest.TestCase):
# As with PlaySoundTest, incorporate the _have_soundcard() check

View File

@ -5,7 +5,7 @@ import sys
from test import support
from xml.etree import cElementTree as ET
ET = support.import_module('xml.etree.cElementTree')
SAMPLE_XML = """
<body>

View File

@ -1,9 +1,10 @@
import unittest
from test import support
import zlib
import binascii
import random
zlib = support.import_module('zlib')
class ChecksumTestCase(unittest.TestCase):
# checksum test cases

View File

@ -725,6 +725,10 @@ Extension Modules
Tests
-----
- regrtest no longer treats ImportError as equivalent to SkipTest. Imports
that should cause a test to be skipped are now done using import_module
from test support, which does the conversion.
- Issue #5083: New 'gui' resource for regrtest.