python (3.11.7)
1 # Codec encoding tests for ISO 2022 encodings.
2
3 from test import multibytecodec_support
4 import unittest
5
6 COMMON_CODEC_TESTS = (
7 # invalid bytes
8 (b'ab\xFFcd', 'replace', 'ab\uFFFDcd'),
9 (b'ab\x1Bdef', 'replace', 'ab\x1Bdef'),
10 (b'ab\x1B$def', 'replace', 'ab\uFFFD'),
11 )
12
13 class ESC[4;38;5;81mTest_ISO2022_JP(ESC[4;38;5;149mmultibytecodec_supportESC[4;38;5;149m.ESC[4;38;5;149mTestBase, ESC[4;38;5;149munittestESC[4;38;5;149m.ESC[4;38;5;149mTestCase):
14 encoding = 'iso2022_jp'
15 tstring = multibytecodec_support.load_teststring('iso2022_jp')
16 codectests = COMMON_CODEC_TESTS + (
17 (b'ab\x1BNdef', 'replace', 'ab\x1BNdef'),
18 )
19
20 class ESC[4;38;5;81mTest_ISO2022_JP2(ESC[4;38;5;149mmultibytecodec_supportESC[4;38;5;149m.ESC[4;38;5;149mTestBase, ESC[4;38;5;149munittestESC[4;38;5;149m.ESC[4;38;5;149mTestCase):
21 encoding = 'iso2022_jp_2'
22 tstring = multibytecodec_support.load_teststring('iso2022_jp')
23 codectests = COMMON_CODEC_TESTS + (
24 (b'ab\x1BNdef', 'replace', 'abdef'),
25 )
26
27 class ESC[4;38;5;81mTest_ISO2022_JP3(ESC[4;38;5;149mmultibytecodec_supportESC[4;38;5;149m.ESC[4;38;5;149mTestBase, ESC[4;38;5;149munittestESC[4;38;5;149m.ESC[4;38;5;149mTestCase):
28 encoding = 'iso2022_jp_3'
29 tstring = multibytecodec_support.load_teststring('iso2022_jp')
30 codectests = COMMON_CODEC_TESTS + (
31 (b'ab\x1BNdef', 'replace', 'ab\x1BNdef'),
32 (b'\x1B$(O\x2E\x23\x1B(B', 'strict', '\u3402' ),
33 (b'\x1B$(O\x2E\x22\x1B(B', 'strict', '\U0002000B' ),
34 (b'\x1B$(O\x24\x77\x1B(B', 'strict', '\u304B\u309A'),
35 (b'\x1B$(P\x21\x22\x1B(B', 'strict', '\u4E02' ),
36 (b'\x1B$(P\x7E\x76\x1B(B', 'strict', '\U0002A6B2' ),
37 ('\u3402', 'strict', b'\x1B$(O\x2E\x23\x1B(B'),
38 ('\U0002000B', 'strict', b'\x1B$(O\x2E\x22\x1B(B'),
39 ('\u304B\u309A', 'strict', b'\x1B$(O\x24\x77\x1B(B'),
40 ('\u4E02', 'strict', b'\x1B$(P\x21\x22\x1B(B'),
41 ('\U0002A6B2', 'strict', b'\x1B$(P\x7E\x76\x1B(B'),
42 (b'ab\x1B$(O\x2E\x21\x1B(Bdef', 'replace', 'ab\uFFFDdef'),
43 ('ab\u4FF1def', 'replace', b'ab?def'),
44 )
45 xmlcharnametest = (
46 '\xAB\u211C\xBB = \u2329\u1234\u232A',
47 b'\x1B$(O\x29\x28\x1B(Bℜ\x1B$(O\x29\x32\x1B(B = ⟨ሴ⟩'
48 )
49
50 class ESC[4;38;5;81mTest_ISO2022_JP2004(ESC[4;38;5;149mmultibytecodec_supportESC[4;38;5;149m.ESC[4;38;5;149mTestBase, ESC[4;38;5;149munittestESC[4;38;5;149m.ESC[4;38;5;149mTestCase):
51 encoding = 'iso2022_jp_2004'
52 tstring = multibytecodec_support.load_teststring('iso2022_jp')
53 codectests = COMMON_CODEC_TESTS + (
54 (b'ab\x1BNdef', 'replace', 'ab\x1BNdef'),
55 (b'\x1B$(Q\x2E\x23\x1B(B', 'strict', '\u3402' ),
56 (b'\x1B$(Q\x2E\x22\x1B(B', 'strict', '\U0002000B' ),
57 (b'\x1B$(Q\x24\x77\x1B(B', 'strict', '\u304B\u309A'),
58 (b'\x1B$(P\x21\x22\x1B(B', 'strict', '\u4E02' ),
59 (b'\x1B$(P\x7E\x76\x1B(B', 'strict', '\U0002A6B2' ),
60 ('\u3402', 'strict', b'\x1B$(Q\x2E\x23\x1B(B'),
61 ('\U0002000B', 'strict', b'\x1B$(Q\x2E\x22\x1B(B'),
62 ('\u304B\u309A', 'strict', b'\x1B$(Q\x24\x77\x1B(B'),
63 ('\u4E02', 'strict', b'\x1B$(P\x21\x22\x1B(B'),
64 ('\U0002A6B2', 'strict', b'\x1B$(P\x7E\x76\x1B(B'),
65 (b'ab\x1B$(Q\x2E\x21\x1B(Bdef', 'replace', 'ab\u4FF1def'),
66 ('ab\u4FF1def', 'replace', b'ab\x1B$(Q\x2E\x21\x1B(Bdef'),
67 )
68 xmlcharnametest = (
69 '\xAB\u211C\xBB = \u2329\u1234\u232A',
70 b'\x1B$(Q\x29\x28\x1B(Bℜ\x1B$(Q\x29\x32\x1B(B = ⟨ሴ⟩'
71 )
72
73 class ESC[4;38;5;81mTest_ISO2022_KR(ESC[4;38;5;149mmultibytecodec_supportESC[4;38;5;149m.ESC[4;38;5;149mTestBase, ESC[4;38;5;149munittestESC[4;38;5;149m.ESC[4;38;5;149mTestCase):
74 encoding = 'iso2022_kr'
75 tstring = multibytecodec_support.load_teststring('iso2022_kr')
76 codectests = COMMON_CODEC_TESTS + (
77 (b'ab\x1BNdef', 'replace', 'ab\x1BNdef'),
78 )
79
80 # iso2022_kr.txt cannot be used to test "chunk coding": the escape
81 # sequence is only written on the first line
82 @unittest.skip('iso2022_kr.txt cannot be used to test "chunk coding"')
83 def test_chunkcoding(self):
84 pass
85
86 if __name__ == "__main__":
87 unittest.main()