Skip to content

gh-127146: Emscripten clean up test suite #127984

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

Merged
merged 2 commits into from
Dec 17, 2024
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
4 changes: 1 addition & 3 deletions Lib/test/libregrtest/setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
from .filter import set_match_tests
from .runtests import RunTests
from .utils import (
setup_unraisable_hook, setup_threading_excepthook, fix_umask,
setup_unraisable_hook, setup_threading_excepthook,
adjust_rlimit_nofile)


Expand All @@ -26,8 +26,6 @@ def setup_test_dir(testdir: str | None) -> None:


def setup_process() -> None:
fix_umask()

assert sys.__stderr__ is not None, "sys.__stderr__ is None"
try:
stderr_fd = sys.__stderr__.fileno()
Expand Down
11 changes: 0 additions & 11 deletions Lib/test/libregrtest/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -478,17 +478,6 @@ def get_temp_dir(tmp_dir: StrPath | None = None) -> StrPath:
return os.path.abspath(tmp_dir)


def fix_umask() -> None:
if support.is_emscripten:
# Emscripten has default umask 0o777, which breaks some tests.
# see https://github.com/emscripten-core/emscripten/issues/17269
old_mask = os.umask(0)
if old_mask == 0o777:
os.umask(0o027)
else:
os.umask(old_mask)


def get_work_dir(parent_dir: StrPath, worker: bool = False) -> StrPath:
# Define a writable temp dir that will be used as cwd while running
# the tests. The name of the dir includes the pid to allow parallel
Expand Down
4 changes: 2 additions & 2 deletions Lib/test/test_fileio.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
from functools import wraps

from test.support import (
cpython_only, swap_attr, gc_collect, is_emscripten, is_wasi,
cpython_only, swap_attr, gc_collect, is_wasi,
infinite_recursion, strace_helper
)
from test.support.os_helper import (
Expand Down Expand Up @@ -531,7 +531,7 @@ def testAbles(self):
self.assertEqual(f.isatty(), False)
f.close()

if sys.platform != "win32" and not is_emscripten:
if sys.platform != "win32":
try:
f = self.FileIO("/dev/tty", "a")
except OSError:
Expand Down
3 changes: 0 additions & 3 deletions Lib/test/test_logging.py
Original file line number Diff line number Diff line change
Expand Up @@ -680,9 +680,6 @@ def test_pathlike_objects(self):
os.unlink(fn)

@unittest.skipIf(os.name == 'nt', 'WatchedFileHandler not appropriate for Windows.')
@unittest.skipIf(
support.is_emscripten, "Emscripten cannot fstat unlinked files."
)
@threading_helper.requires_working_threading()
@support.requires_resource('walltime')
def test_race(self):
Expand Down
44 changes: 13 additions & 31 deletions Lib/test/test_os.py
Original file line number Diff line number Diff line change
Expand Up @@ -188,9 +188,6 @@ 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."
)
@unittest.skipIf(
support.is_wasi, "WASI does not support dup."
)
Expand Down Expand Up @@ -1428,9 +1425,7 @@ def setUp(self):
else:
self.sub2_tree = (sub2_path, ["SUB21"], ["tmp3"])

if not support.is_emscripten:
# Emscripten fails with inaccessible directory
os.chmod(sub21_path, 0)
os.chmod(sub21_path, 0)
try:
os.listdir(sub21_path)
except PermissionError:
Expand Down Expand Up @@ -1726,9 +1721,6 @@ def test_yields_correct_dir_fd(self):
# check that listdir() returns consistent information
self.assertEqual(set(os.listdir(rootfd)), set(dirs) | set(files))

@unittest.skipIf(
support.is_emscripten, "Cannot dup stdout on Emscripten"
)
@unittest.skipIf(
support.is_android, "dup return value is unpredictable on Android"
)
Expand All @@ -1745,9 +1737,6 @@ def test_fd_leak(self):
self.addCleanup(os.close, newfd)
self.assertEqual(newfd, minfd)

@unittest.skipIf(
support.is_emscripten, "Cannot dup stdout on Emscripten"
)
@unittest.skipIf(
support.is_android, "dup return value is unpredictable on Android"
)
Expand Down Expand Up @@ -1816,8 +1805,8 @@ def test_makedir(self):
os.makedirs(path)

