aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--extra_tests/test_pypy_modules.py83
1 files changed, 83 insertions, 0 deletions
diff --git a/extra_tests/test_pypy_modules.py b/extra_tests/test_pypy_modules.py
new file mode 100644
index 0000000000..de105158fc
--- /dev/null
+++ b/extra_tests/test_pypy_modules.py
@@ -0,0 +1,83 @@
+import sys
+import importlib
+import pytest
+
+# This is a workaround for a dubious feature of CPython's test suite: it skips
+# tests silently if importing a module fails. This makes some partial sense
+# for CPython itself when testing C extension modules directly, because very
+# often (but not always) a C extension module is either completely absent or
+# imports successfully. But for PyPy it's a mess because it can hide mistakes
+# very easily, and it did. So the list we build here should contain the names
+# of every module that CPython's tests import with test.support.import_module()
+# but that should really be present on the running platform.
+
+
+expected_modules = []
+
+# ----- everywhere -----
+expected_modules += [
+ 'MimeWriter',
+ 'bz2',
+ 'commands',
+ 'compiler',
+ '_ctypes',
+ 'dircache',
+ 'fpformat',
+ 'gzip',
+ 'htmllib',
+ 'mhlib',
+ 'mimetools',
+ 'mmap',
+ 'multifile',
+ '_multiprocessing',
+ 'multiprocessing.synchronize',
+ 'mutex',
+ 'new',
+ 'sre',
+ 'rfc822',
+ 'sets',
+ '_sqlite3',
+ 'ssl',
+ 'thread',
+ 'threading',
+ 'xmllib',
+ 'zlib',
+]
+
+# ----- non-Windows -----
+if sys.platform != 'win32':
+ expected_modules += [
+ 'curses',
+ 'curses.ascii',
+ 'curses.textpad',
+ 'dbm',
+ 'fcntl',
+ 'gdbm',
+ 'grp',
+ 'posix',
+ 'pwd',
+ 'readline',
+ 'resource',
+ 'termios',
+ ]
+else:
+ # ----- Windows only -----
+ expected_modules += [
+ '_winreg',
+ ]
+
+# ----- Linux only -----
+if sys.platform.startswith('linux'):
+ expected_modules += [
+ 'crypt',
+ ]
+
+
+# ------------------------------------------------
+
+@pytest.fixture(scope="module", params=expected_modules)
+def modname(request):
+ return request.param
+
+def test_expected_modules(modname):
+ importlib.import_module(modname)