diff options
| author | Serhiy Storchaka <storchaka@gmail.com> | 2014-02-07 08:10:55 (GMT) | 
|---|---|---|
| committer | Serhiy Storchaka <storchaka@gmail.com> | 2014-02-07 08:10:55 (GMT) | 
| commit | f28ba369dd068a76ff5b7efac58fdcb5c3eaf4dd (patch) | |
| tree | 541cb209a2be79d6022ce5d47216755e9e9310a4 /Lib/test/test_codecs.py | |
| parent | 622be340fdf4110c77e1f86bd13a01fc30c2bb65 (diff) | |
| parent | 5cfc79deaeabf4af3c767665098a37da9f375eda (diff) | |
| download | cpython-f28ba369dd068a76ff5b7efac58fdcb5c3eaf4dd.zip cpython-f28ba369dd068a76ff5b7efac58fdcb5c3eaf4dd.tar.gz cpython-f28ba369dd068a76ff5b7efac58fdcb5c3eaf4dd.tar.bz2  | |
Issue #20532: Tests which use _testcapi now are marked as CPython only.
Diffstat (limited to 'Lib/test/test_codecs.py')
| -rw-r--r-- | Lib/test/test_codecs.py | 85 | 
1 files changed, 54 insertions, 31 deletions
diff --git a/Lib/test/test_codecs.py b/Lib/test/test_codecs.py index c04ffd7..dee1441 100644 --- a/Lib/test/test_codecs.py +++ b/Lib/test/test_codecs.py @@ -1,4 +1,3 @@ -import _testcapi  import codecs  import contextlib  import io @@ -1760,7 +1759,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"): @@ -1772,9 +1771,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 @@ -1792,15 +1791,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 @@ -1813,45 +1810,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)) +                    self.assertEqual(decodedresult, s, +                                     "encoding=%r" % encoding) +                    # check iterencode()/iterdecode() +                    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)) +                    self.assertEqual(result, "") + +                if encoding not in ("idna", "mbcs"): +                    # check incremental decoder/encoder with errors argument +                    try: +                        encoder = codecs.getincrementalencoder(encoding)("ignore") +                    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, +                                         "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 = _testcapi.codec_incrementaldecoder(encoding) +                    cdecoder = 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)) - -                    # check iterencode()/iterdecode() -                    result = "".join(codecs.iterdecode(codecs.iterencode(s, encoding), encoding)) -                    self.assertEqual(result, s, "%r != %r (encoding=%r)" % (result, s, encoding)) - -                    # check iterencode()/iterdecode() with empty string -                    result = "".join(codecs.iterdecode(codecs.iterencode("", encoding), encoding)) -                    self.assertEqual(result, "") +                    self.assertEqual(decodedresult, s, +                                     "encoding=%r" % encoding)                  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 +                        cencoder = codec_incrementalencoder(encoding, "ignore") +                    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)) -                          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  | 
