|
4 | 4 |
|
5 | 5 | (c) Copyright CNRI, All Rights Reserved. NO WARRANTY. |
6 | 6 |
|
7 | | -"""#" |
| 7 | +""" |
8 | 8 | import _string |
9 | 9 | import codecs |
10 | 10 | import itertools |
@@ -2735,6 +2735,49 @@ def test_asucs4(self): |
2735 | 2735 | self.assertEqual(unicode_asucs4(s, len(s), 1), s+'\0') |
2736 | 2736 | self.assertEqual(unicode_asucs4(s, len(s), 0), s+'\uffff') |
2737 | 2737 |
|
| 2738 | + # Test PyUnicode_CopyCharacters() |
| 2739 | + @support.cpython_only |
| 2740 | + def test_copycharacters(self): |
| 2741 | + from _testcapi import unicode_copycharacters |
| 2742 | + |
| 2743 | + strings = [ |
| 2744 | + 'abcde', '\xa1\xa2\xa3\xa4\xa5', |
| 2745 | + '\u4f60\u597d\u4e16\u754c\uff01', |
| 2746 | + '\U0001f600\U0001f601\U0001f602\U0001f603\U0001f604' |
| 2747 | + ] |
| 2748 | + |
| 2749 | + for idx, from_ in enumerate(strings): |
| 2750 | + # wide -> narrow: exceed maxchar limitation |
| 2751 | + for to in strings[:idx]: |
| 2752 | + self.assertRaises( |
| 2753 | + SystemError, |
| 2754 | + unicode_copycharacters, to, 0, from_, 0, 5 |
| 2755 | + ) |
| 2756 | + # same kind |
| 2757 | + for from_start in range(5): |
| 2758 | + self.assertEqual( |
| 2759 | + unicode_copycharacters(from_, 0, from_, from_start, 5), |
| 2760 | + (from_[from_start:from_start+5].ljust(5, '\0'), |
| 2761 | + 5-from_start) |
| 2762 | + ) |
| 2763 | + for to_start in range(5): |
| 2764 | + self.assertEqual( |
| 2765 | + unicode_copycharacters(from_, to_start, from_, to_start, 5), |
| 2766 | + (from_[to_start:to_start+5].rjust(5, '\0'), |
| 2767 | + 5-to_start) |
| 2768 | + ) |
| 2769 | + # narrow -> wide |
| 2770 | + # Tests omitted since this creates invalid strings. |
| 2771 | + |
| 2772 | + s = strings[0] |
| 2773 | + self.assertRaises(IndexError, unicode_copycharacters, s, 6, s, 0, 5) |
| 2774 | + self.assertRaises(IndexError, unicode_copycharacters, s, -1, s, 0, 5) |
| 2775 | + self.assertRaises(IndexError, unicode_copycharacters, s, 0, s, 6, 5) |
| 2776 | + self.assertRaises(IndexError, unicode_copycharacters, s, 0, s, -1, 5) |
| 2777 | + self.assertRaises(SystemError, unicode_copycharacters, s, 1, s, 0, 5) |
| 2778 | + self.assertRaises(SystemError, unicode_copycharacters, s, 0, s, 0, -1) |
| 2779 | + self.assertRaises(SystemError, unicode_copycharacters, s, 0, b'', 0, 0) |
| 2780 | + |
2738 | 2781 | @support.cpython_only |
2739 | 2782 | def test_encode_decimal(self): |
2740 | 2783 | from _testcapi import unicode_encodedecimal |
|
0 commit comments