aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/Lib/test/test_re.py
diff options
context:
space:
mode:
authorR. David Murray <rdmurray@bitdance.com>2025-03-19 13:05:09 -0400
committerGitHub <noreply@github.com>2025-03-19 13:05:09 -0400
commit6146295a5b8e9286ccb8f90818b764c9a0192090 (patch)
tree612330ec7ef83cf23ec0f8ac991b0e242c6c2679 /Lib/test/test_re.py
parent4b540313238de9d53bd9d9866eb481e954ad508f (diff)
downloadcpython-6146295a5b8e9286ccb8f90818b764c9a0192090.tar.gz
cpython-6146295a5b8e9286ccb8f90818b764c9a0192090.zip
gh-90548: Make musl test skips smarter (fixes Alpine errors) (#131313)
* Make musl test skips smarter (fixes Alpine errors) A relatively small number of tests fail when the underlying c library is provided by musl. This was originally reported in bpo-46390 by Christian Heimes. Among other changes, these tests were marked for skipping in gh-31947/ef1327e3 as part of bpo-40280 (emscripten support), but the skips were conditioned on the *platform* being emscripten (or wasi, skips for which ere added in 9b50585e02). In gh-131071 Victor Stinner added a linked_to_musl function to enable skipping a test in test_math that fails under musl, like it does on a number of other platforms. This check can successfully detect that python is running under musl on Alpine, which was the original problem report in bpo-46390. This PR replaces Victor's solution with an enhancement to platform.libc_ver that does the check more cheaply, and also gets the version number. The latter is important because the math test being skipped is due to a bug in musl that has been fixed, but as of this checkin date has not yet been released. When it is, the test skip can be fixed to check for the minimum needed version. The enhanced version of linked_to_musl is also used to do the skips of the other tests that generically fail under musl, as opposed to emscripten or wasi only failures. This will allow these tests to be skipped automatically on Alpine. This PR does *not* enhance libc_ver to support emscripten and wasi, as I'm not familiar with those platforms; instead it returns a version triple of (0, 0, 0) for those platforms. This means the musl tests will be skipped regardless of musl version, so ideally someone will add support to libc_ver for these platforms. * Platform tests and bug fixes. In adding tests for the new platform code I found a bug in the old code: if a valid version is passed for version and it is greater than the version found for an so *and* there is no glibc version, then the version from the argument was returned. The code changes here fix that. * Add support docs, including for some preexisting is_xxx's. * Add news item about libc_ver enhancement. * Prettify platform re expression using re.VERBOSE.
Diffstat (limited to 'Lib/test/test_re.py')
-rw-r--r--Lib/test/test_re.py12
1 files changed, 3 insertions, 9 deletions
diff --git a/Lib/test/test_re.py b/Lib/test/test_re.py
index 5538de60b2a..f65b4076aee 100644
--- a/Lib/test/test_re.py
+++ b/Lib/test/test_re.py
@@ -1,6 +1,6 @@
from test.support import (gc_collect, bigmemtest, _2G,
cpython_only, captured_stdout,
- check_disallow_instantiation, is_emscripten, is_wasi,
+ check_disallow_instantiation, linked_to_musl,
warnings_helper, SHORT_TIMEOUT, CPUStopwatch, requires_resource)
import locale
import re
@@ -2172,10 +2172,7 @@ class ReTests(unittest.TestCase):
# with ignore case.
self.assertEqual(re.fullmatch('[a-c]+', 'ABC', re.I).span(), (0, 3))
- @unittest.skipIf(
- is_emscripten or is_wasi,
- "musl libc issue on Emscripten/WASI, bpo-46390"
- )
+ @unittest.skipIf(linked_to_musl(), "musl libc issue, bpo-46390")
def test_locale_caching(self):
# Issue #22410
oldlocale = locale.setlocale(locale.LC_CTYPE)
@@ -2212,10 +2209,7 @@ class ReTests(unittest.TestCase):
self.assertIsNone(re.match(b'(?Li)\xc5', b'\xe5'))
self.assertIsNone(re.match(b'(?Li)\xe5', b'\xc5'))
- @unittest.skipIf(
- is_emscripten or is_wasi,
- "musl libc issue on Emscripten/WASI, bpo-46390"
- )
+ @unittest.skipIf(linked_to_musl(), "musl libc issue, bpo-46390")
def test_locale_compiled(self):
oldlocale = locale.setlocale(locale.LC_CTYPE)
self.addCleanup(locale.setlocale, locale.LC_CTYPE, oldlocale)