@unittest.skipIf(
support.is_emscripten or support.is_wasi,
"Emscripten's/WASI's umask is a stub."
support.is_wasi,
"WASI's umask is a stub."
)
def test_mode(self):
with os_helper.temp_umask(0o002):
Expand All @@ -1832,8 +1821,8 @@ def test_mode(self):
self.assertEqual(os.stat(parent).st_mode & 0o777, 0o775)

@unittest.skipIf(
support.is_emscripten or support.is_wasi,
"Emscripten's/WASI's umask is a stub."
support.is_wasi,
"WASI's umask is a stub."
)
def test_exist_ok_existing_directory(self):
path = os.path.join(os_helper.TESTFN, 'dir1')
Expand All @@ -1850,8 +1839,8 @@ def test_exist_ok_existing_directory(self):
os.makedirs(os.path.abspath('/'), exist_ok=True)

@unittest.skipIf(
support.is_emscripten or support.is_wasi,
"Emscripten's/WASI's umask is a stub."
support.is_wasi,
"WASI's umask is a stub."
)
def test_exist_ok_s_isgid_directory(self):
path = os.path.join(os_helper.TESTFN, 'dir1')
Expand Down Expand Up @@ -2429,10 +2418,6 @@ def test_dup2(self):
self.check(os.dup2, 20)

@unittest.skipUnless(hasattr(os, 'dup2'), 'test needs os.dup2()')
@unittest.skipIf(
support.is_emscripten,
"dup2() with negative fds is broken on Emscripten (see gh-102179)"
)
def test_dup2_negative_fd(self):
valid_fd = os.open(__file__, os.O_RDONLY)
self.addCleanup(os.close, valid_fd)
Expand All @@ -2457,14 +2442,14 @@ def test_fchown(self):
self.check(os.fchown, -1, -1)

@unittest.skipUnless(hasattr(os, 'fpathconf'), 'test needs os.fpathconf()')
@unittest.skipIf(
support.is_emscripten or support.is_wasi,
"musl libc issue on Emscripten/WASI, bpo-46390"
)
def test_fpathconf(self):
self.assertIn("PC_NAME_MAX", os.pathconf_names)
self.check(os.pathconf, "PC_NAME_MAX")
self.check(os.fpathconf, "PC_NAME_MAX")
if not (support.is_emscripten or support.is_wasi):
# musl libc pathconf ignores the file descriptor and always returns
# a constant, so the assertion that it should notice a bad file
# descriptor and return EBADF fails.
self.check(os.pathconf, "PC_NAME_MAX")
self.check(os.fpathconf, "PC_NAME_MAX")
self.check_bool(os.pathconf, "PC_NAME_MAX")
self.check_bool(os.fpathconf, "PC_NAME_MAX")

Expand Down Expand Up @@ -3395,9 +3380,6 @@ def test_bad_fd(self):
@unittest.skipUnless(os.isatty(0) and not win32_is_iot() and (sys.platform.startswith('win') or
(hasattr(locale, 'nl_langinfo') and hasattr(locale, 'CODESET'))),
'test requires a tty and either Windows or nl_langinfo(CODESET)')
@unittest.skipIf(
support.is_emscripten, "Cannot get encoding of stdin on Emscripten"
)
def test_device_encoding(self):
encoding = os.device_encoding(0)
self.assertIsNotNone(encoding)
Expand Down
7 changes: 1 addition & 6 deletions Lib/test/test_pathlib/test_pathlib.py
Original file line number Diff line number Diff line change
Expand Up @@ -1665,7 +1665,6 @@ def test_mkdir_exist_ok_with_parent(self):
self.assertTrue(p.exists())
self.assertEqual(p.stat().st_ctime, st_ctime_first)

@unittest.skipIf(is_emscripten, "FS root cannot be modified on Emscripten.")
def test_mkdir_exist_ok_root(self):
# Issue #25803: A drive root could raise PermissionError on Windows.
self.cls('/').resolve().mkdir(exist_ok=True)
Expand Down Expand Up @@ -2031,7 +2030,6 @@ def test_rglob_pathlike(self):
self.assertEqual(expect, set(p.rglob(FakePath(pattern))))

