123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- #!/usr/bin/env python
- import codecs
- import io
- import unittest
- import idna.codec
- CODEC_NAME = "idna2008"
- class IDNACodecTests(unittest.TestCase):
- def setUp(self):
- from . import test_idna
- self.idnatests = test_idna.IDNATests()
- self.idnatests.setUp()
- def testCodec(self):
- self.assertIs(codecs.lookup(CODEC_NAME).incrementalencoder, idna.codec.IncrementalEncoder)
- def testDirectDecode(self):
- self.idnatests.test_decode(decode=lambda obj: codecs.decode(obj, CODEC_NAME))
- def testIndirectDecode(self):
- self.idnatests.test_decode(decode=lambda obj: obj.decode(CODEC_NAME), skip_str=True)
- def testDirectEncode(self):
- self.idnatests.test_encode(encode=lambda obj: codecs.encode(obj, CODEC_NAME))
- def testIndirectEncode(self):
- self.idnatests.test_encode(encode=lambda obj: obj.encode(CODEC_NAME), skip_bytes=True)
- def testStreamReader(self):
- def decode(obj):
- if isinstance(obj, str):
- obj = bytes(obj, "ascii")
- buffer = io.BytesIO(obj)
- stream = codecs.getreader(CODEC_NAME)(buffer)
- return stream.read()
- return self.idnatests.test_decode(decode=decode, skip_str=True)
- def testStreamWriter(self):
- def encode(obj):
- buffer = io.BytesIO()
- stream = codecs.getwriter(CODEC_NAME)(buffer)
- stream.write(obj)
- stream.flush()
- return buffer.getvalue()
- return self.idnatests.test_encode(encode=encode)
- def testIncrementalDecoder(self):
- # Tests derived from Python standard library test/test_codecs.py
- incremental_tests = (
- ("python.org", b"python.org"),
- ("python.org.", b"python.org."),
- ("pyth\xf6n.org", b"xn--pythn-mua.org"),
- ("pyth\xf6n.org.", b"xn--pythn-mua.org."),
- )
- for decoded, encoded in incremental_tests:
- self.assertEqual(
- "".join(codecs.iterdecode((bytes([c]) for c in encoded), CODEC_NAME)),
- decoded,
- )
- decoder = codecs.getincrementaldecoder(CODEC_NAME)()
- self.assertEqual(
- decoder.decode(
- b"xn--xam",
- ),
- "",
- )
- self.assertEqual(
- decoder.decode(
- b"ple-9ta.o",
- ),
- "\xe4xample.",
- )
- self.assertEqual(decoder.decode(b"rg"), "")
- self.assertEqual(decoder.decode(b"", True), "org")
- decoder.reset()
- self.assertEqual(
- decoder.decode(
- b"xn--xam",
- ),
- "",
- )
- self.assertEqual(
- decoder.decode(
- b"ple-9ta.o",
- ),
- "\xe4xample.",
- )
- self.assertEqual(decoder.decode(b"rg."), "org.")
- self.assertEqual(decoder.decode(b"", True), "")
- def testIncrementalEncoder(self):
- # Tests derived from Python standard library test/test_codecs.py
- incremental_tests = (
- ("python.org", b"python.org"),
- ("python.org.", b"python.org."),
- ("pyth\xf6n.org", b"xn--pythn-mua.org"),
- ("pyth\xf6n.org.", b"xn--pythn-mua.org."),
- )
- for decoded, encoded in incremental_tests:
- self.assertEqual(b"".join(codecs.iterencode(decoded, CODEC_NAME)), encoded)
- encoder = codecs.getincrementalencoder(CODEC_NAME)()
- self.assertEqual(encoder.encode("\xe4x"), b"")
- self.assertEqual(encoder.encode("ample.org"), b"xn--xample-9ta.")
- self.assertEqual(encoder.encode("", True), b"org")
- encoder.reset()
- self.assertEqual(encoder.encode("\xe4x"), b"")
- self.assertEqual(encoder.encode("ample.org."), b"xn--xample-9ta.org.")
- self.assertEqual(encoder.encode("", True), b"")
- if __name__ == "__main__":
- unittest.main()
|