Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

bpo-40280: Skip more tests on Emscripten (GH-31947) #31947

Merged
merged 1 commit into from
Mar 17, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion Lib/distutils/tests/test_dir_util.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@

from distutils import log
from distutils.tests import support
from test.support import run_unittest
from test.support import run_unittest, is_emscripten


class DirUtilTestCase(support.TempdirManager, unittest.TestCase):
Expand Down Expand Up @@ -55,6 +55,7 @@ def test_mkpath_remove_tree_verbosity(self):

@unittest.skipIf(sys.platform.startswith('win'),
"This test is only appropriate for POSIX-like systems.")
@unittest.skipIf(is_emscripten, "Emscripten's umask is a stub.")
def test_mkpath_with_custom_mode(self):
# Get and set the current umask value for testing mode bits.
umask = os.umask(0o002)
Expand Down
8 changes: 8 additions & 0 deletions Lib/test/test__locale.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
import unittest
from platform import uname

from test import support

if uname().system == "Darwin":
maj, min, mic = [int(part) for part in uname().release.split(".")]
if (maj, min, mic) < (8, 0, 0):
Expand Down Expand Up @@ -106,6 +108,9 @@ def numeric_tester(self, calc_type, calc_value, data_type, used_locale):
return True

@unittest.skipUnless(nl_langinfo, "nl_langinfo is not available")
@unittest.skipIf(
support.is_emscripten, "musl libc issue on Emscripten, bpo-46390"
)
def test_lc_numeric_nl_langinfo(self):
# Test nl_langinfo against known values
tested = False
Expand All @@ -122,6 +127,9 @@ def test_lc_numeric_nl_langinfo(self):
if not tested:
self.skipTest('no suitable locales')

@unittest.skipIf(
support.is_emscripten, "musl libc issue on Emscripten, bpo-46390"
)
def test_lc_numeric_localeconv(self):
# Test localeconv against known values
tested = False
Expand Down
2 changes: 1 addition & 1 deletion Lib/test/test__xxsubinterpreters.py
Original file line number Diff line number Diff line change
Expand Up @@ -818,7 +818,7 @@ def f():

self.assertEqual(out, 'it worked!')

@unittest.skipUnless(hasattr(os, 'fork'), "test needs os.fork()")
@support.requires_fork()
def test_fork(self):
import tempfile
with tempfile.NamedTemporaryFile('w+', encoding="utf-8") as file:
Expand Down
3 changes: 3 additions & 0 deletions Lib/test/test_coroutines.py
Original file line number Diff line number Diff line change
Expand Up @@ -2208,6 +2208,9 @@ async def f():
gen.cr_frame.clear()


@unittest.skipIf(
support.is_emscripten, "asyncio does not work under Emscripten yet."
)
class CoroAsyncIOCompatTest(unittest.TestCase):

def test_asyncio_1(self):
Expand Down
3 changes: 2 additions & 1 deletion Lib/test/test_interpreters.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import unittest
import time

from test import support
from test.support import import_helper
_interpreters = import_helper.import_module('_xxsubinterpreters')
from test.support import interpreters
Expand Down Expand Up @@ -408,7 +409,7 @@ def f():

self.assertEqual(out, 'it worked!')

@unittest.skipUnless(hasattr(os, 'fork'), "test needs os.fork()")
@support.requires_fork()
def test_fork(self):
interp = interpreters.create()
import tempfile
Expand Down
4 changes: 3 additions & 1 deletion Lib/test/test_locale.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from decimal import Decimal
from test.support import verbose, is_android
from test.support import verbose, is_android, is_emscripten
from test.support.warnings_helper import check_warnings
import unittest
import locale
Expand Down Expand Up @@ -373,11 +373,13 @@ def setUp(self):

@unittest.skipIf(sys.platform.startswith('aix'),
'bpo-29972: broken test on AIX')
@unittest.skipIf(is_emscripten, "musl libc issue on Emscripten, bpo-46390")
def test_strcoll_with_diacritic(self):
self.assertLess(locale.strcoll('à', 'b'), 0)

@unittest.skipIf(sys.platform.startswith('aix'),
'bpo-29972: broken test on AIX')
@unittest.skipIf(is_emscripten, "musl libc issue on Emscripten, bpo-46390")
def test_strxfrm_with_diacritic(self):
self.assertLess(locale.strxfrm('à'), locale.strxfrm('b'))

Expand Down
3 changes: 2 additions & 1 deletion Lib/test/test_logging.py
Original file line number Diff line number Diff line change
Expand Up @@ -674,7 +674,7 @@ def remove_loop(fname, tries):
# based on os.fork existing because that is what users and this test use.
# This helps ensure that when fork exists (the important concept) that the
# register_at_fork mechanism is also present and used.
@unittest.skipIf(not hasattr(os, 'fork'), 'Test requires os.fork().')
@support.requires_fork()
def test_post_fork_child_no_deadlock(self):
"""Ensure child logging locks are not held; bpo-6721 & bpo-36533."""
class _OurHandler(logging.Handler):
Expand Down Expand Up @@ -4493,6 +4493,7 @@ def _extract_logrecord_process_name(key, logMultiprocessing, conn=None):
return results

