|
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
|
@@ -1771,6 +1773,61 @@ def test_readlines(self):
|
1771 | 1773 | f = self.reader(self.stream)
|
1772 | 1774 | self.assertEqual(f.readlines(), ['\ud55c\n', '\uae00'])
|
1773 | 1775 |
|
| 1776 | + def test_copy(self): |
| 1777 | + f = self.reader(Queue(b'\xed\x95\x9c\n\xea\xb8\x80')) |
| 1778 | + with self.assertRaisesRegex(TypeError, 'StreamReader'): |
| 1779 | + copy.copy(f) |
| 1780 | + with self.assertRaisesRegex(TypeError, 'StreamReader'): |
| 1781 | + copy.deepcopy(f) |
| 1782 | + |
| 1783 | + def test_pickle(self): |
| 1784 | + for proto in range(pickle.HIGHEST_PROTOCOL + 1): |
| 1785 | + with self.subTest(protocol=proto): |
| 1786 | + f = self.reader(Queue(b'\xed\x95\x9c\n\xea\xb8\x80')) |
| 1787 | + with self.assertRaisesRegex(TypeError, 'StreamReader'): |
| 1788 | + pickle.dumps(f, proto) |
| 1789 | + |
| 1790 | + |
| 1791 | +class StreamWriterTest(unittest.TestCase): |
| 1792 | + |
| 1793 | + def setUp(self): |
| 1794 | + self.writer = codecs.getwriter('utf-8') |
| 1795 | + |
| 1796 | + def test_copy(self): |
| 1797 | + f = self.writer(Queue(b'')) |
| 1798 | + with self.assertRaisesRegex(TypeError, 'StreamWriter'): |
| 1799 | + copy.copy(f) |
| 1800 | + with self.assertRaisesRegex(TypeError, 'StreamWriter'): |
| 1801 | + copy.deepcopy(f) |
| 1802 | + |
| 1803 | + def test_pickle(self): |
| 1804 | + for proto in range(pickle.HIGHEST_PROTOCOL + 1): |
| 1805 | + with self.subTest(protocol=proto): |
| 1806 | + f = self.writer(Queue(b'')) |
| 1807 | + with self.assertRaisesRegex(TypeError, 'StreamWriter'): |
| 1808 | + pickle.dumps(f, proto) |
| 1809 | + |
| 1810 | + |
| 1811 | +class StreamReaderWriterTest(unittest.TestCase): |
| 1812 | + |
| 1813 | + def setUp(self): |
| 1814 | + self.reader = codecs.getreader('latin1') |
| 1815 | + self.writer = codecs.getwriter('utf-8') |
| 1816 | + |
| 1817 | + def test_copy(self): |
| 1818 | + f = codecs.StreamReaderWriter(Queue(b''), self.reader, self.writer) |
| 1819 | + with self.assertRaisesRegex(TypeError, 'StreamReaderWriter'): |
| 1820 | + copy.copy(f) |
| 1821 | + with self.assertRaisesRegex(TypeError, 'StreamReaderWriter'): |
| 1822 | + copy.deepcopy(f) |
| 1823 | + |
| 1824 | + def test_pickle(self): |
| 1825 | + for proto in range(pickle.HIGHEST_PROTOCOL + 1): |
| 1826 | + with self.subTest(protocol=proto): |
| 1827 | + f = codecs.StreamReaderWriter(Queue(b''), self.reader, self.writer) |
| 1828 | + with self.assertRaisesRegex(TypeError, 'StreamReaderWriter'): |
| 1829 | + pickle.dumps(f, proto) |
| 1830 | + |
1774 | 1831 |
|
1775 | 1832 | class EncodedFileTest(unittest.TestCase):
|
1776 | 1833 |
|
@@ -3346,6 +3403,28 @@ def test_seeking_write(self):
|
3346 | 3403 | self.assertEqual(sr.readline(), b'abc\n')
|
3347 | 3404 | self.assertEqual(sr.readline(), b'789\n')
|
3348 | 3405 |
|
| 3406 | + def test_copy(self): |
| 3407 | + bio = io.BytesIO() |
| 3408 | + codec = codecs.lookup('ascii') |
| 3409 | + sr = codecs.StreamRecoder(bio, codec.encode, codec.decode, |
| 3410 | + encodings.ascii.StreamReader, encodings.ascii.StreamWriter) |
| 3411 | + |
| 3412 | + with self.assertRaisesRegex(TypeError, 'StreamRecoder'): |
| 3413 | + copy.copy(sr) |
| 3414 | + with self.assertRaisesRegex(TypeError, 'StreamRecoder'): |
| 3415 | + copy.deepcopy(sr) |
| 3416 | + |
| 3417 | + def test_pickle(self): |
| 3418 | + q = Queue(b'') |
| 3419 | + codec = codecs.lookup('ascii') |
| 3420 | + sr = codecs.StreamRecoder(q, codec.encode, codec.decode, |
| 3421 | + encodings.ascii.StreamReader, encodings.ascii.StreamWriter) |
| 3422 | + |
| 3423 | + for proto in range(pickle.HIGHEST_PROTOCOL + 1): |
| 3424 | + with self.subTest(protocol=proto): |
| 3425 | + with self.assertRaisesRegex(TypeError, 'StreamRecoder'): |
| 3426 | + pickle.dumps(sr, proto) |
| 3427 | + |
3349 | 3428 |
|
3350 | 3429 | @unittest.skipIf(_testinternalcapi is None, 'need _testinternalcapi module')
|
3351 | 3430 | class LocaleCodecTest(unittest.TestCase):
|
|
0 commit comments