Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 5cfc79d

Browse files
Issue #20532: Tests which use _testcapi now are marked as CPython only.
1 parent fe4ef39 commit 5cfc79d

25 files changed

Lines changed: 237 additions & 104 deletions

Lib/test/string_tests.py

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import unittest, string, sys, struct
66
from test import support
77
from collections import UserList
8-
import _testcapi
98

109
class Sequence:
1110
def __init__(self, seq='wxyz'): self.seq = seq
@@ -1185,19 +1184,27 @@ def test_formatting(self):
11851184
# Outrageously large width or precision should raise ValueError.
11861185
self.checkraises(ValueError, '%%%df' % (2**64), '__mod__', (3.2))
11871186
self.checkraises(ValueError, '%%.%df' % (2**64), '__mod__', (3.2))
1187+
self.checkraises(OverflowError, '%*s', '__mod__',
1188+
(sys.maxsize + 1, ''))
1189+
self.checkraises(OverflowError, '%.*f', '__mod__',
1190+
(sys.maxsize + 1, 1. / 7))
1191+
1192+
class X(object): pass
1193+
self.checkraises(TypeError, 'abc', '__mod__', X())
11881194

1195+
@support.cpython_only
1196+
def test_formatting_c_limits(self):
1197+
from _testcapi import PY_SSIZE_T_MAX, INT_MAX, UINT_MAX
1198+
SIZE_MAX = (1 << (PY_SSIZE_T_MAX.bit_length() + 1)) - 1
11891199
self.checkraises(OverflowError, '%*s', '__mod__',
1190-
(_testcapi.PY_SSIZE_T_MAX + 1, ''))
1200+
(PY_SSIZE_T_MAX + 1, ''))
11911201
self.checkraises(OverflowError, '%.*f', '__mod__',
1192-
(_testcapi.INT_MAX + 1, 1. / 7))
1202+
(INT_MAX + 1, 1. / 7))
11931203
# Issue 15989
11941204
self.checkraises(OverflowError, '%*s', '__mod__',
1195-
(1 << (_testcapi.PY_SSIZE_T_MAX.bit_length() + 1), ''))
1205+
(SIZE_MAX + 1, ''))
11961206
self.checkraises(OverflowError, '%.*f', '__mod__',
1197-
(_testcapi.UINT_MAX + 1, 1. / 7))
1198-
1199-
class X(object): pass
1200-
self.checkraises(TypeError, 'abc', '__mod__', X())
1207+
(UINT_MAX + 1, 1. / 7))
12011208

12021209
def test_floatformatting(self):
12031210
# float formatting

Lib/test/support/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
import logging.handlers
2626
import struct
2727
import tempfile
28-
import _testcapi
2928

3029
try:
3130
import _thread, threading
@@ -1349,6 +1348,7 @@ def calcvobjsize(fmt):
13491348
_TPFLAGS_HEAPTYPE = 1<<9
13501349

