|
1 | 1 | import codecs
|
2 | 2 | import contextlib
|
| 3 | +import copy |
3 | 4 | import io
|
4 | 5 | import locale
|
| 6 | +import pickle |
5 | 7 | import sys
|
6 | 8 | import unittest
|
7 | 9 | import encodings
|
@@ -1772,6 +1774,61 @@ def test_readlines(self):
|
1772 | 1774 | f = self.reader(self.stream)
|
1773 | 1775 | self.assertEqual(f.readlines(), ['\ud55c\n', '\uae00'])
|
1774 | 1776 |
|
| 1777 | + def test_copy(self): |
| 1778 | + f = self.reader(Queue(b'\xed\x95\x9c\n\xea\xb8\x80')) |
| 1779 | + with self.assertRaisesRegex(TypeError, 'StreamReader'): |
| 1780 | + copy.copy(f) |
| 1781 | + with self.assertRaisesRegex(TypeError, 'StreamReader'): |
| 1782 | + copy.deepcopy(f) |
| 1783 | + |
| 1784 | + def test_pickle(self): |
| 1785 | + for proto in range(pickle.HIGHEST_PROTOCOL + 1): |
| 1786 | + with self.subTest(protocol=proto): |
| 1787 | + f = self.reader(Queue(b'\xed\x95\x9c\n\xea\xb8\x80')) |
| 1788 | + with self.assertRaisesRegex(TypeError, 'StreamReader'): |
| 1789 | + pickle.dumps(f, proto) |
| 1790 | + |
| 1791 | + |
| 1792 | +class StreamWriterTest(unittest.TestCase): |
| 1793 | + |
| 1794 | + def setUp(self): |
| 1795 | + self.writer = codecs.getwriter('utf-8') |
| 1796 | + |
| 1797 | + def test_copy(self): |
| 1798 | + f = self.writer(Queue(b'')) |
| 1799 | + with self.assertRaisesRegex(TypeError, 'StreamWriter'): |
| 1800 | + copy.copy(f) |
| 1801 | + with self.assertRaisesRegex(TypeError, 'StreamWriter'): |
| 1802 | + copy.deepcopy(f) |
| 1803 | + |
| 1804 | + def test_pickle(self): |
| 1805 | + for proto in range(pickle.HIGHEST_PROTOCOL + 1): |
| 1806 | + with self.subTest(protocol=proto): |
| 1807 | + f = self.writer(Queue(b'')) |
| 1808 | + with self.assertRaisesRegex(TypeError, 'StreamWriter'): |
| 1809 | + pickle.dumps(f, proto) |
| 1810 | + |
| 1811 | + |
| 1812 | +class StreamReaderWriterTest(unittest.TestCase): |
| 1813 | + |
| 1814 | + def setUp(self): |
| 1815 | + self.reader = codecs.getreader('latin1') |
| 1816 | + self.writer = codecs.getwriter('utf-8') |
| 1817 | + |
| 1818 | + def test_copy(self): |
| 1819 | + f = codecs.StreamReaderWriter(Queue(b''), self.reader, self.writer) |
| 1820 | + with self.assertRaisesRegex(TypeError, 'StreamReaderWriter'): |
| 1821 | + copy.copy(f) |
| 1822 | + with self.assertRaisesRegex(TypeError, 'StreamReaderWriter'): |
| 1823 | + copy.deepcopy(f) |
| 1824 | + |
| 1825 | + def test_pickle(self): |
| 1826 | + for proto in range(pickle.HIGHEST_PROTOCOL + 1): |
| 1827 | + with self.subTest(protocol=proto): |
| 1828 | + f = codecs.StreamReaderWriter(Queue(b''), self.reader, self.writer) |
| 1829 | + with self.assertRaisesRegex(TypeError, 'StreamReaderWriter'): |
| 1830 | + pickle.dumps(f, proto) |
| 1831 | + |
1775 | 1832 |
|
1776 | 1833 | class EncodedFileTest(unittest.TestCase):
|
1777 | 1834 |
|
@@ -3369,6 +3426,28 @@ def test_seeking_write(self):
|
3369 | 3426 | self.assertEqual(sr.readline(), b'abc\n')
|
3370 | 3427 | self.assertEqual(sr.readline(), b'789\n')
|
3371 | 3428 |
|
| 3429 | + def test_copy(self): |
| 3430 | + bio = io.BytesIO() |
| 3431 | + codec = codecs.lookup('ascii') |
| 3432 | + sr = codecs.StreamRecoder(bio, codec.encode, codec.decode, |
| 3433 | + encodings.ascii.StreamReader, encodings.ascii.StreamWriter) |
| 3434 | + |
| 3435 | + with self.assertRaisesRegex(TypeError, 'StreamRecoder'): |
| 3436 | + copy.copy(sr) |
| 3437 | + with self.assertRaisesRegex(TypeError, 'StreamRecoder'): |
| 3438 | + copy.deepcopy(sr) |
| 3439 | + |
| 3440 | + def test_pickle(self): |
| 3441 | + q = Queue(b'') |
| 3442 | + codec = codecs.lookup('ascii') |
| 3443 | + sr = codecs.StreamRecoder(q, codec.encode, codec.decode, |
| 3444 | + encodings.ascii.StreamReader, encodings.ascii.StreamWriter) |
| 3445 | + |
| 3446 | + for proto in range(pickle.HIGHEST_PROTOCOL + 1): |
| 3447 | + with self.subTest(protocol=proto): |
| 3448 | + with self.assertRaisesRegex(TypeError, 'StreamRecoder'): |
| 3449 | + pickle.dumps(sr, proto) |
| 3450 | + |
3372 | 3451 |
|
3373 | 3452 | @unittest.skipIf(_testinternalcapi is None, 'need _testinternalcapi module')
|
3374 | 3453 | class LocaleCodecTest(unittest.TestCase):
|
|
0 commit comments