@needs_symlinks
@unittest.skipIf(is_emscripten, "Hangs")
def test_glob_recurse_symlinks_common(self):
def _check(path, glob, expected):
actual = {path for path in path.glob(glob, recurse_symlinks=True)
Expand Down Expand Up @@ -2069,7 +2067,6 @@ def _check(path, glob, expected):
_check(p, "*/dirD/**/", ["dirC/dirD/"])

@needs_symlinks
@unittest.skipIf(is_emscripten, "Hangs")
def test_rglob_recurse_symlinks_common(self):
def _check(path, glob, expected):
actual = {path for path in path.rglob(glob, recurse_symlinks=True)
Expand Down Expand Up @@ -2476,9 +2473,7 @@ def setUp(self):
os.symlink(tmp5_path, broken_link3_path)
self.sub2_tree[2].append('broken_link3')
self.sub2_tree[2].sort()
if not is_emscripten:
# Emscripten fails with inaccessible directories.
os.chmod(sub21_path, 0)
os.chmod(sub21_path, 0)
try:
os.listdir(sub21_path)
except PermissionError:
Expand Down
1 change: 0 additions & 1 deletion Lib/test/test_pydoc/test_pydoc.py
Original file line number Diff line number Diff line change
Expand Up @@ -1224,7 +1224,6 @@ def test_apropos_with_unreadable_dir(self):
self.assertEqual(err.getvalue(), '')

@os_helper.skip_unless_working_chmod
@unittest.skipIf(is_emscripten, "cannot remove x bit")
def test_apropos_empty_doc(self):
pkgdir = os.path.join(TESTFN, 'walkpkg')
os.mkdir(pkgdir)
Expand Down
6 changes: 0 additions & 6 deletions Lib/test/test_strptime.py
Original file line number Diff line number Diff line change
Expand Up @@ -79,9 +79,6 @@ 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 @@ -431,9 +428,6 @@ 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
1 change: 0 additions & 1 deletion Lib/test/test_support.py
Original file line number Diff line number Diff line change
Expand Up @@ -549,7 +549,6 @@ def test_optim_args_from_interpreter_flags(self):
self.check_options(opts, 'optim_args_from_interpreter_flags')

@unittest.skipIf(support.is_apple_mobile, "Unstable on Apple Mobile")
@unittest.skipIf(support.is_emscripten, "Unstable in Emscripten")
@unittest.skipIf(support.is_wasi, "Unavailable on WASI")
def test_fd_count(self):
# We cannot test the absolute value of fd_count(): on old Linux kernel
Expand Down
10 changes: 0 additions & 10 deletions Lib/test/test_tempfile.py
Original file line number Diff line number Diff line change
Expand Up @@ -328,10 +328,6 @@ 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 @@ -1240,9 +1236,6 @@ def test_del_unrolled_file(self):
with self.assertWarns(ResourceWarning):
f.__del__()

@unittest.skipIf(
support.is_emscripten, "Emscripten cannot fstat renamed files."
)
def test_del_rolled_file(self):
# The rolled file should be deleted when the SpooledTemporaryFile
# object is deleted. This should raise a ResourceWarning since the file
Expand Down Expand Up @@ -1468,9 +1461,6 @@ 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: 0 additions & 6 deletions Lib/test/test_time.py
Original file line number Diff line number Diff line change
Expand Up @@ -361,9 +361,6 @@ 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 @@ -746,9 +743,6 @@ 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
4 changes: 2 additions & 2 deletions Lib/test/test_unicode_file_functions.py
Original file line number Diff line number Diff line change
Expand Up @@ -125,8 +125,8 @@ def test_open(self):
# open(), os.stat(), etc. don't raise any exception.
@unittest.skipIf(is_apple, 'irrelevant test on Apple platforms')
@unittest.skipIf(
support.is_emscripten or support.is_wasi,
"test fails on Emscripten/WASI when host platform is macOS."
support.is_wasi,
"test fails on WASI when host platform is macOS."
)
def test_normalize(self):
files = set(self.files)
Expand Down
Loading