13511350
def check_sizeof(test, o, size):
1351+
import _testcapi
13521352
result = sys.getsizeof(o)
13531353
# add GC header size
13541354
if ((type(o) == type) and (o.__flags__ & _TPFLAGS_HEAPTYPE) or\

Lib/test/test_capi.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@
1717
import threading
1818
except ImportError:
1919
threading = None
20-
import _testcapi
20+
# Skip this test if the _testcapi module isn't available.
21+
_testcapi = support.import_module('_testcapi')
2122

2223

2324
def testfunction(self):

Lib/test/test_code.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@
104104

105105
import unittest
106106
import weakref
107-
import _testcapi
107+
from test.support import run_doctest, run_unittest, cpython_only
108108

109109

110110
def consts(t):
@@ -126,7 +126,9 @@ def dump(co):
126126

127127
class CodeTest(unittest.TestCase):
128128

129+
@cpython_only
129130
def test_newempty(self):
131+
import _testcapi
130132
co = _testcapi.code_newempty("filename", "funcname", 15)
131133
self.assertEqual(co.co_filename, "filename")
132134
self.assertEqual(co.co_name, "funcname")
@@ -159,7 +161,6 @@ def callback(code):
159161

160162

161163
def test_main(verbose=None):
162-
from test.support import run_doctest, run_unittest
163164
from test import test_code
164165
run_doctest(test_code, verbose)
165166
run_unittest(CodeTest, CodeWeakRefTest)

Lib/test/test_codecs.py

Lines changed: 54 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import _testcapi
21
import codecs
32
import io
43
import locale
@@ -1710,7 +1709,7 @@ def test_basic(self):
17101709

17111710
class BasicUnicodeTest(unittest.TestCase, MixInCheckStateHandling):
17121711
def test_basics(self):
1713-
s = "abc123" # all codecs should be able to encode these
1712+
s = "abc123" # all codecs should be able to encode these
17141713
for encoding in all_unicode_encodings:
17151714
name = codecs.lookup(encoding).name
17161715
if encoding.endswith("_codec"):
@@ -1722,9 +1721,9 @@ def test_basics(self):
17221721
with support.check_warnings():
17231722
# unicode-internal has been deprecated
17241723
(b, size) = codecs.getencoder(encoding)(s)
1725-
self.assertEqual(size, len(s), "%r != %r (encoding=%r)" % (size, len(s), encoding))
1724+
self.assertEqual(size, len(s), "encoding=%r" % encoding)
17261725
(chars, size) = codecs.getdecoder(encoding)(b)
1727-
self.assertEqual(chars, s, "%r != %r (encoding=%r)" % (chars, s, encoding))
1726+
self.assertEqual(chars, s, "encoding=%r" % encoding)
17281727

17291728
if encoding not in broken_unicode_with_streams:
17301729
# check stream reader/writer
@@ -1742,15 +1741,13 @@ def test_basics(self):
17421741
for c in encodedresult:
17431742
q.write(bytes([c]))
17441743
decodedresult += reader.read()
1745-
self.assertEqual(decodedresult, s, "%r != %r (encoding=%r)" % (decodedresult, s, encoding))
1744+
self.assertEqual(decodedresult, s, "encoding=%r" % encoding)
17461745

17471746
if encoding not in broken_incremental_coders:
1748-
# check incremental decoder/encoder (fetched via the Python
1749-
# and C API) and iterencode()/iterdecode()
1747+
# check incremental decoder/encoder and iterencode()/iterdecode()
17501748
try:
17511749
encoder = codecs.getincrementalencoder(encoding)()
1752-
cencoder = _testcapi.codec_incrementalencoder(encoding)
1753-
except LookupError: # no IncrementalEncoder
1750+
except LookupError: # no IncrementalEncoder
17541751
pass
17551752
else:
17561753
# check incremental decoder/encoder
@@ -1763,45 +1760,71 @@ def test_basics(self):
17631760
for c in encodedresult:
17641761
decodedresult += decoder.decode(bytes([c]))
17651762
decodedresult += decoder.decode(b"", True)
1766-
self.assertEqual(decodedresult, s, "%r != %r (encoding=%r)" % (decodedresult, s, encoding))
1763+
self.assertEqual(decodedresult, s,
1764+
"encoding=%r" % encoding)
17671765

1766+
# check iterencode()/iterdecode()
1767+
result = "".join(codecs.iterdecode(
1768+
codecs.iterencode(s, encoding), encoding))
1769+
self.assertEqual(result, s, "encoding=%r" % encoding)
1770+
1771+
# check iterencode()/iterdecode() with empty string
1772+
result = "".join(codecs.iterdecode(
1773+
codecs.iterencode("", encoding), encoding))
1774+
self.assertEqual(result, "")
1775+
1776+
if encoding not in ("idna", "mbcs"):
1777+
# check incremental decoder/encoder with errors argument
1778+
try:
1779+
encoder = codecs.getincrementalencoder(encoding)("ignore")
1780+
except LookupError: # no IncrementalEncoder
1781+
pass
1782+
else:
1783+
encodedresult = b"".join(encoder.encode(c) for c in s)
1784+
decoder = codecs.getincrementaldecoder(encoding)("ignore")
1785+
decodedresult = "".join(decoder.decode(bytes([c]))
1786+
for c in encodedresult)
1787+
self.assertEqual(decodedresult, s,
1788+
"encoding=%r" % encoding)
1789+
1790+
@support.cpython_only
1791+
def test_basics_capi(self):
1792+
from _testcapi import codec_incrementalencoder, codec_incrementaldecoder
1793+
s = "abc123" # all codecs should be able to encode these
1794+
for encoding in all_unicode_encodings:
1795+
if encoding not in broken_incremental_coders:
1796+
# check incremental decoder/encoder (fetched via the C API)
1797+
try:
1798+
cencoder = codec_incrementalencoder(encoding)
1799+
except LookupError: # no IncrementalEncoder
1800+
pass
1801+
else:
17681802
# check C API
17691803
encodedresult = b""
17701804
for c in s:
17711805
encodedresult += cencoder.encode(c)
17721806
encodedresult += cencoder.encode("", True)
1773-
cdecoder = _testcapi.codec_incrementaldecoder(encoding)
1807+
cdecoder = codec_incrementaldecoder(encoding)
17741808
decodedresult = ""
17751809
for c in encodedresult:
17761810
decodedresult += cdecoder.decode(bytes([c]))
17771811
decodedresult += cdecoder.decode(b"", True)
1778-
self.assertEqual(decodedresult, s, "%r != %r (encoding=%r)" % (decodedresult, s, encoding))
1779-
1780-
# check iterencode()/iterdecode()
1781-
result = "".join(codecs.iterdecode(codecs.iterencode(s, encoding), encoding))
1782-
self.assertEqual(result, s, "%r != %r (encoding=%r)" % (result, s, encoding))
1783-
1784-
# check iterencode()/iterdecode() with empty string
1785-
result = "".join(codecs.iterdecode(codecs.iterencode("", encoding), encoding))
1786-
self.assertEqual(result, "")
1812+
self.assertEqual(decodedresult, s,
1813+
"encoding=%r" % encoding)
17871814

17881815
if encoding not in ("idna", "mbcs"):
17891816
# check incremental decoder/encoder with errors argument
17901817
try:
1791-
encoder = codecs.getincrementalencoder(encoding)("ignore")
1792-
cencoder = _testcapi.codec_incrementalencoder(encoding, "ignore")
1793-
except LookupError: # no IncrementalEncoder
1818+
cencoder = codec_incrementalencoder(encoding, "ignore")
1819+
except LookupError: # no IncrementalEncoder
17941820
pass
17951821
else:
1796-
encodedresult = b"".join(encoder.encode(c) for c in s)
1797-
decoder = codecs.getincrementaldecoder(encoding)("ignore")
1798-
decodedresult = "".join(decoder.decode(bytes([c])) for c in encodedresult)
1799-
self.assertEqual(decodedresult, s, "%r != %r (encoding=%r)" % (decodedresult, s, encoding))
1800-
18011822
encodedresult = b"".join(cencoder.encode(c) for c in s)
1802-
cdecoder = _testcapi.codec_incrementaldecoder(encoding, "ignore")
1803-
decodedresult = "".join(cdecoder.decode(bytes([c])) for c in encodedresult)
1804-
self.assertEqual(decodedresult, s, "%r != %r (encoding=%r)" % (decodedresult, s, encoding))
1823+
cdecoder = codec_incrementaldecoder(encoding, "ignore")
1824+
decodedresult = "".join(cdecoder.decode(bytes([c]))
1825+
for c in encodedresult)
1826+
self.assertEqual(decodedresult, s,
1827+
"encoding=%r" % encoding)
18051828

18061829
def test_seek(self):
18071830
# all codecs should be able to encode these

Lib/test/test_descr.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2046,6 +2046,7 @@ def setter(self_, value):
20462046
prop2 = property(fset=setter)
20472047
self.assertEqual(prop2.__doc__, None)
20482048

2049+
@support.cpython_only
20492050
def test_testcapi_no_segfault(self):
20502051
# this segfaulted in 2.5b2
20512052
try:

Lib/test/test_devpoll.py

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,7 @@
33
# Initial tests are copied as is from "test_poll.py"
44

55
import os, select, random, unittest, sys
6-
from test.support import TESTFN, run_unittest
7-
from _testcapi import USHRT_MAX
6+
from test.support import TESTFN, run_unittest, cpython_only
87

98
try:
109
select.devpoll
@@ -94,8 +93,18 @@ def test_events_mask_overflow(self):
9493
pollster.register(w)
9594
# Issue #17919
9695
self.assertRaises(OverflowError, pollster.register, 0, -1)
97-
self.assertRaises(OverflowError, pollster.register, 0, USHRT_MAX + 1)
96+
self.assertRaises(OverflowError, pollster.register, 0, 1 << 64)
9897
self.assertRaises(OverflowError, pollster.modify, 1, -1)
98+
self.assertRaises(OverflowError, pollster.modify, 1, 1 << 64)
99+
100+
@cpython_only
101+
def test_events_mask_overflow_c_limits(self):
102+
from _testcapi import USHRT_MAX
103+
pollster = select.devpoll()
104+
w, r = os.pipe()
105+
pollster.register(w)
106+
# Issue #17919
107+
self.assertRaises(OverflowError, pollster.register, 0, USHRT_MAX + 1)
99108
self.assertRaises(OverflowError, pollster.modify, 1, USHRT_MAX + 1)
100109

101110

Lib/test/test_exceptions.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -832,6 +832,7 @@ def g():
832832
self.assertIn("maximum recursion depth exceeded", str(v))
833833

834834

835+
@cpython_only
835836
def test_MemoryError(self):
836837
# PyErr_NoMemory always raises the same exception instance.
837838
# Check that the traceback is not doubled.
@@ -890,6 +891,7 @@ class C(object):
890891
self.assertEqual(error5.a, 1)
891892
self.assertEqual(error5.__doc__, "")
892893

894+
@cpython_only
893895
def test_memory_error_cleanup(self):
894896
# Issue #5437: preallocated MemoryError instances should not keep
895897
# traceback objects alive.

Lib/test/test_fcntl.py

Lines changed: 28 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@
77
import os
88
import struct
99
import sys
10-
import _testcapi
1110
import unittest
12-
from test.support import verbose, TESTFN, unlink, run_unittest, import_module
11+
from test.support import (verbose, TESTFN, unlink, run_unittest, import_module,
12+
cpython_only)
1313

1414
# Skip test if no fcntl module.
1515
fcntl = import_module('fcntl')
@@ -50,6 +50,12 @@ def get_lockdata():
5050

5151
lockdata = get_lockdata()
5252

53+
class BadFile:
54+
def __init__(self, fn):
55+
self.fn = fn
56+
def fileno(self):
57+
return self.fn
58+
5359
class TestFcntl(unittest.TestCase):
5460

5561
def setUp(self):
@@ -81,24 +87,27 @@ def test_fcntl_file_descriptor(self):
8187
self.f.close()
8288

8389
def test_fcntl_bad_file(self):
84-
class F:
85-
def __init__(self, fn):
86-
self.fn = fn
87-
def fileno(self):
88-
return self.fn
89-
self.assertRaises(ValueError, fcntl.fcntl, -1, fcntl.F_SETFL, os.O_NONBLOCK)
90-
self.assertRaises(ValueError, fcntl.fcntl, F(-1), fcntl.F_SETFL, os.O_NONBLOCK)
91-
self.assertRaises(TypeError, fcntl.fcntl, 'spam', fcntl.F_SETFL, os.O_NONBLOCK)
92-
self.assertRaises(TypeError, fcntl.fcntl, F('spam'), fcntl.F_SETFL, os.O_NONBLOCK)
90+
with self.assertRaises(ValueError):
91+
fcntl.fcntl(-1, fcntl.F_SETFL, os.O_NONBLOCK)
92+
with self.assertRaises(ValueError):
93+
fcntl.fcntl(BadFile(-1), fcntl.F_SETFL, os.O_NONBLOCK)
94+
with self.assertRaises(TypeError):
95+
fcntl.fcntl('spam', fcntl.F_SETFL, os.O_NONBLOCK)
96+
with self.assertRaises(TypeError):
97+
fcntl.fcntl(BadFile('spam'), fcntl.F_SETFL, os.O_NONBLOCK)
98+
99+
@cpython_only
100+
def test_fcntl_bad_file_overflow(self):
101+
from _testcapi import INT_MAX, INT_MIN
93102
# Issue 15989
94-
self.assertRaises(OverflowError, fcntl.fcntl, _testcapi.INT_MAX + 1,
95-
fcntl.F_SETFL, os.O_NONBLOCK)
96-
self.assertRaises(OverflowError, fcntl.fcntl, F(_testcapi.INT_MAX + 1),
97-
fcntl.F_SETFL, os.O_NONBLOCK)
98-
self.assertRaises(OverflowError, fcntl.fcntl, _testcapi.INT_MIN - 1,
99-
fcntl.F_SETFL, os.O_NONBLOCK)
100-
self.assertRaises(OverflowError, fcntl.fcntl, F(_testcapi.INT_MIN - 1),
101-
fcntl.F_SETFL, os.O_NONBLOCK)
103+
with self.assertRaises(OverflowError):
104+
fcntl.fcntl(INT_MAX + 1, fcntl.F_SETFL, os.O_NONBLOCK)
105+
with self.assertRaises(OverflowError):
106+
fcntl.fcntl(BadFile(INT_MAX + 1), fcntl.F_SETFL, os.O_NONBLOCK)
107+
with self.assertRaises(OverflowError):
108+
fcntl.fcntl(INT_MIN - 1, fcntl.F_SETFL, os.O_NONBLOCK)
109+
with self.assertRaises(OverflowError):
110+
fcntl.fcntl(BadFile(INT_MIN - 1), fcntl.F_SETFL, os.O_NONBLOCK)
102111

103112
@unittest.skipIf(
104113
platform.machine().startswith('arm') and platform.system() == 'Linux',

Lib/test/test_fileio.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,8 @@
88
from array import array
99
from weakref import proxy
1010
from functools import wraps
11-
import _testcapi
1211

13-
from test.support import TESTFN, check_warnings, run_unittest, make_bad_fd
12+
from test.support import TESTFN, check_warnings, run_unittest, make_bad_fd, cpython_only
1413
from collections import UserList
1514

1615
from _io import FileIO as _FileIO
@@ -362,7 +361,11 @@ def testInvalidFd(self):
362361
if sys.platform == 'win32':
363362
import msvcrt
364363
self.assertRaises(IOError, msvcrt.get_osfhandle, make_bad_fd())
364+
365+
@cpython_only
366+
def testInvalidFd_overflow(self):
365367
# Issue 15989
368+
import _testcapi
366369
self.assertRaises(TypeError, _FileIO, _testcapi.INT_MAX + 1)
367370
self.assertRaises(TypeError, _FileIO, _testcapi.INT_MIN - 1)
368371

0 commit comments

Comments
 (0)