1- import _testcapi
21import codecs
32import contextlib
43import io
@@ -1760,7 +1759,7 @@ def test_basic(self):
17601759
17611760class BasicUnicodeTest (unittest .TestCase , MixInCheckStateHandling ):
17621761 def test_basics (self ):
1763- s = "abc123" # all codecs should be able to encode these
1762+ s = "abc123" # all codecs should be able to encode these
17641763 for encoding in all_unicode_encodings :
17651764 name = codecs .lookup (encoding ).name
17661765 if encoding .endswith ("_codec" ):
@@ -1772,9 +1771,9 @@ def test_basics(self):
17721771 with support .check_warnings ():
17731772 # unicode-internal has been deprecated
17741773 (b , size ) = codecs .getencoder (encoding )(s )
1775- self .assertEqual (size , len (s ), "%r != %r ( encoding=%r) " % ( size , len ( s ), encoding ) )
1774+ self .assertEqual (size , len (s ), "encoding=%r" % encoding )
17761775 (chars , size ) = codecs .getdecoder (encoding )(b )
1777- self .assertEqual (chars , s , "%r != %r ( encoding=%r) " % ( chars , s , encoding ) )
1776+ self .assertEqual (chars , s , "encoding=%r" % encoding )
17781777
17791778 if encoding not in broken_unicode_with_streams :
17801779 # check stream reader/writer
@@ -1792,15 +1791,13 @@ def test_basics(self):
17921791 for c in encodedresult :
17931792 q .write (bytes ([c ]))
17941793 decodedresult += reader .read ()
1795- self .assertEqual (decodedresult , s , "%r != %r ( encoding=%r) " % ( decodedresult , s , encoding ) )
1794+ self .assertEqual (decodedresult , s , "encoding=%r" % encoding )
17961795
17971796 if encoding not in broken_incremental_coders :
1798- # check incremental decoder/encoder (fetched via the Python
1799- # and C API) and iterencode()/iterdecode()
1797+ # check incremental decoder/encoder and iterencode()/iterdecode()
18001798 try :
18011799 encoder = codecs .getincrementalencoder (encoding )()
1802- cencoder = _testcapi .codec_incrementalencoder (encoding )
1803- except LookupError : # no IncrementalEncoder
1800+ except LookupError : # no IncrementalEncoder
18041801 pass
18051802 else :
18061803 # check incremental decoder/encoder
@@ -1813,45 +1810,71 @@ def test_basics(self):
18131810 for c in encodedresult :
18141811 decodedresult += decoder .decode (bytes ([c ]))
18151812 decodedresult += decoder .decode (b"" , True )
1816- self .assertEqual (decodedresult , s , "%r != %r (encoding=%r)" % (decodedresult , s , encoding ))
1813+ self .assertEqual (decodedresult , s ,
1814+ "encoding=%r" % encoding )
18171815
1816+ # check iterencode()/iterdecode()
1817+ result = "" .join (codecs .iterdecode (
1818+ codecs .iterencode (s , encoding ), encoding ))
1819+ self .assertEqual (result , s , "encoding=%r" % encoding )
1820+
1821+ # check iterencode()/iterdecode() with empty string
1822+ result = "" .join (codecs .iterdecode (
1823+ codecs .iterencode ("" , encoding ), encoding ))
1824+ self .assertEqual (result , "" )
1825+
1826+ if encoding not in ("idna" , "mbcs" ):
1827+ # check incremental decoder/encoder with errors argument
1828+ try :
1829+ encoder = codecs .getincrementalencoder (encoding )("ignore" )
1830+ except LookupError : # no IncrementalEncoder
1831+ pass
1832+ else :
1833+ encodedresult = b"" .join (encoder .encode (c ) for c in s )
1834+ decoder = codecs .getincrementaldecoder (encoding )("ignore" )
1835+ decodedresult = "" .join (decoder .decode (bytes ([c ]))
1836+ for c in encodedresult )
1837+ self .assertEqual (decodedresult , s ,
1838+ "encoding=%r" % encoding )
1839+
1840+ @support .cpython_only
1841+ def test_basics_capi (self ):
1842+ from _testcapi import codec_incrementalencoder , codec_incrementaldecoder
1843+ s = "abc123" # all codecs should be able to encode these
1844+ for encoding in all_unicode_encodings :
1845+ if encoding not in broken_incremental_coders :
1846+ # check incremental decoder/encoder (fetched via the C API)
1847+ try :
1848+ cencoder = codec_incrementalencoder (encoding )
1849+ except LookupError : # no IncrementalEncoder
1850+ pass
1851+ else :
18181852 # check C API
18191853 encodedresult = b""
18201854 for c in s :
18211855 encodedresult += cencoder .encode (c )
18221856 encodedresult += cencoder .encode ("" , True )
1823- cdecoder = _testcapi . codec_incrementaldecoder (encoding )
1857+ cdecoder = codec_incrementaldecoder (encoding )
18241858 decodedresult = ""
18251859 for c in encodedresult :
18261860 decodedresult += cdecoder .decode (bytes ([c ]))
18271861 decodedresult += cdecoder .decode (b"" , True )
1828- self .assertEqual (decodedresult , s , "%r != %r (encoding=%r)" % (decodedresult , s , encoding ))
1829-
1830- # check iterencode()/iterdecode()
1831- result = "" .join (codecs .iterdecode (codecs .iterencode (s , encoding ), encoding ))
1832- self .assertEqual (result , s , "%r != %r (encoding=%r)" % (result , s , encoding ))
1833-
1834- # check iterencode()/iterdecode() with empty string
1835- result = "" .join (codecs .iterdecode (codecs .iterencode ("" , encoding ), encoding ))
1836- self .assertEqual (result , "" )
1862+ self .assertEqual (decodedresult , s ,
1863+ "encoding=%r" % encoding )
18371864
18381865 if encoding not in ("idna" , "mbcs" ):
18391866 # check incremental decoder/encoder with errors argument
18401867 try :
1841- encoder = codecs .getincrementalencoder (encoding )("ignore" )
1842- cencoder = _testcapi .codec_incrementalencoder (encoding , "ignore" )
1843- except LookupError : # no IncrementalEncoder
1868+ cencoder = codec_incrementalencoder (encoding , "ignore" )
1869+ except LookupError : # no IncrementalEncoder
18441870 pass
18451871 else :
1846- encodedresult = b"" .join (encoder .encode (c ) for c in s )
1847- decoder = codecs .getincrementaldecoder (encoding )("ignore" )
1848- decodedresult = "" .join (decoder .decode (bytes ([c ])) for c in encodedresult )
1849- self .assertEqual (decodedresult , s , "%r != %r (encoding=%r)" % (decodedresult , s , encoding ))
1850-
18511872 encodedresult = b"" .join (cencoder .encode (c ) for c in s )
1852- cdecoder = _testcapi .codec_incrementaldecoder (encoding , "ignore" )
1853- decodedresult = "" .join (cdecoder .decode (bytes ([c ])) for c in encodedresult )
1854- self .assertEqual (decodedresult , s , "%r != %r (encoding=%r)" % (decodedresult , s , encoding ))
1873+ cdecoder = codec_incrementaldecoder (encoding , "ignore" )
1874+ decodedresult = "" .join (cdecoder .decode (bytes ([c ]))
1875+ for c in encodedresult )
1876+ self .assertEqual (decodedresult , s ,
1877+ "encoding=%r" % encoding )
18551878
18561879 def test_seek (self ):
18571880 # all codecs should be able to encode these
0 commit comments