mirror of https://github.com/python/cpython
bpo-40280: Misc fixes for wasm32-emscripten (GH-30722)
This commit is contained in:
parent
ef3ef6fa43
commit
c02e860ee7
|
@ -3,6 +3,12 @@ from test import support
|
||||||
from test.support import warnings_helper
|
from test.support import warnings_helper
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
import types
|
||||||
|
|
||||||
|
try:
|
||||||
|
import _multiprocessing
|
||||||
|
except ModuleNotFoundError:
|
||||||
|
_multiprocessing = None
|
||||||
|
|
||||||
|
|
||||||
class NoAll(RuntimeError):
|
class NoAll(RuntimeError):
|
||||||
|
@ -14,6 +20,17 @@ class FailedImport(RuntimeError):
|
||||||
|
|
||||||
class AllTest(unittest.TestCase):
|
class AllTest(unittest.TestCase):
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
# concurrent.futures uses a __getattr__ hook. Its __all__ triggers
|
||||||
|
# import of a submodule, which fails when _multiprocessing is not
|
||||||
|
# available.
|
||||||
|
if _multiprocessing is None:
|
||||||
|
sys.modules["_multiprocessing"] = types.ModuleType("_multiprocessing")
|
||||||
|
|
||||||
|
def tearDown(self):
|
||||||
|
if _multiprocessing is None:
|
||||||
|
sys.modules.pop("_multiprocessing")
|
||||||
|
|
||||||
def check_all(self, modname):
|
def check_all(self, modname):
|
||||||
names = {}
|
names = {}
|
||||||
with warnings_helper.check_warnings(
|
with warnings_helper.check_warnings(
|
||||||
|
|
|
@ -26,6 +26,10 @@ try:
|
||||||
import _posixsubprocess
|
import _posixsubprocess
|
||||||
except ImportError:
|
except ImportError:
|
||||||
_posixsubprocess = None
|
_posixsubprocess = None
|
||||||
|
try:
|
||||||
|
import _testmultiphase
|
||||||
|
except ImportError:
|
||||||
|
_testmultiphase = None
|
||||||
|
|
||||||
# Skip this test if the _testcapi module isn't available.
|
# Skip this test if the _testcapi module isn't available.
|
||||||
_testcapi = import_helper.import_module('_testcapi')
|
_testcapi = import_helper.import_module('_testcapi')
|
||||||
|
@ -798,6 +802,7 @@ class SubinterpreterTest(unittest.TestCase):
|
||||||
|
|
||||||
self.assertFalse(hasattr(binascii.Error, "foobar"))
|
self.assertFalse(hasattr(binascii.Error, "foobar"))
|
||||||
|
|
||||||
|
@unittest.skipIf(_testmultiphase is None, "test requires _testmultiphase module")
|
||||||
def test_module_state_shared_in_global(self):
|
def test_module_state_shared_in_global(self):
|
||||||
"""
|
"""
|
||||||
bpo-44050: Extension module state should be shared between interpreters
|
bpo-44050: Extension module state should be shared between interpreters
|
||||||
|
@ -991,6 +996,7 @@ class PyMemDefaultTests(PyMemDebugTests):
|
||||||
PYTHONMALLOC = ''
|
PYTHONMALLOC = ''
|
||||||
|
|
||||||
|
|
||||||
|
@unittest.skipIf(_testmultiphase is None, "test requires _testmultiphase module")
|
||||||
class Test_ModuleStateAccess(unittest.TestCase):
|
class Test_ModuleStateAccess(unittest.TestCase):
|
||||||
"""Test access to module start (PEP 573)"""
|
"""Test access to module start (PEP 573)"""
|
||||||
|
|
||||||
|
|
|
@ -15,14 +15,14 @@ import time
|
||||||
import unittest
|
import unittest
|
||||||
|
|
||||||
from unittest import mock, skipUnless
|
from unittest import mock, skipUnless
|
||||||
from concurrent.futures import ProcessPoolExecutor
|
|
||||||
try:
|
try:
|
||||||
# compileall relies on ProcessPoolExecutor if ProcessPoolExecutor exists
|
# compileall relies on ProcessPoolExecutor if ProcessPoolExecutor exists
|
||||||
# and it can function.
|
# and it can function.
|
||||||
|
from concurrent.futures import ProcessPoolExecutor
|
||||||
from concurrent.futures.process import _check_system_limits
|
from concurrent.futures.process import _check_system_limits
|
||||||
_check_system_limits()
|
_check_system_limits()
|
||||||
_have_multiprocessing = True
|
_have_multiprocessing = True
|
||||||
except NotImplementedError:
|
except (NotImplementedError, ModuleNotFoundError):
|
||||||
_have_multiprocessing = False
|
_have_multiprocessing = False
|
||||||
|
|
||||||
from test import support
|
from test import support
|
||||||
|
|
|
@ -23,7 +23,7 @@ def requires_load_dynamic(meth):
|
||||||
"""Decorator to skip a test if not running under CPython or lacking
|
"""Decorator to skip a test if not running under CPython or lacking
|
||||||
imp.load_dynamic()."""
|
imp.load_dynamic()."""
|
||||||
meth = support.cpython_only(meth)
|
meth = support.cpython_only(meth)
|
||||||
return unittest.skipIf(not hasattr(imp, 'load_dynamic'),
|
return unittest.skipIf(getattr(imp, 'load_dynamic', None) is None,
|
||||||
'imp.load_dynamic() required')(meth)
|
'imp.load_dynamic() required')(meth)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
from test.support import verbose, reap_children
|
from test.support import verbose, reap_children
|
||||||
from test.support.import_helper import import_module
|
from test.support.import_helper import import_module
|
||||||
|
|
||||||
# Skip these tests if termios is not available
|
# Skip these tests if termios or fcntl are not available
|
||||||
import_module('termios')
|
import_module('termios')
|
||||||
|
import_module("fcntl")
|
||||||
|
|
||||||
import errno
|
import errno
|
||||||
import os
|
import os
|
||||||
|
|
|
@ -346,7 +346,7 @@ class TestTracemallocEnabled(unittest.TestCase):
|
||||||
# everything is fine
|
# everything is fine
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
@unittest.skipUnless(hasattr(os, 'fork'), 'need os.fork()')
|
@support.requires_fork()
|
||||||
def test_fork(self):
|
def test_fork(self):
|
||||||
# check that tracemalloc is still working after fork
|
# check that tracemalloc is still working after fork
|
||||||
pid = os.fork()
|
pid = os.fork()
|
||||||
|
|
|
@ -58,12 +58,14 @@ ac_cv_func_fchmodat=no
|
||||||
ac_cv_func_dup3=no
|
ac_cv_func_dup3=no
|
||||||
|
|
||||||
# Syscalls not implemented in emscripten
|
# Syscalls not implemented in emscripten
|
||||||
|
# [Errno 52] Function not implemented
|
||||||
ac_cv_func_preadv2=no
|
ac_cv_func_preadv2=no
|
||||||
ac_cv_func_preadv=no
|
ac_cv_func_preadv=no
|
||||||
ac_cv_func_pwritev2=no
|
ac_cv_func_pwritev2=no
|
||||||
ac_cv_func_pwritev=no
|
ac_cv_func_pwritev=no
|
||||||
ac_cv_func_pipe2=no
|
ac_cv_func_pipe2=no
|
||||||
ac_cv_func_nice=no
|
ac_cv_func_nice=no
|
||||||
|
ac_cv_func_setitimer=no
|
||||||
|
|
||||||
# Syscalls that resulted in a segfault
|
# Syscalls that resulted in a segfault
|
||||||
ac_cv_func_utimensat=no
|
ac_cv_func_utimensat=no
|
||||||
|
|
|
@ -21323,7 +21323,7 @@ case $ac_sys_system/$ac_sys_emscripten_target in #(
|
||||||
;; #(
|
;; #(
|
||||||
Emscripten/node) :
|
Emscripten/node) :
|
||||||
|
|
||||||
py_stdlib_not_available="_ctypes _curses _curses_panel _dbm _gdbm _scproxy _tkinter nis ossaudiodev spwd syslog"
|
py_stdlib_not_available="_ctypes _curses _curses_panel _dbm _gdbm _scproxy _tkinter _xxsubinterpreters grp nis ossaudiodev spwd syslog"
|
||||||
;; #(
|
;; #(
|
||||||
*) :
|
*) :
|
||||||
py_stdlib_not_available="_scproxy"
|
py_stdlib_not_available="_scproxy"
|
||||||
|
|
|
@ -6384,6 +6384,8 @@ AS_CASE([$ac_sys_system/$ac_sys_emscripten_target],
|
||||||
_gdbm
|
_gdbm
|
||||||
_scproxy
|
_scproxy
|
||||||
_tkinter
|
_tkinter
|
||||||
|
_xxsubinterpreters
|
||||||
|
grp
|
||||||
nis
|
nis
|
||||||
ossaudiodev
|
ossaudiodev
|
||||||
spwd
|
spwd
|
||||||
|
|
Loading…
Reference in New Issue