1- import _testcapi
21import codecs
32import io
43import locale
@@ -1710,7 +1709,7 @@ def test_basic(self):
17101709
17111710class 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
0 commit comments