blob: aef7931e037ad88b0d54863243d396fe69f4048d [file] [log] [blame]
Hye-Shik Chang3e2a3062004-01-17 14:29:29 +00001#!/usr/bin/env python
2#
3# test_multibytecodec.py
4# Unit test for multibytecodec itself
5#
Hye-Shik Chang2bb146f2004-07-18 03:06:29 +00006# $CJKCodecs: test_multibytecodec.py,v 1.8 2004/06/19 06:09:55 perky Exp $
Hye-Shik Chang3e2a3062004-01-17 14:29:29 +00007
8from test import test_support
9from test import test_multibytecodec_support
10import unittest, StringIO, codecs
11
12class Test_StreamWriter(unittest.TestCase):
13 if len(u'\U00012345') == 2: # UCS2
14 def test_gb18030(self):
15 s= StringIO.StringIO()
16 c = codecs.lookup('gb18030')[3](s)
17 c.write(u'123')
18 self.assertEqual(s.getvalue(), '123')
19 c.write(u'\U00012345')
20 self.assertEqual(s.getvalue(), '123\x907\x959')
21 c.write(u'\U00012345'[0])
22 self.assertEqual(s.getvalue(), '123\x907\x959')
23 c.write(u'\U00012345'[1] + u'\U00012345' + u'\uac00\u00ac')
24 self.assertEqual(s.getvalue(),
25 '123\x907\x959\x907\x959\x907\x959\x827\xcf5\x810\x851')
26 c.write(u'\U00012345'[0])
27 self.assertEqual(s.getvalue(),
28 '123\x907\x959\x907\x959\x907\x959\x827\xcf5\x810\x851')
29 self.assertRaises(UnicodeError, c.reset)
30 self.assertEqual(s.getvalue(),
31 '123\x907\x959\x907\x959\x907\x959\x827\xcf5\x810\x851')
32
33 # standard utf-8 codecs has broken StreamReader
34 if test_multibytecodec_support.__cjkcodecs__:
35 def test_utf_8(self):
36 s= StringIO.StringIO()
37 c = codecs.lookup('utf-8')[3](s)
38 c.write(u'123')
39 self.assertEqual(s.getvalue(), '123')
40 c.write(u'\U00012345')
41 self.assertEqual(s.getvalue(), '123\xf0\x92\x8d\x85')
42 c.write(u'\U00012345'[0])
43 self.assertEqual(s.getvalue(), '123\xf0\x92\x8d\x85')
44 c.write(u'\U00012345'[1] + u'\U00012345' + u'\uac00\u00ac')
45 self.assertEqual(s.getvalue(),
46 '123\xf0\x92\x8d\x85\xf0\x92\x8d\x85\xf0\x92\x8d\x85'
47 '\xea\xb0\x80\xc2\xac')
48 c.write(u'\U00012345'[0])
49 self.assertEqual(s.getvalue(),
50 '123\xf0\x92\x8d\x85\xf0\x92\x8d\x85\xf0\x92\x8d\x85'
51 '\xea\xb0\x80\xc2\xac')
52 c.reset()
53 self.assertEqual(s.getvalue(),
54 '123\xf0\x92\x8d\x85\xf0\x92\x8d\x85\xf0\x92\x8d\x85'
55 '\xea\xb0\x80\xc2\xac\xed\xa0\x88')
56 c.write(u'\U00012345'[1])
57 self.assertEqual(s.getvalue(),
58 '123\xf0\x92\x8d\x85\xf0\x92\x8d\x85\xf0\x92\x8d\x85'
59 '\xea\xb0\x80\xc2\xac\xed\xa0\x88\xed\xbd\x85')
60
61 else: # UCS4
62 pass
63
64 def test_nullcoding(self):
Hye-Shik Changa5e719e2004-01-20 09:11:48 +000065 self.assertEqual(''.decode('gb18030'), u'')
66 self.assertEqual(unicode('', 'gb18030'), u'')
67 self.assertEqual(u''.encode('gb18030'), '')
Hye-Shik Chang3e2a3062004-01-17 14:29:29 +000068
69 def test_str_decode(self):
Hye-Shik Changa5e719e2004-01-20 09:11:48 +000070 self.assertEqual('abcd'.encode('gb18030'), 'abcd')
Hye-Shik Chang3e2a3062004-01-17 14:29:29 +000071
Hye-Shik Chang2bb146f2004-07-18 03:06:29 +000072 def test_streamwriter_strwrite(self):
73 s = StringIO.StringIO()
74 wr = codecs.getwriter('gb18030')(s)
75 wr.write('abcd')
76 self.assertEqual(s.getvalue(), 'abcd')
77
Hye-Shik Changabb903f2006-03-13 10:20:08 +000078class Test_ISO2022(unittest.TestCase):
79 def test_g2(self):
80 iso2022jp2 = '\x1b(B:hu4:unit\x1b.A\x1bNi de famille'
81 uni = u':hu4:unit\xe9 de famille'
82 self.assertEqual(iso2022jp2.decode('iso2022-jp-2'), uni)
83
Hye-Shik Chang3e2a3062004-01-17 14:29:29 +000084def test_main():
85 suite = unittest.TestSuite()
86 suite.addTest(unittest.makeSuite(Test_StreamWriter))
Hye-Shik Changabb903f2006-03-13 10:20:08 +000087 suite.addTest(unittest.makeSuite(Test_ISO2022))
Hye-Shik Chang3e2a3062004-01-17 14:29:29 +000088 test_support.run_suite(suite)
89
90if __name__ == "__main__":
91 test_main()