1 from test
import test_support
3 import codecs
, _iconv_codec
4 from encodings
import iconv_codec
5 from StringIO
import StringIO
7 class IconvCodecTest(unittest
.TestCase
):
9 if sys
.byteorder
== 'big':
10 spam
= '\x00s\x00p\x00a\x00m' * 2
12 spam
= 's\x00p\x00a\x00m\x00' * 2
15 # FIXME: Commented out, because it's not clear whether
16 # the internal encoding choosen requires byte swapping
17 # for this iconv() implementation.
19 self
.encoder
, self
.decoder
, self
.reader
, self
.writer
= \
20 codecs
.lookup(_iconv_codec
.internal_encoding
)
21 self
.assertEqual(self
.decoder(self
.spam
), (u
'spamspam', 16))
22 self
.assertEqual(self
.encoder(u
'spamspam'), (self
.spam
, 8))
23 self
.assertEqual(self
.reader(StringIO(self
.spam
)).read(), u
'spamspam')
25 self
.writer(f
).write(u
'spamspam')
26 self
.assertEqual(f
.getvalue(), self
.spam
)
28 def test_basic_errors(self
):
29 self
.encoder
, self
.decoder
, self
.reader
, self
.writer
= \
30 iconv_codec
.lookup("ascii")
31 def testencerror(errors
):
32 return self
.encoder(u
'sp\ufffdam', errors
)
33 def testdecerror(errors
):
34 return self
.decoder('sp\xffam', errors
)
36 self
.assertRaises(UnicodeEncodeError, testencerror
, 'strict')
37 self
.assertRaises(UnicodeDecodeError, testdecerror
, 'strict')
38 self
.assertEqual(testencerror('replace'), ('sp?am', 5))
39 self
.assertEqual(testdecerror('replace'), (u
'sp\ufffdam', 5))
40 self
.assertEqual(testencerror('ignore'), ('spam', 5))
41 self
.assertEqual(testdecerror('ignore'), (u
'spam', 5))
43 def test_pep293_errors(self
):
44 self
.encoder
, self
.decoder
, self
.reader
, self
.writer
= \
45 iconv_codec
.lookup("ascii")
46 def testencerror(errors
):
47 return self
.encoder(u
'sp\ufffdam', errors
)
48 def testdecerror(errors
):
49 return self
.decoder('sp\xffam', errors
)
51 self
.assertEqual(testencerror('xmlcharrefreplace'),
53 self
.assertEqual(testencerror('backslashreplace'),
57 return (u
'*'*40, len(exc
.object))
59 error_mock
.lastexc
= exc
60 return (unicode(exc
.object[exc
.start
- 1]), exc
.end
)
62 codecs
.register_error('test_iconv_codec.bomb', error_bomb
)
63 codecs
.register_error('test_iconv_codec.mock', error_mock
)
65 self
.assertEqual(testencerror('test_iconv_codec.bomb'),
67 self
.assertEqual(testdecerror('test_iconv_codec.bomb'),
68 (u
'sp' + (u
'*'*40), 5))
70 self
.assertEqual(testencerror('test_iconv_codec.mock'), ('sppam', 5))
71 exc
= error_mock
.lastexc
72 self
.assertEqual(exc
.object, u
'sp\ufffdam')
73 self
.assertEqual(exc
.start
, 2)
74 self
.assertEqual(exc
.end
, 3)
75 self
.assert_(isinstance(exc
, UnicodeEncodeError))
77 self
.assertEqual(testdecerror('test_iconv_codec.mock'), (u
'sppam', 5))
78 exc
= error_mock
.lastexc
79 self
.assertEqual(exc
.object, 'sp\xffam')
80 self
.assertEqual(exc
.start
, 2)
81 self
.assertEqual(exc
.end
, 3)
82 self
.assert_(isinstance(exc
, UnicodeDecodeError))
84 def test_empty_escape_decode(self
):
85 self
.encoder
, self
.decoder
, self
.reader
, self
.writer
= \
86 iconv_codec
.lookup("ascii")
87 self
.assertEquals(self
.decoder(u
""), ("", 0))
88 self
.assertEquals(self
.encoder(""), (u
"", 0))
91 suite
= unittest
.TestSuite()
92 suite
.addTest(unittest
.makeSuite(IconvCodecTest
))
93 test_support
.run_suite(suite
)
96 if __name__
== "__main__":