def test_multiprocessing(self):
support.skip_if_broken_multiprocessing_synchronize()
multiprocessing_imported = 'multiprocessing' in sys.modules
try:
# logMultiprocessing is True by default
Expand Down
3 changes: 2 additions & 1 deletion Lib/test/test_ntpath.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import unittest
import warnings
from test.support import os_helper
from test.support import TestFailed
from test.support import TestFailed, is_emscripten
from test.support.os_helper import FakePath
from test import test_genericpath
from tempfile import TemporaryFile
Expand Down Expand Up @@ -747,6 +747,7 @@ def check_error(exc, paths):
self.assertRaises(TypeError, ntpath.commonpath,
['Program Files', b'C:\\Program Files\\Foo'])

@unittest.skipIf(is_emscripten, "Emscripten cannot fstat unnamed files.")
def test_sameopenfile(self):
with TemporaryFile() as tf1, TemporaryFile() as tf2:
# Make sure the same file is really the same
Expand Down
10 changes: 9 additions & 1 deletion Lib/test/test_os.py
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,9 @@ def test_access(self):
os.close(f)
self.assertTrue(os.access(os_helper.TESTFN, os.W_OK))

@unittest.skipIf(
support.is_emscripten, "Test is unstable under Emscripten."
)
def test_closerange(self):
first = os.open(os_helper.TESTFN, os.O_CREAT|os.O_RDWR)
# We must allocate two consecutive file descriptors, otherwise
Expand Down Expand Up @@ -1578,6 +1581,7 @@ def test_makedir(self):
'dir5', 'dir6')
os.makedirs(path)

@unittest.skipIf(support.is_emscripten, "Emscripten's umask is a stub.")
def test_mode(self):
with os_helper.temp_umask(0o002):
base = os_helper.TESTFN
Expand Down Expand Up @@ -2158,6 +2162,9 @@ def test_fchown(self):
self.check(os.fchown, -1, -1)

@unittest.skipUnless(hasattr(os, 'fpathconf'), 'test needs os.fpathconf()')
@unittest.skipIf(
support.is_emscripten, "musl libc issue on Emscripten, bpo-46390"
)
def test_fpathconf(self):
self.check(os.pathconf, "PC_NAME_MAX")
self.check(os.fpathconf, "PC_NAME_MAX")
Expand Down Expand Up @@ -4058,6 +4065,7 @@ def test_path_t_converter_and_custom_class(self):

@unittest.skipUnless(hasattr(os, 'get_blocking'),
'needs os.get_blocking() and os.set_blocking()')
@unittest.skipIf(support.is_emscripten, "Cannot unset blocking flag")
class BlockingTests(unittest.TestCase):
def test_blocking(self):
fd = os.open(__file__, os.O_RDONLY)
Expand Down Expand Up @@ -4513,7 +4521,7 @@ def test_times(self):
self.assertEqual(times.elapsed, 0)


@requires_os_func('fork')
@support.requires_fork()
class ForkTests(unittest.TestCase):
def test_fork(self):
# bpo-42540: ensure os.fork() with non-default memory allocator does
Expand Down
4 changes: 3 additions & 1 deletion Lib/test/test_re.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from test.support import (gc_collect, bigmemtest, _2G,
cpython_only, captured_stdout,
check_disallow_instantiation)
check_disallow_instantiation, is_emscripten)
import locale
import re
import sre_compile
Expand Down Expand Up @@ -1892,6 +1892,7 @@ def test_bug_20998(self):
# with ignore case.
self.assertEqual(re.fullmatch('[a-c]+', 'ABC', re.I).span(), (0, 3))

@unittest.skipIf(is_emscripten, "musl libc issue on Emscripten, bpo-46390")
def test_locale_caching(self):
# Issue #22410
oldlocale = locale.setlocale(locale.LC_CTYPE)
Expand Down Expand Up @@ -1928,6 +1929,7 @@ def check_en_US_utf8(self):
self.assertIsNone(re.match(b'(?Li)\xc5', b'\xe5'))
self.assertIsNone(re.match(b'(?Li)\xe5', b'\xc5'))

@unittest.skipIf(is_emscripten, "musl libc issue on Emscripten, bpo-46390")
def test_locale_compiled(self):
oldlocale = locale.setlocale(locale.LC_CTYPE)
self.addCleanup(locale.setlocale, locale.LC_CTYPE, oldlocale)
Expand Down
3 changes: 3 additions & 0 deletions Lib/test/test_select.py
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,9 @@ def test_select(self):
rfd, wfd, xfd)

