mirror of
https://github.com/python/cpython.git
synced 2025-08-31 05:58:33 +00:00
Issue #20532: Tests which use _testcapi now are marked as CPython only.
This commit is contained in:
parent
fe4ef392d5
commit
5cfc79deae
25 changed files with 239 additions and 106 deletions
|
@ -1,4 +1,3 @@
|
|||
import _testcapi
|
||||
import codecs
|
||||
import io
|
||||
import locale
|
||||
|
@ -1710,7 +1709,7 @@ broken_incremental_coders = broken_unicode_with_streams + [
|
|||
|
||||
class BasicUnicodeTest(unittest.TestCase, MixInCheckStateHandling):
|
||||
def test_basics(self):
|
||||
s = "abc123" # all codecs should be able to encode these
|
||||
s = "abc123" # all codecs should be able to encode these
|
||||
for encoding in all_unicode_encodings:
|
||||
name = codecs.lookup(encoding).name
|
||||
if encoding.endswith("_codec"):
|
||||
|
@ -1722,9 +1721,9 @@ class BasicUnicodeTest(unittest.TestCase, MixInCheckStateHandling):
|
|||
with support.check_warnings():
|
||||
# unicode-internal has been deprecated
|
||||
(b, size) = codecs.getencoder(encoding)(s)
|
||||
self.assertEqual(size, len(s), "%r != %r (encoding=%r)" % (size, len(s), encoding))
|
||||
self.assertEqual(size, len(s), "encoding=%r" % encoding)
|
||||
(chars, size) = codecs.getdecoder(encoding)(b)
|
||||
self.assertEqual(chars, s, "%r != %r (encoding=%r)" % (chars, s, encoding))
|
||||
self.assertEqual(chars, s, "encoding=%r" % encoding)
|
||||
|
||||
if encoding not in broken_unicode_with_streams:
|
||||
# check stream reader/writer
|
||||
|
@ -1742,15 +1741,13 @@ class BasicUnicodeTest(unittest.TestCase, MixInCheckStateHandling):
|
|||
for c in encodedresult:
|
||||
q.write(bytes([c]))
|
||||
decodedresult += reader.read()
|
||||
self.assertEqual(decodedresult, s, "%r != %r (encoding=%r)" % (decodedresult, s, encoding))
|
||||
self.assertEqual(decodedresult, s, "encoding=%r" % encoding)
|
||||
|
||||
if encoding not in broken_incremental_coders:
|
||||
# check incremental decoder/encoder (fetched via the Python
|
||||
# and C API) and iterencode()/iterdecode()
|
||||
# check incremental decoder/encoder and iterencode()/iterdecode()
|
||||
try:
|
||||
encoder = codecs.getincrementalencoder(encoding)()
|
||||
cencoder = _testcapi.codec_incrementalencoder(encoding)
|
||||
except LookupError: # no IncrementalEncoder
|
||||
except LookupError: # no IncrementalEncoder
|
||||
pass
|
||||
else:
|
||||
# check incremental decoder/encoder
|
||||
|
@ -1763,45 +1760,71 @@ class BasicUnicodeTest(unittest.TestCase, MixInCheckStateHandling):
|
|||
for c in encodedresult:
|
||||
decodedresult += decoder.decode(bytes([c]))
|
||||
decodedresult += decoder.decode(b"", True)
|
||||
self.assertEqual(decodedresult, s, "%r != %r (encoding=%r)" % (decodedresult, s, encoding))
|
||||
|
||||
# check C API
|
||||
encodedresult = b""
|
||||
for c in s:
|
||||
encodedresult += cencoder.encode(c)
|
||||
encodedresult += cencoder.encode("", True)
|
||||
cdecoder = _testcapi.codec_incrementaldecoder(encoding)
|
||||
decodedresult = ""
|
||||
for c in encodedresult:
|
||||
decodedresult += cdecoder.decode(bytes([c]))
|
||||
decodedresult += cdecoder.decode(b"", True)
|
||||
self.assertEqual(decodedresult, s, "%r != %r (encoding=%r)" % (decodedresult, s, encoding))
|
||||
self.assertEqual(decodedresult, s,
|
||||
"encoding=%r" % encoding)
|
||||
|
||||
# check iterencode()/iterdecode()
|
||||
result = "".join(codecs.iterdecode(codecs.iterencode(s, encoding), encoding))
|
||||
self.assertEqual(result, s, "%r != %r (encoding=%r)" % (result, s, encoding))
|
||||
result = "".join(codecs.iterdecode(
|
||||
codecs.iterencode(s, encoding), encoding))
|
||||
self.assertEqual(result, s, "encoding=%r" % encoding)
|
||||
|
||||
# check iterencode()/iterdecode() with empty string
|
||||
result = "".join(codecs.iterdecode(codecs.iterencode("", encoding), encoding))
|
||||
result = "".join(codecs.iterdecode(
|
||||
codecs.iterencode("", encoding), encoding))
|
||||
self.assertEqual(result, "")
|
||||
|
||||
if encoding not in ("idna", "mbcs"):
|
||||
# check incremental decoder/encoder with errors argument
|
||||
try:
|
||||
encoder = codecs.getincrementalencoder(encoding)("ignore")
|
||||
cencoder = _testcapi.codec_incrementalencoder(encoding, "ignore")
|
||||
except LookupError: # no IncrementalEncoder
|
||||
except LookupError: # no IncrementalEncoder
|
||||
pass
|
||||
else:
|
||||
encodedresult = b"".join(encoder.encode(c) for c in s)
|
||||
decoder = codecs.getincrementaldecoder(encoding)("ignore")
|
||||
decodedresult = "".join(decoder.decode(bytes([c])) for c in encodedresult)
|
||||
self.assertEqual(decodedresult, s, "%r != %r (encoding=%r)" % (decodedresult, s, encoding))
|
||||
decodedresult = "".join(decoder.decode(bytes([c]))
|
||||
for c in encodedresult)
|
||||
self.assertEqual(decodedresult, s,
|
||||
"encoding=%r" % encoding)
|
||||
|
||||
@support.cpython_only
|
||||
def test_basics_capi(self):
|
||||
from _testcapi import codec_incrementalencoder, codec_incrementaldecoder
|
||||
s = "abc123" # all codecs should be able to encode these
|
||||
for encoding in all_unicode_encodings:
|
||||
if encoding not in broken_incremental_coders:
|
||||
# check incremental decoder/encoder (fetched via the C API)
|
||||
try:
|
||||
cencoder = codec_incrementalencoder(encoding)
|
||||
except LookupError: # no IncrementalEncoder
|
||||
pass
|
||||
else:
|
||||
# check C API
|
||||
encodedresult = b""
|
||||
for c in s:
|
||||
encodedresult += cencoder.encode(c)
|
||||
encodedresult += cencoder.encode("", True)
|
||||
cdecoder = codec_incrementaldecoder(encoding)
|
||||
decodedresult = ""
|
||||
for c in encodedresult:
|
||||
decodedresult += cdecoder.decode(bytes([c]))
|
||||
decodedresult += cdecoder.decode(b"", True)
|
||||
self.assertEqual(decodedresult, s,
|
||||
"encoding=%r" % encoding)
|
||||
|
||||
if encoding not in ("idna", "mbcs"):
|
||||
# check incremental decoder/encoder with errors argument
|
||||
try:
|
||||
cencoder = codec_incrementalencoder(encoding, "ignore")
|
||||
except LookupError: # no IncrementalEncoder
|
||||
pass
|
||||
else:
|
||||
encodedresult = b"".join(cencoder.encode(c) for c in s)
|
||||
cdecoder = _testcapi.codec_incrementaldecoder(encoding, "ignore")
|
||||
decodedresult = "".join(cdecoder.decode(bytes([c])) for c in encodedresult)
|
||||
self.assertEqual(decodedresult, s, "%r != %r (encoding=%r)" % (decodedresult, s, encoding))
|
||||
cdecoder = codec_incrementaldecoder(encoding, "ignore")
|
||||
decodedresult = "".join(cdecoder.decode(bytes([c]))
|
||||
for c in encodedresult)
|
||||
self.assertEqual(decodedresult, s,
|
||||
"encoding=%r" % encoding)
|
||||
|
||||
def test_seek(self):
|
||||
# all codecs should be able to encode these
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue