Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit ca87aef

Browse files
committed
Patch #670715: Universal Unicode Codec for POSIX iconv.
1 parent 7e17289 commit ca87aef

1 file changed

Lines changed: 95 additions & 0 deletions

File tree

Lib/test/test_iconv_codecs.py

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
from test import test_support
2+
import unittest, sys
3+
import codecs, _iconv_codec
4+
from encodings import iconv_codec
5+
from StringIO import StringIO
6+
7+
class IconvCodecTest(unittest.TestCase):
8+
9+
if sys.byteorder == 'big':
10+
spam = '\x00s\x00p\x00a\x00m\x00s\x00p\x00a\x00m'
11+
else:
12+
spam = 's\x00p\x00a\x00m\x00s\x00p\x00a\x00m\x00'
13+
14+
def test_sane(self):
15+
self.encoder, self.decoder, self.reader, self.writer = \
16+
codecs.lookup(_iconv_codec.internal_encoding)
17+
self.assertEqual(self.decoder(self.spam), (u'spamspam', 16))
18+
self.assertEqual(self.encoder(u'spamspam'), (self.spam, 8))
19+
self.assertEqual(self.reader(StringIO(self.spam)).read(), u'spamspam')
20+
f = StringIO()
21+
self.writer(f).write(u'spamspam')
22+
self.assertEqual(f.getvalue(), self.spam)
23+
24+
def test_basic_errors(self):
25+
self.encoder, self.decoder, self.reader, self.writer = \
26+
iconv_codec.lookup("ascii")
27+
def testencerror(errors):
28+
return self.encoder(u'sp\ufffdam', errors)
29+
def testdecerror(errors):
30+
return self.decoder('sp\xffam', errors)
31+
32+
self.assertRaises(UnicodeEncodeError, testencerror, 'strict')
33+
self.assertRaises(UnicodeDecodeError, testdecerror, 'strict')
34+
self.assertEqual(testencerror('replace'), ('sp?am', 5))
35+
self.assertEqual(testdecerror('replace'), (u'sp\ufffdam', 5))
36+
self.assertEqual(testencerror('ignore'), ('spam', 5))
37+
self.assertEqual(testdecerror('ignore'), (u'spam', 5))
38+
39+
def test_pep293_errors(self):
40+
self.encoder, self.decoder, self.reader, self.writer = \
41+
iconv_codec.lookup("ascii")
42+
def testencerror(errors):
43+
return self.encoder(u'sp\ufffdam', errors)
44+
def testdecerror(errors):
45+
return self.decoder('sp\xffam', errors)
46+
47+
self.assertEqual(testencerror('xmlcharrefreplace'),
48+
('sp�am', 5))
49+
self.assertEqual(testencerror('backslashreplace'),
50+
('sp\\ufffdam', 5))
51+
52+
def error_bomb(exc):
53+
return (u'*'*40, len(exc.object))
54+
def error_mock(exc):
55+
error_mock.lastexc = exc
56+
return (unicode(exc.object[exc.start - 1]), exc.end)
57+
58+
codecs.register_error('test_iconv_codec.bomb', error_bomb)
59+
codecs.register_error('test_iconv_codec.mock', error_mock)
60+
61+
self.assertEqual(testencerror('test_iconv_codec.bomb'),
62+
('sp' + ('*'*40), 5))
63+
self.assertEqual(testdecerror('test_iconv_codec.bomb'),
64+
(u'sp' + (u'*'*40), 5))
65+
66+
self.assertEqual(testencerror('test_iconv_codec.mock'), ('sppam', 5))
67+
exc = error_mock.lastexc
68+
self.assertEqual(exc.object, u'sp\ufffdam')
69+
self.assertEqual(exc.start, 2)
70+
self.assertEqual(exc.end, 3)
71+
self.assert_(isinstance(exc, UnicodeEncodeError))
72+
73+
self.assertEqual(testdecerror('test_iconv_codec.mock'), (u'sppam', 5))
74+
exc = error_mock.lastexc
75+
self.assertEqual(exc.object, 'sp\xffam')
76+
self.assertEqual(exc.start, 2)
77+
self.assertEqual(exc.end, 3)
78+
self.assert_(isinstance(exc, UnicodeDecodeError))
79+
80+
def test_empty_escape_decode(self):
81+
self.encoder, self.decoder, self.reader, self.writer = \
82+
iconv_codec.lookup("ascii")
83+
self.assertEquals(self.decoder(u""), ("", 0))
84+
self.assertEquals(self.encoder(""), (u"", 0))
85+
86+
def test_main():
87+
suite = unittest.TestSuite()
88+
suite.addTest(unittest.makeSuite(IconvCodecTest))
89+
test_support.run_suite(suite)
90+
91+
92+
if __name__ == "__main__":
93+
test_main()
94+
95+
# ex: ts=8 sts=4 et

0 commit comments

Comments
 (0)