# Issue 16230: Crash on select resized list
@unittest.skipIf(
support.is_emscripten, "Emscripten cannot select a fd multiple times."
)
def test_select_mutated(self):
a = []
class F:
Expand Down
6 changes: 6 additions & 0 deletions Lib/test/test_strptime.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,9 @@ def test_am_pm(self):
self.assertEqual(self.LT_ins.am_pm[position], strftime_output,
"AM/PM representation in the wrong position within the tuple")

@unittest.skipIf(
support.is_emscripten, "musl libc issue on Emscripten, bpo-46390"
)
def test_timezone(self):
# Make sure timezone is correct
timezone = time.strftime("%Z", self.time_tuple).lower()
Expand Down Expand Up @@ -368,6 +371,9 @@ def test_bad_offset(self):
self.assertEqual("Inconsistent use of : in -01:3030", str(err.exception))

@skip_if_buggy_ucrt_strfptime
@unittest.skipIf(
support.is_emscripten, "musl libc issue on Emscripten, bpo-46390"
)
def test_timezone(self):
# Test timezone directives.
# When gmtime() is used with %Z, entire result of strftime() is empty.
Expand Down
3 changes: 3 additions & 0 deletions Lib/test/test_support.py
Original file line number Diff line number Diff line change
Expand Up @@ -658,10 +658,13 @@ def id(self):
self.assertFalse(support.match_test(test_access))
self.assertTrue(support.match_test(test_chdir))

@unittest.skipIf(support.is_emscripten, "Unstable in Emscripten")
def test_fd_count(self):
# We cannot test the absolute value of fd_count(): on old Linux
# kernel or glibc versions, os.urandom() keeps a FD open on
# /dev/urandom device and Python has 4 FD opens instead of 3.
# Test is unstable on Emscripten. The platform starts and stops
# background threads that use pipes and epoll fds.
start = os_helper.fd_count()
fd = os.open(__file__, os.O_RDONLY)
try:
Expand Down
7 changes: 7 additions & 0 deletions Lib/test/test_tempfile.py
Original file line number Diff line number Diff line change
Expand Up @@ -341,6 +341,9 @@ def _mock_candidate_names(*names):

class TestBadTempdir:

@unittest.skipIf(
support.is_emscripten, "Emscripten cannot remove write bits."
)
def test_read_only_directory(self):
with _inside_empty_temp_dir():
oldmode = mode = os.stat(tempfile.tempdir).st_mode
Expand Down Expand Up @@ -465,6 +468,7 @@ def test_file_mode(self):
self.assertEqual(mode, expected)

@unittest.skipUnless(has_spawnl, 'os.spawnl not available')
@support.requires_subprocess()
def test_noinherit(self):
# _mkstemp_inner file handles are not inherited by child processes

Expand Down Expand Up @@ -1282,6 +1286,9 @@ def use_closed():
pass
self.assertRaises(ValueError, use_closed)

@unittest.skipIf(
support.is_emscripten, "Emscripten cannot fstat renamed files."
)
def test_truncate_with_size_parameter(self):
# A SpooledTemporaryFile can be truncated to zero size
f = tempfile.SpooledTemporaryFile(max_size=10)
Expand Down
6 changes: 6 additions & 0 deletions Lib/test/test_time.py
Original file line number Diff line number Diff line change
Expand Up @@ -313,6 +313,9 @@ def test_asctime(self):
def test_asctime_bounding_check(self):
self._bounds_checking(time.asctime)

@unittest.skipIf(
support.is_emscripten, "musl libc issue on Emscripten, bpo-46390"
)
def test_ctime(self):
t = time.mktime((1973, 9, 16, 1, 3, 52, 0, 0, -1))
self.assertEqual(time.ctime(t), 'Sun Sep 16 01:03:52 1973')
Expand Down Expand Up @@ -699,6 +702,9 @@ class TestStrftime4dyear(_TestStrftimeYear, _Test4dYear, unittest.TestCase):
class TestPytime(unittest.TestCase):
@skip_if_buggy_ucrt_strfptime
@unittest.skipUnless(time._STRUCT_TM_ITEMS == 11, "needs tm_zone support")
@unittest.skipIf(
support.is_emscripten, "musl libc issue on Emscripten, bpo-46390"
)
def test_localtime_timezone(self):

# Get the localtime and examine it for the offset and zone.
Expand Down
3 changes: 3 additions & 0 deletions Tools/wasm/config.site-wasm32-emscripten
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,9 @@ ac_cv_func_symlinkat=no
ac_cv_func_readlinkat=no
ac_cv_func_fchmodat=no
ac_cv_func_dup3=no
# lchmod/lchown are implemented, but fail with ENOTSUP.
ac_cv_func_lchmod=no
ac_cv_func_lchown=no

# Syscalls not implemented in emscripten
# [Errno 52] Function not implemented
Expand Down