Mercurial > cpython-lru_cache-weakref
annotate Lib/test/test_io.py @ 79675:c0a2294de787 2.7
Issue #16199: Backport 2to3 typo fix from 3.2.
| author | Chris Jerdonek <chris.jerdonek@gmail.com> |
|---|---|
| date | Thu, 11 Oct 2012 16:15:46 -0700 |
| parents | 1102e86b8739 |
| children | 2f314971e164 |
| rev | line source |
|---|---|
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1 """Unit tests for the io module.""" |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
3 # Tests of io are scattered over the test suite: |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
4 # * test_bufio - tests file buffering |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
5 # * test_memoryio - tests BytesIO and StringIO |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
6 # * test_fileio - tests FileIO |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
7 # * test_file - tests the file interface |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
8 # * test_io - tests everything else in the io module |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
9 # * test_univnewlines - tests universal newline support |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
10 # * test_largefile - tests operations on a file greater than 2**32 bytes |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
11 # (only enabled with -ulargefile) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
12 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
13 ################################################################################ |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
14 # ATTENTION TEST WRITERS!!! |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
15 ################################################################################ |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
16 # When writing tests for io, it's important to test both the C and Python |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
17 # implementations. This is usually done by writing a base test that refers to |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
18 # the type it is testing as a attribute. Then it provides custom subclasses to |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
19 # test both implementations. This file has lots of examples. |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
20 ################################################################################ |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
21 |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
22 from __future__ import print_function |
|
46124
38fe64e3b131
Use the new unicode literals for the io module
Christian Heimes <christian@cheimes.de>
parents:
46107
diff
changeset
|
23 from __future__ import unicode_literals |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
24 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
25 import os |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
26 import sys |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
27 import time |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
28 import array |
|
48238
67938575afc6
Issue #3476: make BufferedReader and BufferedWriter thread-safe
Antoine Pitrou <solipsis@pitrou.net>
parents:
46805
diff
changeset
|
29 import random |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
30 import unittest |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
31 import weakref |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
32 import abc |
|
64209
dfd0229748ef
Merged revisions 84239 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63921
diff
changeset
|
33 import signal |
|
dfd0229748ef
Merged revisions 84239 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63921
diff
changeset
|
34 import errno |
|
63634
762d89faceaa
Merged revisions 79539 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
63556
diff
changeset
|
35 from itertools import cycle, count |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
36 from collections import deque |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
37 from test import test_support as support |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
38 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
39 import codecs |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
40 import io # C implementation of io |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
41 import _pyio as pyio # Python implementation of io |
|
61046
3a0484200034
Issue #7449, last part (11): fix many tests if thread support is disabled
Victor Stinner <victor.stinner@haypocalc.com>
parents:
60486
diff
changeset
|
42 try: |
|
3a0484200034
Issue #7449, last part (11): fix many tests if thread support is disabled
Victor Stinner <victor.stinner@haypocalc.com>
parents:
60486
diff
changeset
|
43 import threading |
|
3a0484200034
Issue #7449, last part (11): fix many tests if thread support is disabled
Victor Stinner <victor.stinner@haypocalc.com>
parents:
60486
diff
changeset
|
44 except ImportError: |
|
3a0484200034
Issue #7449, last part (11): fix many tests if thread support is disabled
Victor Stinner <victor.stinner@haypocalc.com>
parents:
60486
diff
changeset
|
45 threading = None |
|
73667
e84e17643eeb
Issue #13322: Fix BufferedWriter.write() to ensure that BlockingIOError is
Antoine Pitrou <solipsis@pitrou.net>
parents:
72754
diff
changeset
|
46 try: |
|
e84e17643eeb
Issue #13322: Fix BufferedWriter.write() to ensure that BlockingIOError is
Antoine Pitrou <solipsis@pitrou.net>
parents:
72754
diff
changeset
|
47 import fcntl |
|
e84e17643eeb
Issue #13322: Fix BufferedWriter.write() to ensure that BlockingIOError is
Antoine Pitrou <solipsis@pitrou.net>
parents:
72754
diff
changeset
|
48 except ImportError: |
|
e84e17643eeb
Issue #13322: Fix BufferedWriter.write() to ensure that BlockingIOError is
Antoine Pitrou <solipsis@pitrou.net>
parents:
72754
diff
changeset
|
49 fcntl = None |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
50 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
51 __metaclass__ = type |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
52 bytes = support.py3k_bytes |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
53 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
54 def _default_chunk_size(): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
55 """Get the default TextIOWrapper chunk size""" |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
56 with io.open(__file__, "r", encoding="latin1") as f: |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
57 return f._CHUNK_SIZE |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
58 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
59 |
|
64750
2b9dea2a2fff
Merged revisions 84814 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64706
diff
changeset
|
60 class MockRawIOWithoutRead: |
|
2b9dea2a2fff
Merged revisions 84814 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64706
diff
changeset
|
61 """A RawIO implementation without read(), so as to exercise the default |
|
2b9dea2a2fff
Merged revisions 84814 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64706
diff
changeset
|
62 RawIO.read() which calls readinto().""" |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
63 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
64 def __init__(self, read_stack=()): |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
65 self._read_stack = list(read_stack) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
66 self._write_stack = [] |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
67 self._reads = 0 |
|
63921
c3ff6e910068
Merged revisions 83944 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63260
diff
changeset
|
68 self._extraneous_reads = 0 |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
69 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
70 def write(self, b): |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
71 self._write_stack.append(bytes(b)) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
72 return len(b) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
73 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
74 def writable(self): |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
75 return True |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
76 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
77 def fileno(self): |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
78 return 42 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
79 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
80 def readable(self): |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
81 return True |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
82 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
83 def seekable(self): |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
84 return True |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
85 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
86 def seek(self, pos, whence): |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
87 return 0 # wrong but we gotta return something |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
88 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
89 def tell(self): |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
90 return 0 # same comment as above |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
91 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
92 def readinto(self, buf): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
93 self._reads += 1 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
94 max_len = len(buf) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
95 try: |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
96 data = self._read_stack[0] |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
97 except IndexError: |
|
63921
c3ff6e910068
Merged revisions 83944 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63260
diff
changeset
|
98 self._extraneous_reads += 1 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
99 return 0 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
100 if data is None: |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
101 del self._read_stack[0] |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
102 return None |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
103 n = len(data) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
104 if len(data) <= max_len: |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
105 del self._read_stack[0] |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
106 buf[:n] = data |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
107 return n |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
108 else: |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
109 buf[:] = data[:max_len] |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
110 self._read_stack[0] = data[max_len:] |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
111 return max_len |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
112 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
113 def truncate(self, pos=None): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
114 return pos |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
115 |
|
64750
2b9dea2a2fff
Merged revisions 84814 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64706
diff
changeset
|
116 class CMockRawIOWithoutRead(MockRawIOWithoutRead, io.RawIOBase): |
|
2b9dea2a2fff
Merged revisions 84814 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64706
diff
changeset
|
117 pass |
|
2b9dea2a2fff
Merged revisions 84814 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64706
diff
changeset
|
118 |
|
2b9dea2a2fff
Merged revisions 84814 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64706
diff
changeset
|
119 class PyMockRawIOWithoutRead(MockRawIOWithoutRead, pyio.RawIOBase): |
|
2b9dea2a2fff
Merged revisions 84814 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64706
diff
changeset
|
120 pass |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
121 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
122 |
|
64750
2b9dea2a2fff
Merged revisions 84814 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64706
diff
changeset
|
123 class MockRawIO(MockRawIOWithoutRead): |
|
2b9dea2a2fff
Merged revisions 84814 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64706
diff
changeset
|
124 |
|
2b9dea2a2fff
Merged revisions 84814 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64706
diff
changeset
|
125 def read(self, n=None): |
|
2b9dea2a2fff
Merged revisions 84814 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64706
diff
changeset
|
126 self._reads += 1 |
|
2b9dea2a2fff
Merged revisions 84814 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64706
diff
changeset
|
127 try: |
|
2b9dea2a2fff
Merged revisions 84814 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64706
diff
changeset
|
128 return self._read_stack.pop(0) |
|
2b9dea2a2fff
Merged revisions 84814 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64706
diff
changeset
|
129 except: |
|
2b9dea2a2fff
Merged revisions 84814 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64706
diff
changeset
|
130 self._extraneous_reads += 1 |
|
2b9dea2a2fff
Merged revisions 84814 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64706
diff
changeset
|
131 return b"" |
|
2b9dea2a2fff
Merged revisions 84814 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64706
diff
changeset
|
132 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
133 class CMockRawIO(MockRawIO, io.RawIOBase): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
134 pass |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
135 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
136 class PyMockRawIO(MockRawIO, pyio.RawIOBase): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
137 pass |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
138 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
139 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
140 class MisbehavedRawIO(MockRawIO): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
141 def write(self, b): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
142 return MockRawIO.write(self, b) * 2 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
143 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
144 def read(self, n=None): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
145 return MockRawIO.read(self, n) * 2 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
146 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
147 def seek(self, pos, whence): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
148 return -123 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
149 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
150 def tell(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
151 return -456 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
152 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
153 def readinto(self, buf): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
154 MockRawIO.readinto(self, buf) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
155 return len(buf) * 5 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
156 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
157 class CMisbehavedRawIO(MisbehavedRawIO, io.RawIOBase): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
158 pass |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
159 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
160 class PyMisbehavedRawIO(MisbehavedRawIO, pyio.RawIOBase): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
161 pass |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
162 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
163 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
164 class CloseFailureIO(MockRawIO): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
165 closed = 0 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
166 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
167 def close(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
168 if not self.closed: |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
169 self.closed = 1 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
170 raise IOError |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
171 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
172 class CCloseFailureIO(CloseFailureIO, io.RawIOBase): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
173 pass |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
174 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
175 class PyCloseFailureIO(CloseFailureIO, pyio.RawIOBase): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
176 pass |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
177 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
178 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
179 class MockFileIO: |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
180 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
181 def __init__(self, data): |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
182 self.read_history = [] |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
183 super(MockFileIO, self).__init__(data) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
184 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
185 def read(self, n=None): |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
186 res = super(MockFileIO, self).read(n) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
187 self.read_history.append(None if res is None else len(res)) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
188 return res |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
189 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
190 def readinto(self, b): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
191 res = super(MockFileIO, self).readinto(b) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
192 self.read_history.append(res) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
193 return res |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
194 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
195 class CMockFileIO(MockFileIO, io.BytesIO): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
196 pass |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
197 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
198 class PyMockFileIO(MockFileIO, pyio.BytesIO): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
199 pass |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
200 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
201 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
202 class MockNonBlockWriterIO: |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
203 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
204 def __init__(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
205 self._write_stack = [] |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
206 self._blocker_char = None |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
207 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
208 def pop_written(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
209 s = b"".join(self._write_stack) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
210 self._write_stack[:] = [] |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
211 return s |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
212 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
213 def block_on(self, char): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
214 """Block when a given char is encountered.""" |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
215 self._blocker_char = char |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
216 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
217 def readable(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
218 return True |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
219 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
220 def seekable(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
221 return True |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
222 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
223 def writable(self): |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
224 return True |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
225 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
226 def write(self, b): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
227 b = bytes(b) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
228 n = -1 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
229 if self._blocker_char: |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
230 try: |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
231 n = b.index(self._blocker_char) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
232 except ValueError: |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
233 pass |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
234 else: |
|
73667
e84e17643eeb
Issue #13322: Fix BufferedWriter.write() to ensure that BlockingIOError is
Antoine Pitrou <solipsis@pitrou.net>
parents:
72754
diff
changeset
|
235 if n > 0: |
|
e84e17643eeb
Issue #13322: Fix BufferedWriter.write() to ensure that BlockingIOError is
Antoine Pitrou <solipsis@pitrou.net>
parents:
72754
diff
changeset
|
236 # write data up to the first blocker |
|
e84e17643eeb
Issue #13322: Fix BufferedWriter.write() to ensure that BlockingIOError is
Antoine Pitrou <solipsis@pitrou.net>
parents:
72754
diff
changeset
|
237 self._write_stack.append(b[:n]) |
|
e84e17643eeb
Issue #13322: Fix BufferedWriter.write() to ensure that BlockingIOError is
Antoine Pitrou <solipsis@pitrou.net>
parents:
72754
diff
changeset
|
238 return n |
|
e84e17643eeb
Issue #13322: Fix BufferedWriter.write() to ensure that BlockingIOError is
Antoine Pitrou <solipsis@pitrou.net>
parents:
72754
diff
changeset
|
239 else: |
|
e84e17643eeb
Issue #13322: Fix BufferedWriter.write() to ensure that BlockingIOError is
Antoine Pitrou <solipsis@pitrou.net>
parents:
72754
diff
changeset
|
240 # cancel blocker and indicate would block |
|
e84e17643eeb
Issue #13322: Fix BufferedWriter.write() to ensure that BlockingIOError is
Antoine Pitrou <solipsis@pitrou.net>
parents:
72754
diff
changeset
|
241 self._blocker_char = None |
|
e84e17643eeb
Issue #13322: Fix BufferedWriter.write() to ensure that BlockingIOError is
Antoine Pitrou <solipsis@pitrou.net>
parents:
72754
diff
changeset
|
242 return None |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
243 self._write_stack.append(b) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
244 return len(b) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
245 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
246 class CMockNonBlockWriterIO(MockNonBlockWriterIO, io.RawIOBase): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
247 BlockingIOError = io.BlockingIOError |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
248 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
249 class PyMockNonBlockWriterIO(MockNonBlockWriterIO, pyio.RawIOBase): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
250 BlockingIOError = pyio.BlockingIOError |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
251 |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
252 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
253 class IOTest(unittest.TestCase): |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
254 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
255 def setUp(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
256 support.unlink(support.TESTFN) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
257 |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
258 def tearDown(self): |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
259 support.unlink(support.TESTFN) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
260 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
261 def write_ops(self, f): |
|
58544
0bd616dfc977
Issue #6939: Fix file I/O objects in the `io` module to keep the original
Antoine Pitrou <solipsis@pitrou.net>
parents:
50958
diff
changeset
|
262 self.assertEqual(f.write(b"blah."), 5) |
|
0bd616dfc977
Issue #6939: Fix file I/O objects in the `io` module to keep the original
Antoine Pitrou <solipsis@pitrou.net>
parents:
50958
diff
changeset
|
263 f.truncate(0) |
|
0bd616dfc977
Issue #6939: Fix file I/O objects in the `io` module to keep the original
Antoine Pitrou <solipsis@pitrou.net>
parents:
50958
diff
changeset
|
264 self.assertEqual(f.tell(), 5) |
|
0bd616dfc977
Issue #6939: Fix file I/O objects in the `io` module to keep the original
Antoine Pitrou <solipsis@pitrou.net>
parents:
50958
diff
changeset
|
265 f.seek(0) |
|
0bd616dfc977
Issue #6939: Fix file I/O objects in the `io` module to keep the original
Antoine Pitrou <solipsis@pitrou.net>
parents:
50958
diff
changeset
|
266 |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
267 self.assertEqual(f.write(b"blah."), 5) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
268 self.assertEqual(f.seek(0), 0) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
269 self.assertEqual(f.write(b"Hello."), 6) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
270 self.assertEqual(f.tell(), 6) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
271 self.assertEqual(f.seek(-1, 1), 5) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
272 self.assertEqual(f.tell(), 5) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
273 self.assertEqual(f.write(bytearray(b" world\n\n\n")), 9) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
274 self.assertEqual(f.seek(0), 0) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
275 self.assertEqual(f.write(b"h"), 1) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
276 self.assertEqual(f.seek(-1, 2), 13) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
277 self.assertEqual(f.tell(), 13) |
|
58544
0bd616dfc977
Issue #6939: Fix file I/O objects in the `io` module to keep the original
Antoine Pitrou <solipsis@pitrou.net>
parents:
50958
diff
changeset
|
278 |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
279 self.assertEqual(f.truncate(12), 12) |
|
58544
0bd616dfc977
Issue #6939: Fix file I/O objects in the `io` module to keep the original
Antoine Pitrou <solipsis@pitrou.net>
parents:
50958
diff
changeset
|
280 self.assertEqual(f.tell(), 13) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
281 self.assertRaises(TypeError, f.seek, 0.0) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
282 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
283 def read_ops(self, f, buffered=False): |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
284 data = f.read(5) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
285 self.assertEqual(data, b"hello") |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
286 data = bytearray(data) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
287 self.assertEqual(f.readinto(data), 5) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
288 self.assertEqual(data, b" worl") |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
289 self.assertEqual(f.readinto(data), 2) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
290 self.assertEqual(len(data), 5) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
291 self.assertEqual(data[:2], b"d\n") |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
292 self.assertEqual(f.seek(0), 0) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
293 self.assertEqual(f.read(20), b"hello world\n") |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
294 self.assertEqual(f.read(1), b"") |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
295 self.assertEqual(f.readinto(bytearray(b"x")), 0) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
296 self.assertEqual(f.seek(-6, 2), 6) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
297 self.assertEqual(f.read(5), b"world") |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
298 self.assertEqual(f.read(0), b"") |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
299 self.assertEqual(f.readinto(bytearray()), 0) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
300 self.assertEqual(f.seek(-6, 1), 5) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
301 self.assertEqual(f.read(5), b" worl") |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
302 self.assertEqual(f.tell(), 10) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
303 self.assertRaises(TypeError, f.seek, 0.0) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
304 if buffered: |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
305 f.seek(0) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
306 self.assertEqual(f.read(), b"hello world\n") |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
307 f.seek(6) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
308 self.assertEqual(f.read(), b"world\n") |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
309 self.assertEqual(f.read(), b"") |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
310 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
311 LARGE = 2**31 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
312 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
313 def large_file_ops(self, f): |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
314 assert f.readable() |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
315 assert f.writable() |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
316 self.assertEqual(f.seek(self.LARGE), self.LARGE) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
317 self.assertEqual(f.tell(), self.LARGE) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
318 self.assertEqual(f.write(b"xxx"), 3) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
319 self.assertEqual(f.tell(), self.LARGE + 3) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
320 self.assertEqual(f.seek(-1, 1), self.LARGE + 2) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
321 self.assertEqual(f.truncate(), self.LARGE + 2) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
322 self.assertEqual(f.tell(), self.LARGE + 2) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
323 self.assertEqual(f.seek(0, 2), self.LARGE + 2) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
324 self.assertEqual(f.truncate(self.LARGE + 1), self.LARGE + 1) |
|
58544
0bd616dfc977
Issue #6939: Fix file I/O objects in the `io` module to keep the original
Antoine Pitrou <solipsis@pitrou.net>
parents:
50958
diff
changeset
|
325 self.assertEqual(f.tell(), self.LARGE + 2) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
326 self.assertEqual(f.seek(0, 2), self.LARGE + 1) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
327 self.assertEqual(f.seek(-1, 2), self.LARGE) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
328 self.assertEqual(f.read(2), b"x") |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
329 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
330 def test_invalid_operations(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
331 # Try writing on a file opened in read mode and vice-versa. |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
332 for mode in ("w", "wb"): |
|
54781
a5f31b30c7c3
Issue #6215: Fixed to use self.open() instead of open() or io.open().
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents:
54717
diff
changeset
|
333 with self.open(support.TESTFN, mode) as fp: |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
334 self.assertRaises(IOError, fp.read) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
335 self.assertRaises(IOError, fp.readline) |
|
54781
a5f31b30c7c3
Issue #6215: Fixed to use self.open() instead of open() or io.open().
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents:
54717
diff
changeset
|
336 with self.open(support.TESTFN, "rb") as fp: |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
337 self.assertRaises(IOError, fp.write, b"blah") |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
338 self.assertRaises(IOError, fp.writelines, [b"blah\n"]) |
|
54781
a5f31b30c7c3
Issue #6215: Fixed to use self.open() instead of open() or io.open().
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents:
54717
diff
changeset
|
339 with self.open(support.TESTFN, "r") as fp: |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
340 self.assertRaises(IOError, fp.write, "blah") |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
341 self.assertRaises(IOError, fp.writelines, ["blah\n"]) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
342 |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
343 def test_raw_file_io(self): |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
344 with self.open(support.TESTFN, "wb", buffering=0) as f: |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
345 self.assertEqual(f.readable(), False) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
346 self.assertEqual(f.writable(), True) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
347 self.assertEqual(f.seekable(), True) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
348 self.write_ops(f) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
349 with self.open(support.TESTFN, "rb", buffering=0) as f: |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
350 self.assertEqual(f.readable(), True) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
351 self.assertEqual(f.writable(), False) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
352 self.assertEqual(f.seekable(), True) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
353 self.read_ops(f) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
354 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
355 def test_buffered_file_io(self): |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
356 with self.open(support.TESTFN, "wb") as f: |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
357 self.assertEqual(f.readable(), False) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
358 self.assertEqual(f.writable(), True) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
359 self.assertEqual(f.seekable(), True) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
360 self.write_ops(f) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
361 with self.open(support.TESTFN, "rb") as f: |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
362 self.assertEqual(f.readable(), True) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
363 self.assertEqual(f.writable(), False) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
364 self.assertEqual(f.seekable(), True) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
365 self.read_ops(f, True) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
366 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
367 def test_readline(self): |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
368 with self.open(support.TESTFN, "wb") as f: |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
369 f.write(b"abc\ndef\nxyzzy\nfoo\x00bar\nanother line") |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
370 with self.open(support.TESTFN, "rb") as f: |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
371 self.assertEqual(f.readline(), b"abc\n") |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
372 self.assertEqual(f.readline(10), b"def\n") |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
373 self.assertEqual(f.readline(2), b"xy") |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
374 self.assertEqual(f.readline(4), b"zzy\n") |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
375 self.assertEqual(f.readline(), b"foo\x00bar\n") |
|
57703
54f84558ad2b
accept None as the same as having passed no argument in file types #7349
Benjamin Peterson <benjamin@python.org>
parents:
55756
diff
changeset
|
376 self.assertEqual(f.readline(None), b"another line") |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
377 self.assertRaises(TypeError, f.readline, 5.3) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
378 with self.open(support.TESTFN, "r") as f: |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
379 self.assertRaises(TypeError, f.readline, 5.3) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
380 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
381 def test_raw_bytes_io(self): |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
382 f = self.BytesIO() |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
383 self.write_ops(f) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
384 data = f.getvalue() |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
385 self.assertEqual(data, b"hello world\n") |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
386 f = self.BytesIO(data) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
387 self.read_ops(f, True) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
388 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
389 def test_large_file_ops(self): |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
390 # On Windows and Mac OSX this test comsumes large resources; It takes |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
391 # a long time to build the >2GB file and takes >2GB of disk space |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
392 # therefore the resource must be enabled to run this test. |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
393 if sys.platform[:3] == 'win' or sys.platform == 'darwin': |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
394 if not support.is_resource_enabled("largefile"): |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
395 print("\nTesting large file ops skipped on %s." % sys.platform, |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
396 file=sys.stderr) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
397 print("It requires %d bytes and a long time." % self.LARGE, |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
398 file=sys.stderr) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
399 print("Use 'regrtest.py -u largefile test_io' to run it.", |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
400 file=sys.stderr) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
401 return |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
402 with self.open(support.TESTFN, "w+b", 0) as f: |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
403 self.large_file_ops(f) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
404 with self.open(support.TESTFN, "w+b") as f: |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
405 self.large_file_ops(f) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
406 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
407 def test_with_open(self): |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
408 for bufsize in (0, 1, 100): |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
409 f = None |
|
54781
a5f31b30c7c3
Issue #6215: Fixed to use self.open() instead of open() or io.open().
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents:
54717
diff
changeset
|
410 with self.open(support.TESTFN, "wb", bufsize) as f: |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
411 f.write(b"xxx") |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
412 self.assertEqual(f.closed, True) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
413 f = None |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
414 try: |
|
54781
a5f31b30c7c3
Issue #6215: Fixed to use self.open() instead of open() or io.open().
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents:
54717
diff
changeset
|
415 with self.open(support.TESTFN, "wb", bufsize) as f: |
|
63556
dba99828d91c
Merged revisions 77942,79023 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
63262
diff
changeset
|
416 1 // 0 |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
417 except ZeroDivisionError: |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
418 self.assertEqual(f.closed, True) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
419 else: |
|
63556
dba99828d91c
Merged revisions 77942,79023 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
63262
diff
changeset
|
420 self.fail("1 // 0 didn't raise an exception") |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
421 |
|
50958
762f9f189e2e
Merged revisions 68835 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50305
diff
changeset
|
422 # issue 5008 |
|
762f9f189e2e
Merged revisions 68835 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50305
diff
changeset
|
423 def test_append_mode_tell(self): |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
424 with self.open(support.TESTFN, "wb") as f: |
|
50958
762f9f189e2e
Merged revisions 68835 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50305
diff
changeset
|
425 f.write(b"xxx") |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
426 with self.open(support.TESTFN, "ab", buffering=0) as f: |
|
50958
762f9f189e2e
Merged revisions 68835 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50305
diff
changeset
|
427 self.assertEqual(f.tell(), 3) |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
428 with self.open(support.TESTFN, "ab") as f: |
|
50958
762f9f189e2e
Merged revisions 68835 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50305
diff
changeset
|
429 self.assertEqual(f.tell(), 3) |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
430 with self.open(support.TESTFN, "a") as f: |
|
55002
6768b2350c57
convert usage of fail* to assert*
Benjamin Peterson <benjamin@python.org>
parents:
54781
diff
changeset
|
431 self.assertTrue(f.tell() > 0) |
|
50958
762f9f189e2e
Merged revisions 68835 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50305
diff
changeset
|
432 |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
433 def test_destructor(self): |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
434 record = [] |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
435 class MyFileIO(self.FileIO): |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
436 def __del__(self): |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
437 record.append(1) |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
438 try: |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
439 f = super(MyFileIO, self).__del__ |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
440 except AttributeError: |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
441 pass |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
442 else: |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
443 f() |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
444 def close(self): |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
445 record.append(2) |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
446 super(MyFileIO, self).close() |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
447 def flush(self): |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
448 record.append(3) |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
449 super(MyFileIO, self).flush() |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
450 f = MyFileIO(support.TESTFN, "wb") |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
451 f.write(b"xxx") |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
452 del f |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
453 support.gc_collect() |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
454 self.assertEqual(record, [1, 2, 3]) |
|
54781
a5f31b30c7c3
Issue #6215: Fixed to use self.open() instead of open() or io.open().
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents:
54717
diff
changeset
|
455 with self.open(support.TESTFN, "rb") as f: |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
456 self.assertEqual(f.read(), b"xxx") |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
457 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
458 def _check_base_destructor(self, base): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
459 record = [] |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
460 class MyIO(base): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
461 def __init__(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
462 # This exercises the availability of attributes on object |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
463 # destruction. |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
464 # (in the C version, close() is called by the tp_dealloc |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
465 # function, not by __del__) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
466 self.on_del = 1 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
467 self.on_close = 2 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
468 self.on_flush = 3 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
469 def __del__(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
470 record.append(self.on_del) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
471 try: |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
472 f = super(MyIO, self).__del__ |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
473 except AttributeError: |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
474 pass |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
475 else: |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
476 f() |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
477 def close(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
478 record.append(self.on_close) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
479 super(MyIO, self).close() |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
480 def flush(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
481 record.append(self.on_flush) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
482 super(MyIO, self).flush() |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
483 f = MyIO() |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
484 del f |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
485 support.gc_collect() |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
486 self.assertEqual(record, [1, 2, 3]) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
487 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
488 def test_IOBase_destructor(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
489 self._check_base_destructor(self.IOBase) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
490 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
491 def test_RawIOBase_destructor(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
492 self._check_base_destructor(self.RawIOBase) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
493 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
494 def test_BufferedIOBase_destructor(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
495 self._check_base_destructor(self.BufferedIOBase) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
496 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
497 def test_TextIOBase_destructor(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
498 self._check_base_destructor(self.TextIOBase) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
499 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
500 def test_close_flushes(self): |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
501 with self.open(support.TESTFN, "wb") as f: |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
502 f.write(b"xxx") |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
503 with self.open(support.TESTFN, "rb") as f: |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
504 self.assertEqual(f.read(), b"xxx") |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
505 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
506 def test_array_writes(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
507 a = array.array(b'i', range(10)) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
508 n = len(a.tostring()) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
509 with self.open(support.TESTFN, "wb", 0) as f: |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
510 self.assertEqual(f.write(a), n) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
511 with self.open(support.TESTFN, "wb") as f: |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
512 self.assertEqual(f.write(a), n) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
513 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
514 def test_closefd(self): |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
515 self.assertRaises(ValueError, self.open, support.TESTFN, 'w', |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
516 closefd=False) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
517 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
518 def test_read_closed(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
519 with self.open(support.TESTFN, "w") as f: |
|
50002
5ef8b5a74efa
Merged revisions 67245,67277,67289,67295,67301-67303,67307,67330,67332,67336,67355,67359,67362,67364,67367-67368,67370 via svnmerge from
Georg Brandl <georg@python.org>
parents:
49677
diff
changeset
|
520 f.write("egg\n") |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
521 with self.open(support.TESTFN, "r") as f: |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
522 file = self.open(f.fileno(), "r", closefd=False) |
|
50002
5ef8b5a74efa
Merged revisions 67245,67277,67289,67295,67301-67303,67307,67330,67332,67336,67355,67359,67362,67364,67367-67368,67370 via svnmerge from
Georg Brandl <georg@python.org>
parents:
49677
diff
changeset
|
523 self.assertEqual(file.read(), "egg\n") |
|
5ef8b5a74efa
Merged revisions 67245,67277,67289,67295,67301-67303,67307,67330,67332,67336,67355,67359,67362,67364,67367-67368,67370 via svnmerge from
Georg Brandl <georg@python.org>
parents:
49677
diff
changeset
|
524 file.seek(0) |
|
5ef8b5a74efa
Merged revisions 67245,67277,67289,67295,67301-67303,67307,67330,67332,67336,67355,67359,67362,67364,67367-67368,67370 via svnmerge from
Georg Brandl <georg@python.org>
parents:
49677
diff
changeset
|
525 file.close() |
|
5ef8b5a74efa
Merged revisions 67245,67277,67289,67295,67301-67303,67307,67330,67332,67336,67355,67359,67362,67364,67367-67368,67370 via svnmerge from
Georg Brandl <georg@python.org>
parents:
49677
diff
changeset
|
526 self.assertRaises(ValueError, file.read) |
|
5ef8b5a74efa
Merged revisions 67245,67277,67289,67295,67301-67303,67307,67330,67332,67336,67355,67359,67362,67364,67367-67368,67370 via svnmerge from
Georg Brandl <georg@python.org>
parents:
49677
diff
changeset
|
527 |
|
5ef8b5a74efa
Merged revisions 67245,67277,67289,67295,67301-67303,67307,67330,67332,67336,67355,67359,67362,67364,67367-67368,67370 via svnmerge from
Georg Brandl <georg@python.org>
parents:
49677
diff
changeset
|
528 def test_no_closefd_with_filename(self): |
|
5ef8b5a74efa
Merged revisions 67245,67277,67289,67295,67301-67303,67307,67330,67332,67336,67355,67359,67362,67364,67367-67368,67370 via svnmerge from
Georg Brandl <georg@python.org>
parents:
49677
diff
changeset
|
529 # can't use closefd in combination with a file name |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
530 self.assertRaises(ValueError, self.open, support.TESTFN, "r", closefd=False) |
|
50002
5ef8b5a74efa
Merged revisions 67245,67277,67289,67295,67301-67303,67307,67330,67332,67336,67355,67359,67362,67364,67367-67368,67370 via svnmerge from
Georg Brandl <georg@python.org>
parents:
49677
diff
changeset
|
531 |
|
5ef8b5a74efa
Merged revisions 67245,67277,67289,67295,67301-67303,67307,67330,67332,67336,67355,67359,67362,67364,67367-67368,67370 via svnmerge from
Georg Brandl <georg@python.org>
parents:
49677
diff
changeset
|
532 def test_closefd_attr(self): |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
533 with self.open(support.TESTFN, "wb") as f: |
|
50002
5ef8b5a74efa
Merged revisions 67245,67277,67289,67295,67301-67303,67307,67330,67332,67336,67355,67359,67362,67364,67367-67368,67370 via svnmerge from
Georg Brandl <georg@python.org>
parents:
49677
diff
changeset
|
534 f.write(b"egg\n") |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
535 with self.open(support.TESTFN, "r") as f: |
|
50002
5ef8b5a74efa
Merged revisions 67245,67277,67289,67295,67301-67303,67307,67330,67332,67336,67355,67359,67362,67364,67367-67368,67370 via svnmerge from
Georg Brandl <georg@python.org>
parents:
49677
diff
changeset
|
536 self.assertEqual(f.buffer.raw.closefd, True) |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
537 file = self.open(f.fileno(), "r", closefd=False) |
|
50002
5ef8b5a74efa
Merged revisions 67245,67277,67289,67295,67301-67303,67307,67330,67332,67336,67355,67359,67362,67364,67367-67368,67370 via svnmerge from
Georg Brandl <georg@python.org>
parents:
49677
diff
changeset
|
538 self.assertEqual(file.buffer.raw.closefd, False) |
|
5ef8b5a74efa
Merged revisions 67245,67277,67289,67295,67301-67303,67307,67330,67332,67336,67355,67359,67362,67364,67367-67368,67370 via svnmerge from
Georg Brandl <georg@python.org>
parents:
49677
diff
changeset
|
539 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
540 def test_garbage_collection(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
541 # FileIO objects are collected, and collecting them flushes |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
542 # all data to disk. |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
543 f = self.FileIO(support.TESTFN, "wb") |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
544 f.write(b"abcxxx") |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
545 f.f = f |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
546 wr = weakref.ref(f) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
547 del f |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
548 support.gc_collect() |
|
55002
6768b2350c57
convert usage of fail* to assert*
Benjamin Peterson <benjamin@python.org>
parents:
54781
diff
changeset
|
549 self.assertTrue(wr() is None, wr) |
|
54781
a5f31b30c7c3
Issue #6215: Fixed to use self.open() instead of open() or io.open().
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents:
54717
diff
changeset
|
550 with self.open(support.TESTFN, "rb") as f: |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
551 self.assertEqual(f.read(), b"abcxxx") |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
552 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
553 def test_unbounded_file(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
554 # Issue #1174606: reading from an unbounded stream such as /dev/zero. |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
555 zero = "/dev/zero" |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
556 if not os.path.exists(zero): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
557 self.skipTest("{0} does not exist".format(zero)) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
558 if sys.maxsize > 0x7FFFFFFF: |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
559 self.skipTest("test can only run in a 32-bit address space") |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
560 if support.real_max_memuse < support._2G: |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
561 self.skipTest("test requires at least 2GB of memory") |
|
54781
a5f31b30c7c3
Issue #6215: Fixed to use self.open() instead of open() or io.open().
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents:
54717
diff
changeset
|
562 with self.open(zero, "rb", buffering=0) as f: |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
563 self.assertRaises(OverflowError, f.read) |
|
54781
a5f31b30c7c3
Issue #6215: Fixed to use self.open() instead of open() or io.open().
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents:
54717
diff
changeset
|
564 with self.open(zero, "rb") as f: |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
565 self.assertRaises(OverflowError, f.read) |
|
54781
a5f31b30c7c3
Issue #6215: Fixed to use self.open() instead of open() or io.open().
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents:
54717
diff
changeset
|
566 with self.open(zero, "r") as f: |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
567 self.assertRaises(OverflowError, f.read) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
568 |
|
61181
fe3bf399a19c
Merged revisions 80720 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
58544
diff
changeset
|
569 def test_flush_error_on_close(self): |
|
61180
9b438bb06d4d
Issue #7865: The close() method of :mod:`io` objects should not swallow
Antoine Pitrou <solipsis@pitrou.net>
parents:
61046
diff
changeset
|
570 f = self.open(support.TESTFN, "wb", buffering=0) |
|
61181
fe3bf399a19c
Merged revisions 80720 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
58544
diff
changeset
|
571 def bad_flush(): |
|
fe3bf399a19c
Merged revisions 80720 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
58544
diff
changeset
|
572 raise IOError() |
|
fe3bf399a19c
Merged revisions 80720 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
58544
diff
changeset
|
573 f.flush = bad_flush |
|
fe3bf399a19c
Merged revisions 80720 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
58544
diff
changeset
|
574 self.assertRaises(IOError, f.close) # exception not swallowed |
|
fe3bf399a19c
Merged revisions 80720 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
58544
diff
changeset
|
575 |
|
fe3bf399a19c
Merged revisions 80720 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
58544
diff
changeset
|
576 def test_multi_close(self): |
|
61180
9b438bb06d4d
Issue #7865: The close() method of :mod:`io` objects should not swallow
Antoine Pitrou <solipsis@pitrou.net>
parents:
61046
diff
changeset
|
577 f = self.open(support.TESTFN, "wb", buffering=0) |
|
61181
fe3bf399a19c
Merged revisions 80720 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
58544
diff
changeset
|
578 f.close() |
|
fe3bf399a19c
Merged revisions 80720 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
58544
diff
changeset
|
579 f.close() |
|
fe3bf399a19c
Merged revisions 80720 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
58544
diff
changeset
|
580 f.close() |
|
fe3bf399a19c
Merged revisions 80720 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
58544
diff
changeset
|
581 self.assertRaises(ValueError, f.flush) |
|
fe3bf399a19c
Merged revisions 80720 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
58544
diff
changeset
|
582 |
|
64750
2b9dea2a2fff
Merged revisions 84814 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64706
diff
changeset
|
583 def test_RawIOBase_read(self): |
|
2b9dea2a2fff
Merged revisions 84814 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64706
diff
changeset
|
584 # Exercise the default RawIOBase.read() implementation (which calls |
|
2b9dea2a2fff
Merged revisions 84814 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64706
diff
changeset
|
585 # readinto() internally). |
|
2b9dea2a2fff
Merged revisions 84814 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64706
diff
changeset
|
586 rawio = self.MockRawIOWithoutRead((b"abc", b"d", None, b"efg", None)) |
|
2b9dea2a2fff
Merged revisions 84814 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64706
diff
changeset
|
587 self.assertEqual(rawio.read(2), b"ab") |
|
2b9dea2a2fff
Merged revisions 84814 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64706
diff
changeset
|
588 self.assertEqual(rawio.read(2), b"c") |
|
2b9dea2a2fff
Merged revisions 84814 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64706
diff
changeset
|
589 self.assertEqual(rawio.read(2), b"d") |
|
2b9dea2a2fff
Merged revisions 84814 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64706
diff
changeset
|
590 self.assertEqual(rawio.read(2), None) |
|
2b9dea2a2fff
Merged revisions 84814 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64706
diff
changeset
|
591 self.assertEqual(rawio.read(2), b"ef") |
|
2b9dea2a2fff
Merged revisions 84814 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64706
diff
changeset
|
592 self.assertEqual(rawio.read(2), b"g") |
|
2b9dea2a2fff
Merged revisions 84814 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64706
diff
changeset
|
593 self.assertEqual(rawio.read(2), None) |
|
2b9dea2a2fff
Merged revisions 84814 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64706
diff
changeset
|
594 self.assertEqual(rawio.read(2), b"") |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
595 |
|
77134
83d500908ffc
#4841: Fix FileIO constructor to honor closefd when called repeatedly
Hynek Schlawack <hs@ox.cx>
parents:
73667
diff
changeset
|
596 def test_fileio_closefd(self): |
|
83d500908ffc
#4841: Fix FileIO constructor to honor closefd when called repeatedly
Hynek Schlawack <hs@ox.cx>
parents:
73667
diff
changeset
|
597 # Issue #4841 |
|
83d500908ffc
#4841: Fix FileIO constructor to honor closefd when called repeatedly
Hynek Schlawack <hs@ox.cx>
parents:
73667
diff
changeset
|
598 with self.open(__file__, 'rb') as f1, \ |
|
83d500908ffc
#4841: Fix FileIO constructor to honor closefd when called repeatedly
Hynek Schlawack <hs@ox.cx>
parents:
73667
diff
changeset
|
599 self.open(__file__, 'rb') as f2: |
|
83d500908ffc
#4841: Fix FileIO constructor to honor closefd when called repeatedly
Hynek Schlawack <hs@ox.cx>
parents:
73667
diff
changeset
|
600 fileio = self.FileIO(f1.fileno(), closefd=False) |
|
83d500908ffc
#4841: Fix FileIO constructor to honor closefd when called repeatedly
Hynek Schlawack <hs@ox.cx>
parents:
73667
diff
changeset
|
601 # .__init__() must not close f1 |
|
83d500908ffc
#4841: Fix FileIO constructor to honor closefd when called repeatedly
Hynek Schlawack <hs@ox.cx>
parents:
73667
diff
changeset
|
602 fileio.__init__(f2.fileno(), closefd=False) |
|
83d500908ffc
#4841: Fix FileIO constructor to honor closefd when called repeatedly
Hynek Schlawack <hs@ox.cx>
parents:
73667
diff
changeset
|
603 f1.readline() |
|
83d500908ffc
#4841: Fix FileIO constructor to honor closefd when called repeatedly
Hynek Schlawack <hs@ox.cx>
parents:
73667
diff
changeset
|
604 # .close() must not close f2 |
|
83d500908ffc
#4841: Fix FileIO constructor to honor closefd when called repeatedly
Hynek Schlawack <hs@ox.cx>
parents:
73667
diff
changeset
|
605 fileio.close() |
|
83d500908ffc
#4841: Fix FileIO constructor to honor closefd when called repeatedly
Hynek Schlawack <hs@ox.cx>
parents:
73667
diff
changeset
|
606 f2.readline() |
|
83d500908ffc
#4841: Fix FileIO constructor to honor closefd when called repeatedly
Hynek Schlawack <hs@ox.cx>
parents:
73667
diff
changeset
|
607 |
|
83d500908ffc
#4841: Fix FileIO constructor to honor closefd when called repeatedly
Hynek Schlawack <hs@ox.cx>
parents:
73667
diff
changeset
|
608 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
609 class CIOTest(IOTest): |
|
71299
9618303852da
Issue #12149: Update the method cache after a type's dictionnary gets
Antoine Pitrou <solipsis@pitrou.net>
parents:
71227
diff
changeset
|
610 |
|
9618303852da
Issue #12149: Update the method cache after a type's dictionnary gets
Antoine Pitrou <solipsis@pitrou.net>
parents:
71227
diff
changeset
|
611 def test_IOBase_finalize(self): |
|
9618303852da
Issue #12149: Update the method cache after a type's dictionnary gets
Antoine Pitrou <solipsis@pitrou.net>
parents:
71227
diff
changeset
|
612 # Issue #12149: segmentation fault on _PyIOBase_finalize when both a |
|
9618303852da
Issue #12149: Update the method cache after a type's dictionnary gets
Antoine Pitrou <solipsis@pitrou.net>
parents:
71227
diff
changeset
|
613 # class which inherits IOBase and an object of this class are caught |
|
9618303852da
Issue #12149: Update the method cache after a type's dictionnary gets
Antoine Pitrou <solipsis@pitrou.net>
parents:
71227
diff
changeset
|
614 # in a reference cycle and close() is already in the method cache. |
|
9618303852da
Issue #12149: Update the method cache after a type's dictionnary gets
Antoine Pitrou <solipsis@pitrou.net>
parents:
71227
diff
changeset
|
615 class MyIO(self.IOBase): |
|
9618303852da
Issue #12149: Update the method cache after a type's dictionnary gets
Antoine Pitrou <solipsis@pitrou.net>
parents:
71227
diff
changeset
|
616 def close(self): |
|
9618303852da
Issue #12149: Update the method cache after a type's dictionnary gets
Antoine Pitrou <solipsis@pitrou.net>
parents:
71227
diff
changeset
|
617 pass |
|
9618303852da
Issue #12149: Update the method cache after a type's dictionnary gets
Antoine Pitrou <solipsis@pitrou.net>
parents:
71227
diff
changeset
|
618 |
|
9618303852da
Issue #12149: Update the method cache after a type's dictionnary gets
Antoine Pitrou <solipsis@pitrou.net>
parents:
71227
diff
changeset
|
619 # create an instance to populate the method cache |
|
9618303852da
Issue #12149: Update the method cache after a type's dictionnary gets
Antoine Pitrou <solipsis@pitrou.net>
parents:
71227
diff
changeset
|
620 MyIO() |
|
9618303852da
Issue #12149: Update the method cache after a type's dictionnary gets
Antoine Pitrou <solipsis@pitrou.net>
parents:
71227
diff
changeset
|
621 obj = MyIO() |
|
9618303852da
Issue #12149: Update the method cache after a type's dictionnary gets
Antoine Pitrou <solipsis@pitrou.net>
parents:
71227
diff
changeset
|
622 obj.obj = obj |
|
9618303852da
Issue #12149: Update the method cache after a type's dictionnary gets
Antoine Pitrou <solipsis@pitrou.net>
parents:
71227
diff
changeset
|
623 wr = weakref.ref(obj) |
|
9618303852da
Issue #12149: Update the method cache after a type's dictionnary gets
Antoine Pitrou <solipsis@pitrou.net>
parents:
71227
diff
changeset
|
624 del MyIO |
|
9618303852da
Issue #12149: Update the method cache after a type's dictionnary gets
Antoine Pitrou <solipsis@pitrou.net>
parents:
71227
diff
changeset
|
625 del obj |
|
9618303852da
Issue #12149: Update the method cache after a type's dictionnary gets
Antoine Pitrou <solipsis@pitrou.net>
parents:
71227
diff
changeset
|
626 support.gc_collect() |
|
9618303852da
Issue #12149: Update the method cache after a type's dictionnary gets
Antoine Pitrou <solipsis@pitrou.net>
parents:
71227
diff
changeset
|
627 self.assertTrue(wr() is None, wr) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
628 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
629 class PyIOTest(IOTest): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
630 test_array_writes = unittest.skip( |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
631 "len(array.array) returns number of elements rather than bytelength" |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
632 )(IOTest.test_array_writes) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
633 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
634 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
635 class CommonBufferedTests: |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
636 # Tests common to BufferedReader, BufferedWriter and BufferedRandom |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
637 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
638 def test_detach(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
639 raw = self.MockRawIO() |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
640 buf = self.tp(raw) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
641 self.assertIs(buf.detach(), raw) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
642 self.assertRaises(ValueError, buf.detach) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
643 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
644 def test_fileno(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
645 rawio = self.MockRawIO() |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
646 bufio = self.tp(rawio) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
647 |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
648 self.assertEqual(42, bufio.fileno()) |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
649 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
650 def test_no_fileno(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
651 # XXX will we always have fileno() function? If so, kill |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
652 # this test. Else, write it. |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
653 pass |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
654 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
655 def test_invalid_args(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
656 rawio = self.MockRawIO() |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
657 bufio = self.tp(rawio) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
658 # Invalid whence |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
659 self.assertRaises(ValueError, bufio.seek, 0, -1) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
660 self.assertRaises(ValueError, bufio.seek, 0, 3) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
661 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
662 def test_override_destructor(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
663 tp = self.tp |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
664 record = [] |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
665 class MyBufferedIO(tp): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
666 def __del__(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
667 record.append(1) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
668 try: |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
669 f = super(MyBufferedIO, self).__del__ |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
670 except AttributeError: |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
671 pass |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
672 else: |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
673 f() |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
674 def close(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
675 record.append(2) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
676 super(MyBufferedIO, self).close() |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
677 def flush(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
678 record.append(3) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
679 super(MyBufferedIO, self).flush() |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
680 rawio = self.MockRawIO() |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
681 bufio = MyBufferedIO(rawio) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
682 writable = bufio.writable() |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
683 del bufio |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
684 support.gc_collect() |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
685 if writable: |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
686 self.assertEqual(record, [1, 2, 3]) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
687 else: |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
688 self.assertEqual(record, [1, 2]) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
689 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
690 def test_context_manager(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
691 # Test usability as a context manager |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
692 rawio = self.MockRawIO() |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
693 bufio = self.tp(rawio) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
694 def _with(): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
695 with bufio: |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
696 pass |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
697 _with() |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
698 # bufio should now be closed, and using it a second time should raise |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
699 # a ValueError. |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
700 self.assertRaises(ValueError, _with) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
701 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
702 def test_error_through_destructor(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
703 # Test that the exception state is not modified by a destructor, |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
704 # even if close() fails. |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
705 rawio = self.CloseFailureIO() |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
706 def f(): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
707 self.tp(rawio).xyzzy |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
708 with support.captured_output("stderr") as s: |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
709 self.assertRaises(AttributeError, f) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
710 s = s.getvalue().strip() |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
711 if s: |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
712 # The destructor *may* have printed an unraisable error, check it |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
713 self.assertEqual(len(s.splitlines()), 1) |
|
55002
6768b2350c57
convert usage of fail* to assert*
Benjamin Peterson <benjamin@python.org>
parents:
54781
diff
changeset
|
714 self.assertTrue(s.startswith("Exception IOError: "), s) |
|
6768b2350c57
convert usage of fail* to assert*
Benjamin Peterson <benjamin@python.org>
parents:
54781
diff
changeset
|
715 self.assertTrue(s.endswith(" ignored"), s) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
716 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
717 def test_repr(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
718 raw = self.MockRawIO() |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
719 b = self.tp(raw) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
720 clsname = "%s.%s" % (self.tp.__module__, self.tp.__name__) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
721 self.assertEqual(repr(b), "<%s>" % clsname) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
722 raw.name = "dummy" |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
723 self.assertEqual(repr(b), "<%s name=u'dummy'>" % clsname) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
724 raw.name = b"dummy" |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
725 self.assertEqual(repr(b), "<%s name='dummy'>" % clsname) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
726 |
|
61180
9b438bb06d4d
Issue #7865: The close() method of :mod:`io` objects should not swallow
Antoine Pitrou <solipsis@pitrou.net>
parents:
61046
diff
changeset
|
727 def test_flush_error_on_close(self): |
|
9b438bb06d4d
Issue #7865: The close() method of :mod:`io` objects should not swallow
Antoine Pitrou <solipsis@pitrou.net>
parents:
61046
diff
changeset
|
728 raw = self.MockRawIO() |
|
9b438bb06d4d
Issue #7865: The close() method of :mod:`io` objects should not swallow
Antoine Pitrou <solipsis@pitrou.net>
parents:
61046
diff
changeset
|
729 def bad_flush(): |
|
9b438bb06d4d
Issue #7865: The close() method of :mod:`io` objects should not swallow
Antoine Pitrou <solipsis@pitrou.net>
parents:
61046
diff
changeset
|
730 raise IOError() |
|
9b438bb06d4d
Issue #7865: The close() method of :mod:`io` objects should not swallow
Antoine Pitrou <solipsis@pitrou.net>
parents:
61046
diff
changeset
|
731 raw.flush = bad_flush |
|
9b438bb06d4d
Issue #7865: The close() method of :mod:`io` objects should not swallow
Antoine Pitrou <solipsis@pitrou.net>
parents:
61046
diff
changeset
|
732 b = self.tp(raw) |
|
9b438bb06d4d
Issue #7865: The close() method of :mod:`io` objects should not swallow
Antoine Pitrou <solipsis@pitrou.net>
parents:
61046
diff
changeset
|
733 self.assertRaises(IOError, b.close) # exception not swallowed |
|
9b438bb06d4d
Issue #7865: The close() method of :mod:`io` objects should not swallow
Antoine Pitrou <solipsis@pitrou.net>
parents:
61046
diff
changeset
|
734 |
|
9b438bb06d4d
Issue #7865: The close() method of :mod:`io` objects should not swallow
Antoine Pitrou <solipsis@pitrou.net>
parents:
61046
diff
changeset
|
735 def test_multi_close(self): |
|
9b438bb06d4d
Issue #7865: The close() method of :mod:`io` objects should not swallow
Antoine Pitrou <solipsis@pitrou.net>
parents:
61046
diff
changeset
|
736 raw = self.MockRawIO() |
|
9b438bb06d4d
Issue #7865: The close() method of :mod:`io` objects should not swallow
Antoine Pitrou <solipsis@pitrou.net>
parents:
61046
diff
changeset
|
737 b = self.tp(raw) |
|
9b438bb06d4d
Issue #7865: The close() method of :mod:`io` objects should not swallow
Antoine Pitrou <solipsis@pitrou.net>
parents:
61046
diff
changeset
|
738 b.close() |
|
9b438bb06d4d
Issue #7865: The close() method of :mod:`io` objects should not swallow
Antoine Pitrou <solipsis@pitrou.net>
parents:
61046
diff
changeset
|
739 b.close() |
|
9b438bb06d4d
Issue #7865: The close() method of :mod:`io` objects should not swallow
Antoine Pitrou <solipsis@pitrou.net>
parents:
61046
diff
changeset
|
740 b.close() |
|
9b438bb06d4d
Issue #7865: The close() method of :mod:`io` objects should not swallow
Antoine Pitrou <solipsis@pitrou.net>
parents:
61046
diff
changeset
|
741 self.assertRaises(ValueError, b.flush) |
|
9b438bb06d4d
Issue #7865: The close() method of :mod:`io` objects should not swallow
Antoine Pitrou <solipsis@pitrou.net>
parents:
61046
diff
changeset
|
742 |
|
67075
595f258806ef
Merged revisions 87427 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66660
diff
changeset
|
743 def test_readonly_attributes(self): |
|
595f258806ef
Merged revisions 87427 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66660
diff
changeset
|
744 raw = self.MockRawIO() |
|
595f258806ef
Merged revisions 87427 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66660
diff
changeset
|
745 buf = self.tp(raw) |
|
595f258806ef
Merged revisions 87427 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66660
diff
changeset
|
746 x = self.MockRawIO() |
|
595f258806ef
Merged revisions 87427 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66660
diff
changeset
|
747 with self.assertRaises((AttributeError, TypeError)): |
|
595f258806ef
Merged revisions 87427 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66660
diff
changeset
|
748 buf.raw = x |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
749 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
750 |
|
78320
1102e86b8739
Issue #15487: Add a __sizeof__ implementation for buffered I/O objects.
Antoine Pitrou <solipsis@pitrou.net>
parents:
77134
diff
changeset
|
751 class SizeofTest: |
|
1102e86b8739
Issue #15487: Add a __sizeof__ implementation for buffered I/O objects.
Antoine Pitrou <solipsis@pitrou.net>
parents:
77134
diff
changeset
|
752 |
|
1102e86b8739
Issue #15487: Add a __sizeof__ implementation for buffered I/O objects.
Antoine Pitrou <solipsis@pitrou.net>
parents:
77134
diff
changeset
|
753 @support.cpython_only |
|
1102e86b8739
Issue #15487: Add a __sizeof__ implementation for buffered I/O objects.
Antoine Pitrou <solipsis@pitrou.net>
parents:
77134
diff
changeset
|
754 def test_sizeof(self): |
|
1102e86b8739
Issue #15487: Add a __sizeof__ implementation for buffered I/O objects.
Antoine Pitrou <solipsis@pitrou.net>
parents:
77134
diff
changeset
|
755 bufsize1 = 4096 |
|
1102e86b8739
Issue #15487: Add a __sizeof__ implementation for buffered I/O objects.
Antoine Pitrou <solipsis@pitrou.net>
parents:
77134
diff
changeset
|
756 bufsize2 = 8192 |
|
1102e86b8739
Issue #15487: Add a __sizeof__ implementation for buffered I/O objects.
Antoine Pitrou <solipsis@pitrou.net>
parents:
77134
diff
changeset
|
757 rawio = self.MockRawIO() |
|
1102e86b8739
Issue #15487: Add a __sizeof__ implementation for buffered I/O objects.
Antoine Pitrou <solipsis@pitrou.net>
parents:
77134
diff
changeset
|
758 bufio = self.tp(rawio, buffer_size=bufsize1) |
|
1102e86b8739
Issue #15487: Add a __sizeof__ implementation for buffered I/O objects.
Antoine Pitrou <solipsis@pitrou.net>
parents:
77134
diff
changeset
|
759 size = sys.getsizeof(bufio) - bufsize1 |
|
1102e86b8739
Issue #15487: Add a __sizeof__ implementation for buffered I/O objects.
Antoine Pitrou <solipsis@pitrou.net>
parents:
77134
diff
changeset
|
760 rawio = self.MockRawIO() |
|
1102e86b8739
Issue #15487: Add a __sizeof__ implementation for buffered I/O objects.
Antoine Pitrou <solipsis@pitrou.net>
parents:
77134
diff
changeset
|
761 bufio = self.tp(rawio, buffer_size=bufsize2) |
|
1102e86b8739
Issue #15487: Add a __sizeof__ implementation for buffered I/O objects.
Antoine Pitrou <solipsis@pitrou.net>
parents:
77134
diff
changeset
|
762 self.assertEqual(sys.getsizeof(bufio), size + bufsize2) |
|
1102e86b8739
Issue #15487: Add a __sizeof__ implementation for buffered I/O objects.
Antoine Pitrou <solipsis@pitrou.net>
parents:
77134
diff
changeset
|
763 |
|
1102e86b8739
Issue #15487: Add a __sizeof__ implementation for buffered I/O objects.
Antoine Pitrou <solipsis@pitrou.net>
parents:
77134
diff
changeset
|
764 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
765 class BufferedReaderTest(unittest.TestCase, CommonBufferedTests): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
766 read_mode = "rb" |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
767 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
768 def test_constructor(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
769 rawio = self.MockRawIO([b"abc"]) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
770 bufio = self.tp(rawio) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
771 bufio.__init__(rawio) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
772 bufio.__init__(rawio, buffer_size=1024) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
773 bufio.__init__(rawio, buffer_size=16) |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
774 self.assertEqual(b"abc", bufio.read()) |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
775 self.assertRaises(ValueError, bufio.__init__, rawio, buffer_size=0) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
776 self.assertRaises(ValueError, bufio.__init__, rawio, buffer_size=-16) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
777 self.assertRaises(ValueError, bufio.__init__, rawio, buffer_size=-1) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
778 rawio = self.MockRawIO([b"abc"]) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
779 bufio.__init__(rawio) |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
780 self.assertEqual(b"abc", bufio.read()) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
781 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
782 def test_read(self): |
|
57703
54f84558ad2b
accept None as the same as having passed no argument in file types #7349
Benjamin Peterson <benjamin@python.org>
parents:
55756
diff
changeset
|
783 for arg in (None, 7): |
|
54f84558ad2b
accept None as the same as having passed no argument in file types #7349
Benjamin Peterson <benjamin@python.org>
parents:
55756
diff
changeset
|
784 rawio = self.MockRawIO((b"abc", b"d", b"efg")) |
|
54f84558ad2b
accept None as the same as having passed no argument in file types #7349
Benjamin Peterson <benjamin@python.org>
parents:
55756
diff
changeset
|
785 bufio = self.tp(rawio) |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
786 self.assertEqual(b"abcdefg", bufio.read(arg)) |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
787 # Invalid args |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
788 self.assertRaises(ValueError, bufio.read, -2) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
789 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
790 def test_read1(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
791 rawio = self.MockRawIO((b"abc", b"d", b"efg")) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
792 bufio = self.tp(rawio) |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
793 self.assertEqual(b"a", bufio.read(1)) |
|
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
794 self.assertEqual(b"b", bufio.read1(1)) |
|
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
795 self.assertEqual(rawio._reads, 1) |
|
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
796 self.assertEqual(b"c", bufio.read1(100)) |
|
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
797 self.assertEqual(rawio._reads, 1) |
|
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
798 self.assertEqual(b"d", bufio.read1(100)) |
|
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
799 self.assertEqual(rawio._reads, 2) |
|
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
800 self.assertEqual(b"efg", bufio.read1(100)) |
|
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
801 self.assertEqual(rawio._reads, 3) |
|
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
802 self.assertEqual(b"", bufio.read1(100)) |
|
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
803 self.assertEqual(rawio._reads, 4) |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
804 # Invalid args |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
805 self.assertRaises(ValueError, bufio.read1, -1) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
806 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
807 def test_readinto(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
808 rawio = self.MockRawIO((b"abc", b"d", b"efg")) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
809 bufio = self.tp(rawio) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
810 b = bytearray(2) |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
811 self.assertEqual(bufio.readinto(b), 2) |
|
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
812 self.assertEqual(b, b"ab") |
|
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
813 self.assertEqual(bufio.readinto(b), 2) |
|
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
814 self.assertEqual(b, b"cd") |
|
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
815 self.assertEqual(bufio.readinto(b), 2) |
|
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
816 self.assertEqual(b, b"ef") |
|
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
817 self.assertEqual(bufio.readinto(b), 1) |
|
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
818 self.assertEqual(b, b"gf") |
|
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
819 self.assertEqual(bufio.readinto(b), 0) |
|
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
820 self.assertEqual(b, b"gf") |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
821 |
|
57703
54f84558ad2b
accept None as the same as having passed no argument in file types #7349
Benjamin Peterson <benjamin@python.org>
parents:
55756
diff
changeset
|
822 def test_readlines(self): |
|
54f84558ad2b
accept None as the same as having passed no argument in file types #7349
Benjamin Peterson <benjamin@python.org>
parents:
55756
diff
changeset
|
823 def bufio(): |
|
54f84558ad2b
accept None as the same as having passed no argument in file types #7349
Benjamin Peterson <benjamin@python.org>
parents:
55756
diff
changeset
|
824 rawio = self.MockRawIO((b"abc\n", b"d\n", b"ef")) |
|
54f84558ad2b
accept None as the same as having passed no argument in file types #7349
Benjamin Peterson <benjamin@python.org>
parents:
55756
diff
changeset
|
825 return self.tp(rawio) |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
826 self.assertEqual(bufio().readlines(), [b"abc\n", b"d\n", b"ef"]) |
|
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
827 self.assertEqual(bufio().readlines(5), [b"abc\n", b"d\n"]) |
|
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
828 self.assertEqual(bufio().readlines(None), [b"abc\n", b"d\n", b"ef"]) |
|
57703
54f84558ad2b
accept None as the same as having passed no argument in file types #7349
Benjamin Peterson <benjamin@python.org>
parents:
55756
diff
changeset
|
829 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
830 def test_buffering(self): |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
831 data = b"abcdefghi" |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
832 dlen = len(data) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
833 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
834 tests = [ |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
835 [ 100, [ 3, 1, 4, 8 ], [ dlen, 0 ] ], |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
836 [ 100, [ 3, 3, 3], [ dlen ] ], |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
837 [ 4, [ 1, 2, 4, 2 ], [ 4, 4, 1 ] ], |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
838 ] |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
839 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
840 for bufsize, buf_read_sizes, raw_read_sizes in tests: |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
841 rawio = self.MockFileIO(data) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
842 bufio = self.tp(rawio, buffer_size=bufsize) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
843 pos = 0 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
844 for nbytes in buf_read_sizes: |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
845 self.assertEqual(bufio.read(nbytes), data[pos:pos+nbytes]) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
846 pos += nbytes |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
847 # this is mildly implementation-dependent |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
848 self.assertEqual(rawio.read_history, raw_read_sizes) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
849 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
850 def test_read_non_blocking(self): |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
851 # Inject some None's in there to simulate EWOULDBLOCK |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
852 rawio = self.MockRawIO((b"abc", b"d", None, b"efg", None, None, None)) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
853 bufio = self.tp(rawio) |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
854 self.assertEqual(b"abcd", bufio.read(6)) |
|
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
855 self.assertEqual(b"e", bufio.read(1)) |
|
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
856 self.assertEqual(b"fg", bufio.read()) |
|
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
857 self.assertEqual(b"", bufio.peek(1)) |
|
70388
43a498da8680
Issue #12175: RawIOBase.readall() now returns None if read() returns None.
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70384
diff
changeset
|
858 self.assertIsNone(bufio.read()) |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
859 self.assertEqual(b"", bufio.read()) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
860 |
|
70388
43a498da8680
Issue #12175: RawIOBase.readall() now returns None if read() returns None.
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70384
diff
changeset
|
861 rawio = self.MockRawIO((b"a", None, None)) |
|
43a498da8680
Issue #12175: RawIOBase.readall() now returns None if read() returns None.
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70384
diff
changeset
|
862 self.assertEqual(b"a", rawio.readall()) |
|
43a498da8680
Issue #12175: RawIOBase.readall() now returns None if read() returns None.
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70384
diff
changeset
|
863 self.assertIsNone(rawio.readall()) |
|
43a498da8680
Issue #12175: RawIOBase.readall() now returns None if read() returns None.
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70384
diff
changeset
|
864 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
865 def test_read_past_eof(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
866 rawio = self.MockRawIO((b"abc", b"d", b"efg")) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
867 bufio = self.tp(rawio) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
868 |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
869 self.assertEqual(b"abcdefg", bufio.read(9000)) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
870 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
871 def test_read_all(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
872 rawio = self.MockRawIO((b"abc", b"d", b"efg")) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
873 bufio = self.tp(rawio) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
874 |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
875 self.assertEqual(b"abcdefg", bufio.read()) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
876 |
|
61046
3a0484200034
Issue #7449, last part (11): fix many tests if thread support is disabled
Victor Stinner <victor.stinner@haypocalc.com>
parents:
60486
diff
changeset
|
877 @unittest.skipUnless(threading, 'Threading required for this test.') |
|
65318
07b6bb76ee43
Merged revisions 85482 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64750
diff
changeset
|
878 @support.requires_resource('cpu') |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
879 def test_threads(self): |
|
48238
67938575afc6
Issue #3476: make BufferedReader and BufferedWriter thread-safe
Antoine Pitrou <solipsis@pitrou.net>
parents:
46805
diff
changeset
|
880 try: |
|
67938575afc6
Issue #3476: make BufferedReader and BufferedWriter thread-safe
Antoine Pitrou <solipsis@pitrou.net>
parents:
46805
diff
changeset
|
881 # Write out many bytes with exactly the same number of 0's, |
|
67938575afc6
Issue #3476: make BufferedReader and BufferedWriter thread-safe
Antoine Pitrou <solipsis@pitrou.net>
parents:
46805
diff
changeset
|
882 # 1's... 255's. This will help us check that concurrent reading |
|
67938575afc6
Issue #3476: make BufferedReader and BufferedWriter thread-safe
Antoine Pitrou <solipsis@pitrou.net>
parents:
46805
diff
changeset
|
883 # doesn't duplicate or forget contents. |
|
67938575afc6
Issue #3476: make BufferedReader and BufferedWriter thread-safe
Antoine Pitrou <solipsis@pitrou.net>
parents:
46805
diff
changeset
|
884 N = 1000 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
885 l = list(range(256)) * N |
|
48238
67938575afc6
Issue #3476: make BufferedReader and BufferedWriter thread-safe
Antoine Pitrou <solipsis@pitrou.net>
parents:
46805
diff
changeset
|
886 random.shuffle(l) |
|
67938575afc6
Issue #3476: make BufferedReader and BufferedWriter thread-safe
Antoine Pitrou <solipsis@pitrou.net>
parents:
46805
diff
changeset
|
887 s = bytes(bytearray(l)) |
|
54781
a5f31b30c7c3
Issue #6215: Fixed to use self.open() instead of open() or io.open().
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents:
54717
diff
changeset
|
888 with self.open(support.TESTFN, "wb") as f: |
|
48238
67938575afc6
Issue #3476: make BufferedReader and BufferedWriter thread-safe
Antoine Pitrou <solipsis@pitrou.net>
parents:
46805
diff
changeset
|
889 f.write(s) |
|
54781
a5f31b30c7c3
Issue #6215: Fixed to use self.open() instead of open() or io.open().
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents:
54717
diff
changeset
|
890 with self.open(support.TESTFN, self.read_mode, buffering=0) as raw: |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
891 bufio = self.tp(raw, 8) |
|
48238
67938575afc6
Issue #3476: make BufferedReader and BufferedWriter thread-safe
Antoine Pitrou <solipsis@pitrou.net>
parents:
46805
diff
changeset
|
892 errors = [] |
|
67938575afc6
Issue #3476: make BufferedReader and BufferedWriter thread-safe
Antoine Pitrou <solipsis@pitrou.net>
parents:
46805
diff
changeset
|
893 results = [] |
|
67938575afc6
Issue #3476: make BufferedReader and BufferedWriter thread-safe
Antoine Pitrou <solipsis@pitrou.net>
parents:
46805
diff
changeset
|
894 def f(): |
|
67938575afc6
Issue #3476: make BufferedReader and BufferedWriter thread-safe
Antoine Pitrou <solipsis@pitrou.net>
parents:
46805
diff
changeset
|
895 try: |
|
67938575afc6
Issue #3476: make BufferedReader and BufferedWriter thread-safe
Antoine Pitrou <solipsis@pitrou.net>
parents:
46805
diff
changeset
|
896 # Intra-buffer read then buffer-flushing read |
|
67938575afc6
Issue #3476: make BufferedReader and BufferedWriter thread-safe
Antoine Pitrou <solipsis@pitrou.net>
parents:
46805
diff
changeset
|
897 for n in cycle([1, 19]): |
|
67938575afc6
Issue #3476: make BufferedReader and BufferedWriter thread-safe
Antoine Pitrou <solipsis@pitrou.net>
parents:
46805
diff
changeset
|
898 s = bufio.read(n) |
|
67938575afc6
Issue #3476: make BufferedReader and BufferedWriter thread-safe
Antoine Pitrou <solipsis@pitrou.net>
parents:
46805
diff
changeset
|
899 if not s: |
|
67938575afc6
Issue #3476: make BufferedReader and BufferedWriter thread-safe
Antoine Pitrou <solipsis@pitrou.net>
parents:
46805
diff
changeset
|
900 break |
|
67938575afc6
Issue #3476: make BufferedReader and BufferedWriter thread-safe
Antoine Pitrou <solipsis@pitrou.net>
parents:
46805
diff
changeset
|
901 # list.append() is atomic |
|
67938575afc6
Issue #3476: make BufferedReader and BufferedWriter thread-safe
Antoine Pitrou <solipsis@pitrou.net>
parents:
46805
diff
changeset
|
902 results.append(s) |
|
67938575afc6
Issue #3476: make BufferedReader and BufferedWriter thread-safe
Antoine Pitrou <solipsis@pitrou.net>
parents:
46805
diff
changeset
|
903 except Exception as e: |
|
67938575afc6
Issue #3476: make BufferedReader and BufferedWriter thread-safe
Antoine Pitrou <solipsis@pitrou.net>
parents:
46805
diff
changeset
|
904 errors.append(e) |
|
67938575afc6
Issue #3476: make BufferedReader and BufferedWriter thread-safe
Antoine Pitrou <solipsis@pitrou.net>
parents:
46805
diff
changeset
|
905 raise |
|
67938575afc6
Issue #3476: make BufferedReader and BufferedWriter thread-safe
Antoine Pitrou <solipsis@pitrou.net>
parents:
46805
diff
changeset
|
906 threads = [threading.Thread(target=f) for x in range(20)] |
|
67938575afc6
Issue #3476: make BufferedReader and BufferedWriter thread-safe
Antoine Pitrou <solipsis@pitrou.net>
parents:
46805
diff
changeset
|
907 for t in threads: |
|
67938575afc6
Issue #3476: make BufferedReader and BufferedWriter thread-safe
Antoine Pitrou <solipsis@pitrou.net>
parents:
46805
diff
changeset
|
908 t.start() |
|
67938575afc6
Issue #3476: make BufferedReader and BufferedWriter thread-safe
Antoine Pitrou <solipsis@pitrou.net>
parents:
46805
diff
changeset
|
909 time.sleep(0.02) # yield |
|
67938575afc6
Issue #3476: make BufferedReader and BufferedWriter thread-safe
Antoine Pitrou <solipsis@pitrou.net>
parents:
46805
diff
changeset
|
910 for t in threads: |
|
67938575afc6
Issue #3476: make BufferedReader and BufferedWriter thread-safe
Antoine Pitrou <solipsis@pitrou.net>
parents:
46805
diff
changeset
|
911 t.join() |
|
67938575afc6
Issue #3476: make BufferedReader and BufferedWriter thread-safe
Antoine Pitrou <solipsis@pitrou.net>
parents:
46805
diff
changeset
|
912 self.assertFalse(errors, |
|
67938575afc6
Issue #3476: make BufferedReader and BufferedWriter thread-safe
Antoine Pitrou <solipsis@pitrou.net>
parents:
46805
diff
changeset
|
913 "the following exceptions were caught: %r" % errors) |
|
67938575afc6
Issue #3476: make BufferedReader and BufferedWriter thread-safe
Antoine Pitrou <solipsis@pitrou.net>
parents:
46805
diff
changeset
|
914 s = b''.join(results) |
|
67938575afc6
Issue #3476: make BufferedReader and BufferedWriter thread-safe
Antoine Pitrou <solipsis@pitrou.net>
parents:
46805
diff
changeset
|
915 for i in range(256): |
|
67938575afc6
Issue #3476: make BufferedReader and BufferedWriter thread-safe
Antoine Pitrou <solipsis@pitrou.net>
parents:
46805
diff
changeset
|
916 c = bytes(bytearray([i])) |
|
67938575afc6
Issue #3476: make BufferedReader and BufferedWriter thread-safe
Antoine Pitrou <solipsis@pitrou.net>
parents:
46805
diff
changeset
|
917 self.assertEqual(s.count(c), N) |
|
67938575afc6
Issue #3476: make BufferedReader and BufferedWriter thread-safe
Antoine Pitrou <solipsis@pitrou.net>
parents:
46805
diff
changeset
|
918 finally: |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
919 support.unlink(support.TESTFN) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
920 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
921 def test_misbehaved_io(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
922 rawio = self.MisbehavedRawIO((b"abc", b"d", b"efg")) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
923 bufio = self.tp(rawio) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
924 self.assertRaises(IOError, bufio.seek, 0) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
925 self.assertRaises(IOError, bufio.tell) |
|
48238
67938575afc6
Issue #3476: make BufferedReader and BufferedWriter thread-safe
Antoine Pitrou <solipsis@pitrou.net>
parents:
46805
diff
changeset
|
926 |
|
63921
c3ff6e910068
Merged revisions 83944 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63260
diff
changeset
|
927 def test_no_extraneous_read(self): |
|
c3ff6e910068
Merged revisions 83944 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63260
diff
changeset
|
928 # Issue #9550; when the raw IO object has satisfied the read request, |
|
c3ff6e910068
Merged revisions 83944 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63260
diff
changeset
|
929 # we should not issue any additional reads, otherwise it may block |
|
c3ff6e910068
Merged revisions 83944 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63260
diff
changeset
|
930 # (e.g. socket). |
|
c3ff6e910068
Merged revisions 83944 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63260
diff
changeset
|
931 bufsize = 16 |
|
c3ff6e910068
Merged revisions 83944 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63260
diff
changeset
|
932 for n in (2, bufsize - 1, bufsize, bufsize + 1, bufsize * 2): |
|
c3ff6e910068
Merged revisions 83944 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63260
diff
changeset
|
933 rawio = self.MockRawIO([b"x" * n]) |
|
c3ff6e910068
Merged revisions 83944 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63260
diff
changeset
|
934 bufio = self.tp(rawio, bufsize) |
|
c3ff6e910068
Merged revisions 83944 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63260
diff
changeset
|
935 self.assertEqual(bufio.read(n), b"x" * n) |
|
c3ff6e910068
Merged revisions 83944 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63260
diff
changeset
|
936 # Simple case: one raw read is enough to satisfy the request. |
|
c3ff6e910068
Merged revisions 83944 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63260
diff
changeset
|
937 self.assertEqual(rawio._extraneous_reads, 0, |
|
c3ff6e910068
Merged revisions 83944 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63260
diff
changeset
|
938 "failed for {}: {} != 0".format(n, rawio._extraneous_reads)) |
|
c3ff6e910068
Merged revisions 83944 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63260
diff
changeset
|
939 # A more complex case where two raw reads are needed to satisfy |
|
c3ff6e910068
Merged revisions 83944 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63260
diff
changeset
|
940 # the request. |
|
c3ff6e910068
Merged revisions 83944 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63260
diff
changeset
|
941 rawio = self.MockRawIO([b"x" * (n - 1), b"x"]) |
|
c3ff6e910068
Merged revisions 83944 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63260
diff
changeset
|
942 bufio = self.tp(rawio, bufsize) |
|
c3ff6e910068
Merged revisions 83944 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63260
diff
changeset
|
943 self.assertEqual(bufio.read(n), b"x" * n) |
|
c3ff6e910068
Merged revisions 83944 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63260
diff
changeset
|
944 self.assertEqual(rawio._extraneous_reads, 0, |
|
c3ff6e910068
Merged revisions 83944 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63260
diff
changeset
|
945 "failed for {}: {} != 0".format(n, rawio._extraneous_reads)) |
|
48238
67938575afc6
Issue #3476: make BufferedReader and BufferedWriter thread-safe
Antoine Pitrou <solipsis@pitrou.net>
parents:
46805
diff
changeset
|
946 |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
947 |
|
78320
1102e86b8739
Issue #15487: Add a __sizeof__ implementation for buffered I/O objects.
Antoine Pitrou <solipsis@pitrou.net>
parents:
77134
diff
changeset
|
948 class CBufferedReaderTest(BufferedReaderTest, SizeofTest): |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
949 tp = io.BufferedReader |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
950 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
951 def test_constructor(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
952 BufferedReaderTest.test_constructor(self) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
953 # The allocation can succeed on 32-bit builds, e.g. with more |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
954 # than 2GB RAM and a 64-bit kernel. |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
955 if sys.maxsize > 0x7FFFFFFF: |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
956 rawio = self.MockRawIO() |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
957 bufio = self.tp(rawio) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
958 self.assertRaises((OverflowError, MemoryError, ValueError), |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
959 bufio.__init__, rawio, sys.maxsize) |
|
48238
67938575afc6
Issue #3476: make BufferedReader and BufferedWriter thread-safe
Antoine Pitrou <solipsis@pitrou.net>
parents:
46805
diff
changeset
|
960 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
961 def test_initialization(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
962 rawio = self.MockRawIO([b"abc"]) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
963 bufio = self.tp(rawio) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
964 self.assertRaises(ValueError, bufio.__init__, rawio, buffer_size=0) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
965 self.assertRaises(ValueError, bufio.read) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
966 self.assertRaises(ValueError, bufio.__init__, rawio, buffer_size=-16) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
967 self.assertRaises(ValueError, bufio.read) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
968 self.assertRaises(ValueError, bufio.__init__, rawio, buffer_size=-1) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
969 self.assertRaises(ValueError, bufio.read) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
970 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
971 def test_misbehaved_io_read(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
972 rawio = self.MisbehavedRawIO((b"abc", b"d", b"efg")) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
973 bufio = self.tp(rawio) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
974 # _pyio.BufferedReader seems to implement reading different, so that |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
975 # checking this is not so easy. |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
976 self.assertRaises(IOError, bufio.read, 10) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
977 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
978 def test_garbage_collection(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
979 # C BufferedReader objects are collected. |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
980 # The Python version has __del__, so it ends into gc.garbage instead |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
981 rawio = self.FileIO(support.TESTFN, "w+b") |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
982 f = self.tp(rawio) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
983 f.f = f |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
984 wr = weakref.ref(f) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
985 del f |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
986 support.gc_collect() |
|
55002
6768b2350c57
convert usage of fail* to assert*
Benjamin Peterson <benjamin@python.org>
parents:
54781
diff
changeset
|
987 self.assertTrue(wr() is None, wr) |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
988 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
989 class PyBufferedReaderTest(BufferedReaderTest): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
990 tp = pyio.BufferedReader |
|
48238
67938575afc6
Issue #3476: make BufferedReader and BufferedWriter thread-safe
Antoine Pitrou <solipsis@pitrou.net>
parents:
46805
diff
changeset
|
991 |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
992 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
993 class BufferedWriterTest(unittest.TestCase, CommonBufferedTests): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
994 write_mode = "wb" |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
995 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
996 def test_constructor(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
997 rawio = self.MockRawIO() |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
998 bufio = self.tp(rawio) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
999 bufio.__init__(rawio) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1000 bufio.__init__(rawio, buffer_size=1024) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1001 bufio.__init__(rawio, buffer_size=16) |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
1002 self.assertEqual(3, bufio.write(b"abc")) |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1003 bufio.flush() |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1004 self.assertRaises(ValueError, bufio.__init__, rawio, buffer_size=0) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1005 self.assertRaises(ValueError, bufio.__init__, rawio, buffer_size=-16) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1006 self.assertRaises(ValueError, bufio.__init__, rawio, buffer_size=-1) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1007 bufio.__init__(rawio) |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
1008 self.assertEqual(3, bufio.write(b"ghi")) |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1009 bufio.flush() |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
1010 self.assertEqual(b"".join(rawio._write_stack), b"abcghi") |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1011 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1012 def test_detach_flush(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1013 raw = self.MockRawIO() |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1014 buf = self.tp(raw) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1015 buf.write(b"howdy!") |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1016 self.assertFalse(raw._write_stack) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1017 buf.detach() |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1018 self.assertEqual(raw._write_stack, [b"howdy!"]) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1019 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1020 def test_write(self): |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1021 # Write to the buffered IO but don't overflow the buffer. |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1022 writer = self.MockRawIO() |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1023 bufio = self.tp(writer, 8) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1024 bufio.write(b"abc") |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1025 self.assertFalse(writer._write_stack) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1026 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1027 def test_write_overflow(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1028 writer = self.MockRawIO() |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1029 bufio = self.tp(writer, 8) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1030 contents = b"abcdefghijklmnop" |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1031 for n in range(0, len(contents), 3): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1032 bufio.write(contents[n:n+3]) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1033 flushed = b"".join(writer._write_stack) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1034 # At least (total - 8) bytes were implicitly flushed, perhaps more |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1035 # depending on the implementation. |
|
55002
6768b2350c57
convert usage of fail* to assert*
Benjamin Peterson <benjamin@python.org>
parents:
54781
diff
changeset
|
1036 self.assertTrue(flushed.startswith(contents[:-8]), flushed) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1037 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1038 def check_writes(self, intermediate_func): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1039 # Lots of writes, test the flushed output is as expected. |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1040 contents = bytes(range(256)) * 1000 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1041 n = 0 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1042 writer = self.MockRawIO() |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1043 bufio = self.tp(writer, 13) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1044 # Generator of write sizes: repeat each N 15 times then proceed to N+1 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1045 def gen_sizes(): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1046 for size in count(1): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1047 for i in range(15): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1048 yield size |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1049 sizes = gen_sizes() |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1050 while n < len(contents): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1051 size = min(next(sizes), len(contents) - n) |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
1052 self.assertEqual(bufio.write(contents[n:n+size]), size) |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1053 intermediate_func(bufio) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1054 n += size |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1055 bufio.flush() |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
1056 self.assertEqual(contents, |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1057 b"".join(writer._write_stack)) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1058 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1059 def test_writes(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1060 self.check_writes(lambda bufio: None) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1061 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1062 def test_writes_and_flushes(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1063 self.check_writes(lambda bufio: bufio.flush()) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1064 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1065 def test_writes_and_seeks(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1066 def _seekabs(bufio): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1067 pos = bufio.tell() |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1068 bufio.seek(pos + 1, 0) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1069 bufio.seek(pos - 1, 0) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1070 bufio.seek(pos, 0) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1071 self.check_writes(_seekabs) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1072 def _seekrel(bufio): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1073 pos = bufio.seek(0, 1) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1074 bufio.seek(+1, 1) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1075 bufio.seek(-1, 1) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1076 bufio.seek(pos, 0) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1077 self.check_writes(_seekrel) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1078 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1079 def test_writes_and_truncates(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1080 self.check_writes(lambda bufio: bufio.truncate(bufio.tell())) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1081 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1082 def test_write_non_blocking(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1083 raw = self.MockNonBlockWriterIO() |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1084 bufio = self.tp(raw, 8) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1085 |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
1086 self.assertEqual(bufio.write(b"abcd"), 4) |
|
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
1087 self.assertEqual(bufio.write(b"efghi"), 5) |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1088 # 1 byte will be written, the rest will be buffered |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1089 raw.block_on(b"k") |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
1090 self.assertEqual(bufio.write(b"jklmn"), 5) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1091 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1092 # 8 bytes will be written, 8 will be buffered and the rest will be lost |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1093 raw.block_on(b"0") |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1094 try: |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1095 bufio.write(b"opqrwxyz0123456789") |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1096 except self.BlockingIOError as e: |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1097 written = e.characters_written |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1098 else: |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1099 self.fail("BlockingIOError should have been raised") |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
1100 self.assertEqual(written, 16) |
|
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
1101 self.assertEqual(raw.pop_written(), |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1102 b"abcdefghijklmnopqrwxyz") |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1103 |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
1104 self.assertEqual(bufio.write(b"ABCDEFGHI"), 9) |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1105 s = raw.pop_written() |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1106 # Previously buffered bytes were flushed |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1107 self.assertTrue(s.startswith(b"01234567A"), s) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1108 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1109 def test_write_and_rewind(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1110 raw = io.BytesIO() |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1111 bufio = self.tp(raw, 4) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1112 self.assertEqual(bufio.write(b"abcdef"), 6) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1113 self.assertEqual(bufio.tell(), 6) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1114 bufio.seek(0, 0) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1115 self.assertEqual(bufio.write(b"XY"), 2) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1116 bufio.seek(6, 0) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1117 self.assertEqual(raw.getvalue(), b"XYcdef") |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1118 self.assertEqual(bufio.write(b"123456"), 6) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1119 bufio.flush() |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1120 self.assertEqual(raw.getvalue(), b"XYcdef123456") |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1121 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1122 def test_flush(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1123 writer = self.MockRawIO() |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1124 bufio = self.tp(writer, 8) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1125 bufio.write(b"abc") |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1126 bufio.flush() |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
1127 self.assertEqual(b"abc", writer._write_stack[0]) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1128 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1129 def test_destructor(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1130 writer = self.MockRawIO() |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1131 bufio = self.tp(writer, 8) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1132 bufio.write(b"abc") |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1133 del bufio |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1134 support.gc_collect() |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
1135 self.assertEqual(b"abc", writer._write_stack[0]) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1136 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1137 def test_truncate(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1138 # Truncate implicitly flushes the buffer. |
|
54781
a5f31b30c7c3
Issue #6215: Fixed to use self.open() instead of open() or io.open().
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents:
54717
diff
changeset
|
1139 with self.open(support.TESTFN, self.write_mode, buffering=0) as raw: |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1140 bufio = self.tp(raw, 8) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1141 bufio.write(b"abcdef") |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1142 self.assertEqual(bufio.truncate(3), 3) |
|
58624
77130f2fe944
- Issue #6939: Fix file I/O objects in the `io` module to keep the original
Antoine Pitrou <solipsis@pitrou.net>
parents:
58472
diff
changeset
|
1143 self.assertEqual(bufio.tell(), 6) |
|
54781
a5f31b30c7c3
Issue #6215: Fixed to use self.open() instead of open() or io.open().
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents:
54717
diff
changeset
|
1144 with self.open(support.TESTFN, "rb", buffering=0) as f: |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1145 self.assertEqual(f.read(), b"abc") |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1146 |
|
61046
3a0484200034
Issue #7449, last part (11): fix many tests if thread support is disabled
Victor Stinner <victor.stinner@haypocalc.com>
parents:
60486
diff
changeset
|
1147 @unittest.skipUnless(threading, 'Threading required for this test.') |
|
65318
07b6bb76ee43
Merged revisions 85482 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64750
diff
changeset
|
1148 @support.requires_resource('cpu') |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1149 def test_threads(self): |
|
48238
67938575afc6
Issue #3476: make BufferedReader and BufferedWriter thread-safe
Antoine Pitrou <solipsis@pitrou.net>
parents:
46805
diff
changeset
|
1150 try: |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1151 # Write out many bytes from many threads and test they were |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1152 # all flushed. |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1153 N = 1000 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1154 contents = bytes(range(256)) * N |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1155 sizes = cycle([1, 19]) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1156 n = 0 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1157 queue = deque() |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1158 while n < len(contents): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1159 size = next(sizes) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1160 queue.append(contents[n:n+size]) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1161 n += size |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1162 del contents |
|
48238
67938575afc6
Issue #3476: make BufferedReader and BufferedWriter thread-safe
Antoine Pitrou <solipsis@pitrou.net>
parents:
46805
diff
changeset
|
1163 # We use a real file object because it allows us to |
|
67938575afc6
Issue #3476: make BufferedReader and BufferedWriter thread-safe
Antoine Pitrou <solipsis@pitrou.net>
parents:
46805
diff
changeset
|
1164 # exercise situations where the GIL is released before |
|
67938575afc6
Issue #3476: make BufferedReader and BufferedWriter thread-safe
Antoine Pitrou <solipsis@pitrou.net>
parents:
46805
diff
changeset
|
1165 # writing the buffer to the raw streams. This is in addition |
|
67938575afc6
Issue #3476: make BufferedReader and BufferedWriter thread-safe
Antoine Pitrou <solipsis@pitrou.net>
parents:
46805
diff
changeset
|
1166 # to concurrency issues due to switching threads in the middle |
|
67938575afc6
Issue #3476: make BufferedReader and BufferedWriter thread-safe
Antoine Pitrou <solipsis@pitrou.net>
parents:
46805
diff
changeset
|
1167 # of Python code. |
|
54781
a5f31b30c7c3
Issue #6215: Fixed to use self.open() instead of open() or io.open().
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents:
54717
diff
changeset
|
1168 with self.open(support.TESTFN, self.write_mode, buffering=0) as raw: |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1169 bufio = self.tp(raw, 8) |
|
48238
67938575afc6
Issue #3476: make BufferedReader and BufferedWriter thread-safe
Antoine Pitrou <solipsis@pitrou.net>
parents:
46805
diff
changeset
|
1170 errors = [] |
|
67938575afc6
Issue #3476: make BufferedReader and BufferedWriter thread-safe
Antoine Pitrou <solipsis@pitrou.net>
parents:
46805
diff
changeset
|
1171 def f(): |
|
67938575afc6
Issue #3476: make BufferedReader and BufferedWriter thread-safe
Antoine Pitrou <solipsis@pitrou.net>
parents:
46805
diff
changeset
|
1172 try: |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1173 while True: |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1174 try: |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1175 s = queue.popleft() |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1176 except IndexError: |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1177 return |
|
48238
67938575afc6
Issue #3476: make BufferedReader and BufferedWriter thread-safe
Antoine Pitrou <solipsis@pitrou.net>
parents:
46805
diff
changeset
|
1178 bufio.write(s) |
|
67938575afc6
Issue #3476: make BufferedReader and BufferedWriter thread-safe
Antoine Pitrou <solipsis@pitrou.net>
parents:
46805
diff
changeset
|
1179 except Exception as e: |
|
67938575afc6
Issue #3476: make BufferedReader and BufferedWriter thread-safe
Antoine Pitrou <solipsis@pitrou.net>
parents:
46805
diff
changeset
|
1180 errors.append(e) |
|
67938575afc6
Issue #3476: make BufferedReader and BufferedWriter thread-safe
Antoine Pitrou <solipsis@pitrou.net>
parents:
46805
diff
changeset
|
1181 raise |
|
67938575afc6
Issue #3476: make BufferedReader and BufferedWriter thread-safe
Antoine Pitrou <solipsis@pitrou.net>
parents:
46805
diff
changeset
|
1182 threads = [threading.Thread(target=f) for x in range(20)] |
|
67938575afc6
Issue #3476: make BufferedReader and BufferedWriter thread-safe
Antoine Pitrou <solipsis@pitrou.net>
parents:
46805
diff
changeset
|
1183 for t in threads: |
|
67938575afc6
Issue #3476: make BufferedReader and BufferedWriter thread-safe
Antoine Pitrou <solipsis@pitrou.net>
parents:
46805
diff
changeset
|
1184 t.start() |
|
67938575afc6
Issue #3476: make BufferedReader and BufferedWriter thread-safe
Antoine Pitrou <solipsis@pitrou.net>
parents:
46805
diff
changeset
|
1185 time.sleep(0.02) # yield |
|
67938575afc6
Issue #3476: make BufferedReader and BufferedWriter thread-safe
Antoine Pitrou <solipsis@pitrou.net>
parents:
46805
diff
changeset
|
1186 for t in threads: |
|
67938575afc6
Issue #3476: make BufferedReader and BufferedWriter thread-safe
Antoine Pitrou <solipsis@pitrou.net>
parents:
46805
diff
changeset
|
1187 t.join() |
|
67938575afc6
Issue #3476: make BufferedReader and BufferedWriter thread-safe
Antoine Pitrou <solipsis@pitrou.net>
parents:
46805
diff
changeset
|
1188 self.assertFalse(errors, |
|
67938575afc6
Issue #3476: make BufferedReader and BufferedWriter thread-safe
Antoine Pitrou <solipsis@pitrou.net>
parents:
46805
diff
changeset
|
1189 "the following exceptions were caught: %r" % errors) |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1190 bufio.close() |
|
54781
a5f31b30c7c3
Issue #6215: Fixed to use self.open() instead of open() or io.open().
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents:
54717
diff
changeset
|
1191 with self.open(support.TESTFN, "rb") as f: |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1192 s = f.read() |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1193 for i in range(256): |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
1194 self.assertEqual(s.count(bytes([i])), N) |
|
48238
67938575afc6
Issue #3476: make BufferedReader and BufferedWriter thread-safe
Antoine Pitrou <solipsis@pitrou.net>
parents:
46805
diff
changeset
|
1195 finally: |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1196 support.unlink(support.TESTFN) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1197 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1198 def test_misbehaved_io(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1199 rawio = self.MisbehavedRawIO() |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1200 bufio = self.tp(rawio, 5) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1201 self.assertRaises(IOError, bufio.seek, 0) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1202 self.assertRaises(IOError, bufio.tell) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1203 self.assertRaises(IOError, bufio.write, b"abcdef") |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1204 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1205 def test_max_buffer_size_deprecation(self): |
|
59669
7df3e13d3e50
Cleanup some test cases using check_warnings and check_py3k_warnings.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58817
diff
changeset
|
1206 with support.check_warnings(("max_buffer_size is deprecated", |
|
7df3e13d3e50
Cleanup some test cases using check_warnings and check_py3k_warnings.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58817
diff
changeset
|
1207 DeprecationWarning)): |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1208 self.tp(self.MockRawIO(), 8, 12) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1209 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1210 |
|
78320
1102e86b8739
Issue #15487: Add a __sizeof__ implementation for buffered I/O objects.
Antoine Pitrou <solipsis@pitrou.net>
parents:
77134
diff
changeset
|
1211 class CBufferedWriterTest(BufferedWriterTest, SizeofTest): |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1212 tp = io.BufferedWriter |
|
48238
67938575afc6
Issue #3476: make BufferedReader and BufferedWriter thread-safe
Antoine Pitrou <solipsis@pitrou.net>
parents:
46805
diff
changeset
|
1213 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1214 def test_constructor(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1215 BufferedWriterTest.test_constructor(self) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1216 # The allocation can succeed on 32-bit builds, e.g. with more |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1217 # than 2GB RAM and a 64-bit kernel. |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1218 if sys.maxsize > 0x7FFFFFFF: |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1219 rawio = self.MockRawIO() |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1220 bufio = self.tp(rawio) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1221 self.assertRaises((OverflowError, MemoryError, ValueError), |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1222 bufio.__init__, rawio, sys.maxsize) |
|
61181
fe3bf399a19c
Merged revisions 80720 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
58544
diff
changeset
|
1223 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1224 def test_initialization(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1225 rawio = self.MockRawIO() |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1226 bufio = self.tp(rawio) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1227 self.assertRaises(ValueError, bufio.__init__, rawio, buffer_size=0) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1228 self.assertRaises(ValueError, bufio.write, b"def") |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1229 self.assertRaises(ValueError, bufio.__init__, rawio, buffer_size=-16) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1230 self.assertRaises(ValueError, bufio.write, b"def") |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1231 self.assertRaises(ValueError, bufio.__init__, rawio, buffer_size=-1) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1232 self.assertRaises(ValueError, bufio.write, b"def") |
|
61181
fe3bf399a19c
Merged revisions 80720 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
58544
diff
changeset
|
1233 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1234 def test_garbage_collection(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1235 # C BufferedWriter objects are collected, and collecting them flushes |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1236 # all data to disk. |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1237 # The Python version has __del__, so it ends into gc.garbage instead |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1238 rawio = self.FileIO(support.TESTFN, "w+b") |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1239 f = self.tp(rawio) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1240 f.write(b"123xxx") |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1241 f.x = f |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1242 wr = weakref.ref(f) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1243 del f |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1244 support.gc_collect() |
|
55002
6768b2350c57
convert usage of fail* to assert*
Benjamin Peterson <benjamin@python.org>
parents:
54781
diff
changeset
|
1245 self.assertTrue(wr() is None, wr) |
|
54781
a5f31b30c7c3
Issue #6215: Fixed to use self.open() instead of open() or io.open().
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents:
54717
diff
changeset
|
1246 with self.open(support.TESTFN, "rb") as f: |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1247 self.assertEqual(f.read(), b"123xxx") |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1248 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1249 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1250 class PyBufferedWriterTest(BufferedWriterTest): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1251 tp = pyio.BufferedWriter |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1252 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1253 class BufferedRWPairTest(unittest.TestCase): |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1254 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1255 def test_constructor(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1256 pair = self.tp(self.MockRawIO(), self.MockRawIO()) |
|
50305
e673632e1885
Merged revisions 67898,67904-67907,67912,67918,67920-67921,67923-67924,67927,67930,67932,67943 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
50171
diff
changeset
|
1257 self.assertFalse(pair.closed) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1258 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1259 def test_detach(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1260 pair = self.tp(self.MockRawIO(), self.MockRawIO()) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1261 self.assertRaises(self.UnsupportedOperation, pair.detach) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1262 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1263 def test_constructor_max_buffer_size_deprecation(self): |
|
59669
7df3e13d3e50
Cleanup some test cases using check_warnings and check_py3k_warnings.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58817
diff
changeset
|
1264 with support.check_warnings(("max_buffer_size is deprecated", |
|
7df3e13d3e50
Cleanup some test cases using check_warnings and check_py3k_warnings.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58817
diff
changeset
|
1265 DeprecationWarning)): |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1266 self.tp(self.MockRawIO(), self.MockRawIO(), 8, 12) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1267 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1268 def test_constructor_with_not_readable(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1269 class NotReadable(MockRawIO): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1270 def readable(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1271 return False |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1272 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1273 self.assertRaises(IOError, self.tp, NotReadable(), self.MockRawIO()) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1274 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1275 def test_constructor_with_not_writeable(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1276 class NotWriteable(MockRawIO): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1277 def writable(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1278 return False |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1279 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1280 self.assertRaises(IOError, self.tp, self.MockRawIO(), NotWriteable()) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1281 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1282 def test_read(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1283 pair = self.tp(self.BytesIO(b"abcdef"), self.MockRawIO()) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1284 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1285 self.assertEqual(pair.read(3), b"abc") |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1286 self.assertEqual(pair.read(1), b"d") |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1287 self.assertEqual(pair.read(), b"ef") |
|
57703
54f84558ad2b
accept None as the same as having passed no argument in file types #7349
Benjamin Peterson <benjamin@python.org>
parents:
55756
diff
changeset
|
1288 pair = self.tp(self.BytesIO(b"abc"), self.MockRawIO()) |
|
54f84558ad2b
accept None as the same as having passed no argument in file types #7349
Benjamin Peterson <benjamin@python.org>
parents:
55756
diff
changeset
|
1289 self.assertEqual(pair.read(None), b"abc") |
|
54f84558ad2b
accept None as the same as having passed no argument in file types #7349
Benjamin Peterson <benjamin@python.org>
parents:
55756
diff
changeset
|
1290 |
|
54f84558ad2b
accept None as the same as having passed no argument in file types #7349
Benjamin Peterson <benjamin@python.org>
parents:
55756
diff
changeset
|
1291 def test_readlines(self): |
|
54f84558ad2b
accept None as the same as having passed no argument in file types #7349
Benjamin Peterson <benjamin@python.org>
parents:
55756
diff
changeset
|
1292 pair = lambda: self.tp(self.BytesIO(b"abc\ndef\nh"), self.MockRawIO()) |
|
54f84558ad2b
accept None as the same as having passed no argument in file types #7349
Benjamin Peterson <benjamin@python.org>
parents:
55756
diff
changeset
|
1293 self.assertEqual(pair().readlines(), [b"abc\n", b"def\n", b"h"]) |
|
54f84558ad2b
accept None as the same as having passed no argument in file types #7349
Benjamin Peterson <benjamin@python.org>
parents:
55756
diff
changeset
|
1294 self.assertEqual(pair().readlines(), [b"abc\n", b"def\n", b"h"]) |
|
54f84558ad2b
accept None as the same as having passed no argument in file types #7349
Benjamin Peterson <benjamin@python.org>
parents:
55756
diff
changeset
|
1295 self.assertEqual(pair().readlines(5), [b"abc\n", b"def\n"]) |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1296 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1297 def test_read1(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1298 # .read1() is delegated to the underlying reader object, so this test |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1299 # can be shallow. |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1300 pair = self.tp(self.BytesIO(b"abcdef"), self.MockRawIO()) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1301 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1302 self.assertEqual(pair.read1(3), b"abc") |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1303 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1304 def test_readinto(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1305 pair = self.tp(self.BytesIO(b"abcdef"), self.MockRawIO()) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1306 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1307 data = bytearray(5) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1308 self.assertEqual(pair.readinto(data), 5) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1309 self.assertEqual(data, b"abcde") |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1310 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1311 def test_write(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1312 w = self.MockRawIO() |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1313 pair = self.tp(self.MockRawIO(), w) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1314 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1315 pair.write(b"abc") |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1316 pair.flush() |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1317 pair.write(b"def") |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1318 pair.flush() |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1319 self.assertEqual(w._write_stack, [b"abc", b"def"]) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1320 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1321 def test_peek(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1322 pair = self.tp(self.BytesIO(b"abcdef"), self.MockRawIO()) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1323 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1324 self.assertTrue(pair.peek(3).startswith(b"abc")) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1325 self.assertEqual(pair.read(3), b"abc") |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1326 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1327 def test_readable(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1328 pair = self.tp(self.MockRawIO(), self.MockRawIO()) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1329 self.assertTrue(pair.readable()) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1330 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1331 def test_writeable(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1332 pair = self.tp(self.MockRawIO(), self.MockRawIO()) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1333 self.assertTrue(pair.writable()) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1334 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1335 def test_seekable(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1336 # BufferedRWPairs are never seekable, even if their readers and writers |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1337 # are. |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1338 pair = self.tp(self.MockRawIO(), self.MockRawIO()) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1339 self.assertFalse(pair.seekable()) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1340 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1341 # .flush() is delegated to the underlying writer object and has been |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1342 # tested in the test_write method. |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1343 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1344 def test_close_and_closed(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1345 pair = self.tp(self.MockRawIO(), self.MockRawIO()) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1346 self.assertFalse(pair.closed) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1347 pair.close() |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1348 self.assertTrue(pair.closed) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1349 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1350 def test_isatty(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1351 class SelectableIsAtty(MockRawIO): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1352 def __init__(self, isatty): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1353 MockRawIO.__init__(self) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1354 self._isatty = isatty |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1355 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1356 def isatty(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1357 return self._isatty |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1358 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1359 pair = self.tp(SelectableIsAtty(False), SelectableIsAtty(False)) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1360 self.assertFalse(pair.isatty()) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1361 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1362 pair = self.tp(SelectableIsAtty(True), SelectableIsAtty(False)) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1363 self.assertTrue(pair.isatty()) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1364 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1365 pair = self.tp(SelectableIsAtty(False), SelectableIsAtty(True)) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1366 self.assertTrue(pair.isatty()) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1367 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1368 pair = self.tp(SelectableIsAtty(True), SelectableIsAtty(True)) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1369 self.assertTrue(pair.isatty()) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1370 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1371 class CBufferedRWPairTest(BufferedRWPairTest): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1372 tp = io.BufferedRWPair |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1373 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1374 class PyBufferedRWPairTest(BufferedRWPairTest): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1375 tp = pyio.BufferedRWPair |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1376 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1377 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1378 class BufferedRandomTest(BufferedReaderTest, BufferedWriterTest): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1379 read_mode = "rb+" |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1380 write_mode = "wb+" |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1381 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1382 def test_constructor(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1383 BufferedReaderTest.test_constructor(self) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1384 BufferedWriterTest.test_constructor(self) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1385 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1386 def test_read_and_write(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1387 raw = self.MockRawIO((b"asdf", b"ghjk")) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1388 rw = self.tp(raw, 8) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1389 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1390 self.assertEqual(b"as", rw.read(2)) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1391 rw.write(b"ddd") |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1392 rw.write(b"eee") |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1393 self.assertFalse(raw._write_stack) # Buffer writes |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1394 self.assertEqual(b"ghjk", rw.read()) |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
1395 self.assertEqual(b"dddeee", raw._write_stack[0]) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1396 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1397 def test_seek_and_tell(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1398 raw = self.BytesIO(b"asdfghjkl") |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1399 rw = self.tp(raw) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1400 |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
1401 self.assertEqual(b"as", rw.read(2)) |
|
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
1402 self.assertEqual(2, rw.tell()) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1403 rw.seek(0, 0) |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
1404 self.assertEqual(b"asdf", rw.read(4)) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1405 |
|
71984
cf2010e9f941
Issue #12213: Fix a buffering bug with interleaved reads and writes that
Antoine Pitrou <solipsis@pitrou.net>
parents:
71299
diff
changeset
|
1406 rw.write(b"123f") |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1407 rw.seek(0, 0) |
|
71984
cf2010e9f941
Issue #12213: Fix a buffering bug with interleaved reads and writes that
Antoine Pitrou <solipsis@pitrou.net>
parents:
71299
diff
changeset
|
1408 self.assertEqual(b"asdf123fl", rw.read()) |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
1409 self.assertEqual(9, rw.tell()) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1410 rw.seek(-4, 2) |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
1411 self.assertEqual(5, rw.tell()) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1412 rw.seek(2, 1) |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
1413 self.assertEqual(7, rw.tell()) |
|
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
1414 self.assertEqual(b"fl", rw.read(11)) |
|
71984
cf2010e9f941
Issue #12213: Fix a buffering bug with interleaved reads and writes that
Antoine Pitrou <solipsis@pitrou.net>
parents:
71299
diff
changeset
|
1415 rw.flush() |
|
cf2010e9f941
Issue #12213: Fix a buffering bug with interleaved reads and writes that
Antoine Pitrou <solipsis@pitrou.net>
parents:
71299
diff
changeset
|
1416 self.assertEqual(b"asdf123fl", raw.getvalue()) |
|
cf2010e9f941
Issue #12213: Fix a buffering bug with interleaved reads and writes that
Antoine Pitrou <solipsis@pitrou.net>
parents:
71299
diff
changeset
|
1417 |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1418 self.assertRaises(TypeError, rw.seek, 0.0) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1419 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1420 def check_flush_and_read(self, read_func): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1421 raw = self.BytesIO(b"abcdefghi") |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1422 bufio = self.tp(raw) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1423 |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
1424 self.assertEqual(b"ab", read_func(bufio, 2)) |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1425 bufio.write(b"12") |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
1426 self.assertEqual(b"ef", read_func(bufio, 2)) |
|
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
1427 self.assertEqual(6, bufio.tell()) |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1428 bufio.flush() |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
1429 self.assertEqual(6, bufio.tell()) |
|
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
1430 self.assertEqual(b"ghi", read_func(bufio)) |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1431 raw.seek(0, 0) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1432 raw.write(b"XYZ") |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1433 # flush() resets the read buffer |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1434 bufio.flush() |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1435 bufio.seek(0, 0) |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
1436 self.assertEqual(b"XYZ", read_func(bufio, 3)) |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1437 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1438 def test_flush_and_read(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1439 self.check_flush_and_read(lambda bufio, *args: bufio.read(*args)) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1440 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1441 def test_flush_and_readinto(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1442 def _readinto(bufio, n=-1): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1443 b = bytearray(n if n >= 0 else 9999) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1444 n = bufio.readinto(b) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1445 return bytes(b[:n]) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1446 self.check_flush_and_read(_readinto) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1447 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1448 def test_flush_and_peek(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1449 def _peek(bufio, n=-1): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1450 # This relies on the fact that the buffer can contain the whole |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1451 # raw stream, otherwise peek() can return less. |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1452 b = bufio.peek(n) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1453 if n != -1: |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1454 b = b[:n] |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1455 bufio.seek(len(b), 1) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1456 return b |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1457 self.check_flush_and_read(_peek) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1458 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1459 def test_flush_and_write(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1460 raw = self.BytesIO(b"abcdefghi") |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1461 bufio = self.tp(raw) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1462 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1463 bufio.write(b"123") |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1464 bufio.flush() |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1465 bufio.write(b"45") |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1466 bufio.flush() |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1467 bufio.seek(0, 0) |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
1468 self.assertEqual(b"12345fghi", raw.getvalue()) |
|
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
1469 self.assertEqual(b"12345fghi", bufio.read()) |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1470 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1471 def test_threads(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1472 BufferedReaderTest.test_threads(self) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1473 BufferedWriterTest.test_threads(self) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1474 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1475 def test_writes_and_peek(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1476 def _peek(bufio): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1477 bufio.peek(1) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1478 self.check_writes(_peek) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1479 def _peek(bufio): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1480 pos = bufio.tell() |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1481 bufio.seek(-1, 1) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1482 bufio.peek(1) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1483 bufio.seek(pos, 0) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1484 self.check_writes(_peek) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1485 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1486 def test_writes_and_reads(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1487 def _read(bufio): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1488 bufio.seek(-1, 1) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1489 bufio.read(1) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1490 self.check_writes(_read) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1491 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1492 def test_writes_and_read1s(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1493 def _read1(bufio): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1494 bufio.seek(-1, 1) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1495 bufio.read1(1) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1496 self.check_writes(_read1) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1497 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1498 def test_writes_and_readintos(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1499 def _read(bufio): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1500 bufio.seek(-1, 1) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1501 bufio.readinto(bytearray(1)) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1502 self.check_writes(_read) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1503 |
|
55564
2f641e337c9f
Issue #6629: Fix a data corruption issue in the new `io` package, which could
Antoine Pitrou <solipsis@pitrou.net>
parents:
55002
diff
changeset
|
1504 def test_write_after_readahead(self): |
|
2f641e337c9f
Issue #6629: Fix a data corruption issue in the new `io` package, which could
Antoine Pitrou <solipsis@pitrou.net>
parents:
55002
diff
changeset
|
1505 # Issue #6629: writing after the buffer was filled by readahead should |
|
2f641e337c9f
Issue #6629: Fix a data corruption issue in the new `io` package, which could
Antoine Pitrou <solipsis@pitrou.net>
parents:
55002
diff
changeset
|
1506 # first rewind the raw stream. |
|
2f641e337c9f
Issue #6629: Fix a data corruption issue in the new `io` package, which could
Antoine Pitrou <solipsis@pitrou.net>
parents:
55002
diff
changeset
|
1507 for overwrite_size in [1, 5]: |
|
2f641e337c9f
Issue #6629: Fix a data corruption issue in the new `io` package, which could
Antoine Pitrou <solipsis@pitrou.net>
parents:
55002
diff
changeset
|
1508 raw = self.BytesIO(b"A" * 10) |
|
2f641e337c9f
Issue #6629: Fix a data corruption issue in the new `io` package, which could
Antoine Pitrou <solipsis@pitrou.net>
parents:
55002
diff
changeset
|
1509 bufio = self.tp(raw, 4) |
|
2f641e337c9f
Issue #6629: Fix a data corruption issue in the new `io` package, which could
Antoine Pitrou <solipsis@pitrou.net>
parents:
55002
diff
changeset
|
1510 # Trigger readahead |
|
2f641e337c9f
Issue #6629: Fix a data corruption issue in the new `io` package, which could
Antoine Pitrou <solipsis@pitrou.net>
parents:
55002
diff
changeset
|
1511 self.assertEqual(bufio.read(1), b"A") |
|
2f641e337c9f
Issue #6629: Fix a data corruption issue in the new `io` package, which could
Antoine Pitrou <solipsis@pitrou.net>
parents:
55002
diff
changeset
|
1512 self.assertEqual(bufio.tell(), 1) |
|
2f641e337c9f
Issue #6629: Fix a data corruption issue in the new `io` package, which could
Antoine Pitrou <solipsis@pitrou.net>
parents:
55002
diff
changeset
|
1513 # Overwriting should rewind the raw stream if it needs so |
|
2f641e337c9f
Issue #6629: Fix a data corruption issue in the new `io` package, which could
Antoine Pitrou <solipsis@pitrou.net>
parents:
55002
diff
changeset
|
1514 bufio.write(b"B" * overwrite_size) |
|
2f641e337c9f
Issue #6629: Fix a data corruption issue in the new `io` package, which could
Antoine Pitrou <solipsis@pitrou.net>
parents:
55002
diff
changeset
|
1515 self.assertEqual(bufio.tell(), overwrite_size + 1) |
|
2f641e337c9f
Issue #6629: Fix a data corruption issue in the new `io` package, which could
Antoine Pitrou <solipsis@pitrou.net>
parents:
55002
diff
changeset
|
1516 # If the write size was smaller than the buffer size, flush() and |
|
2f641e337c9f
Issue #6629: Fix a data corruption issue in the new `io` package, which could
Antoine Pitrou <solipsis@pitrou.net>
parents:
55002
diff
changeset
|
1517 # check that rewind happens. |
|
2f641e337c9f
Issue #6629: Fix a data corruption issue in the new `io` package, which could
Antoine Pitrou <solipsis@pitrou.net>
parents:
55002
diff
changeset
|
1518 bufio.flush() |
|
2f641e337c9f
Issue #6629: Fix a data corruption issue in the new `io` package, which could
Antoine Pitrou <solipsis@pitrou.net>
parents:
55002
diff
changeset
|
1519 self.assertEqual(bufio.tell(), overwrite_size + 1) |
|
2f641e337c9f
Issue #6629: Fix a data corruption issue in the new `io` package, which could
Antoine Pitrou <solipsis@pitrou.net>
parents:
55002
diff
changeset
|
1520 s = raw.getvalue() |
|
2f641e337c9f
Issue #6629: Fix a data corruption issue in the new `io` package, which could
Antoine Pitrou <solipsis@pitrou.net>
parents:
55002
diff
changeset
|
1521 self.assertEqual(s, |
|
2f641e337c9f
Issue #6629: Fix a data corruption issue in the new `io` package, which could
Antoine Pitrou <solipsis@pitrou.net>
parents:
55002
diff
changeset
|
1522 b"A" + b"B" * overwrite_size + b"A" * (9 - overwrite_size)) |
|
2f641e337c9f
Issue #6629: Fix a data corruption issue in the new `io` package, which could
Antoine Pitrou <solipsis@pitrou.net>
parents:
55002
diff
changeset
|
1523 |
|
70060
0d24d4c537a6
Issue #12062: In the `io` module, fix a flushing bug when doing a certain
Antoine Pitrou <solipsis@pitrou.net>
parents:
68256
diff
changeset
|
1524 def test_write_rewind_write(self): |
|
0d24d4c537a6
Issue #12062: In the `io` module, fix a flushing bug when doing a certain
Antoine Pitrou <solipsis@pitrou.net>
parents:
68256
diff
changeset
|
1525 # Various combinations of reading / writing / seeking backwards / writing again |
|
0d24d4c537a6
Issue #12062: In the `io` module, fix a flushing bug when doing a certain
Antoine Pitrou <solipsis@pitrou.net>
parents:
68256
diff
changeset
|
1526 def mutate(bufio, pos1, pos2): |
|
0d24d4c537a6
Issue #12062: In the `io` module, fix a flushing bug when doing a certain
Antoine Pitrou <solipsis@pitrou.net>
parents:
68256
diff
changeset
|
1527 assert pos2 >= pos1 |
|
0d24d4c537a6
Issue #12062: In the `io` module, fix a flushing bug when doing a certain
Antoine Pitrou <solipsis@pitrou.net>
parents:
68256
diff
changeset
|
1528 # Fill the buffer |
|
0d24d4c537a6
Issue #12062: In the `io` module, fix a flushing bug when doing a certain
Antoine Pitrou <solipsis@pitrou.net>
parents:
68256
diff
changeset
|
1529 bufio.seek(pos1) |
|
0d24d4c537a6
Issue #12062: In the `io` module, fix a flushing bug when doing a certain
Antoine Pitrou <solipsis@pitrou.net>
parents:
68256
diff
changeset
|
1530 bufio.read(pos2 - pos1) |
|
0d24d4c537a6
Issue #12062: In the `io` module, fix a flushing bug when doing a certain
Antoine Pitrou <solipsis@pitrou.net>
parents:
68256
diff
changeset
|
1531 bufio.write(b'\x02') |
|
0d24d4c537a6
Issue #12062: In the `io` module, fix a flushing bug when doing a certain
Antoine Pitrou <solipsis@pitrou.net>
parents:
68256
diff
changeset
|
1532 # This writes earlier than the previous write, but still inside |
|
0d24d4c537a6
Issue #12062: In the `io` module, fix a flushing bug when doing a certain
Antoine Pitrou <solipsis@pitrou.net>
parents:
68256
diff
changeset
|
1533 # the buffer. |
|
0d24d4c537a6
Issue #12062: In the `io` module, fix a flushing bug when doing a certain
Antoine Pitrou <solipsis@pitrou.net>
parents:
68256
diff
changeset
|
1534 bufio.seek(pos1) |
|
0d24d4c537a6
Issue #12062: In the `io` module, fix a flushing bug when doing a certain
Antoine Pitrou <solipsis@pitrou.net>
parents:
68256
diff
changeset
|
1535 bufio.write(b'\x01') |
|
0d24d4c537a6
Issue #12062: In the `io` module, fix a flushing bug when doing a certain
Antoine Pitrou <solipsis@pitrou.net>
parents:
68256
diff
changeset
|
1536 |
|
0d24d4c537a6
Issue #12062: In the `io` module, fix a flushing bug when doing a certain
Antoine Pitrou <solipsis@pitrou.net>
parents:
68256
diff
changeset
|
1537 b = b"\x80\x81\x82\x83\x84" |
|
0d24d4c537a6
Issue #12062: In the `io` module, fix a flushing bug when doing a certain
Antoine Pitrou <solipsis@pitrou.net>
parents:
68256
diff
changeset
|
1538 for i in range(0, len(b)): |
|
0d24d4c537a6
Issue #12062: In the `io` module, fix a flushing bug when doing a certain
Antoine Pitrou <solipsis@pitrou.net>
parents:
68256
diff
changeset
|
1539 for j in range(i, len(b)): |
|
0d24d4c537a6
Issue #12062: In the `io` module, fix a flushing bug when doing a certain
Antoine Pitrou <solipsis@pitrou.net>
parents:
68256
diff
changeset
|
1540 raw = self.BytesIO(b) |
|
0d24d4c537a6
Issue #12062: In the `io` module, fix a flushing bug when doing a certain
Antoine Pitrou <solipsis@pitrou.net>
parents:
68256
diff
changeset
|
1541 bufio = self.tp(raw, 100) |
|
0d24d4c537a6
Issue #12062: In the `io` module, fix a flushing bug when doing a certain
Antoine Pitrou <solipsis@pitrou.net>
parents:
68256
diff
changeset
|
1542 mutate(bufio, i, j) |
|
0d24d4c537a6
Issue #12062: In the `io` module, fix a flushing bug when doing a certain
Antoine Pitrou <solipsis@pitrou.net>
parents:
68256
diff
changeset
|
1543 bufio.flush() |
|
0d24d4c537a6
Issue #12062: In the `io` module, fix a flushing bug when doing a certain
Antoine Pitrou <solipsis@pitrou.net>
parents:
68256
diff
changeset
|
1544 expected = bytearray(b) |
|
0d24d4c537a6
Issue #12062: In the `io` module, fix a flushing bug when doing a certain
Antoine Pitrou <solipsis@pitrou.net>
parents:
68256
diff
changeset
|
1545 expected[j] = 2 |
|
0d24d4c537a6
Issue #12062: In the `io` module, fix a flushing bug when doing a certain
Antoine Pitrou <solipsis@pitrou.net>
parents:
68256
diff
changeset
|
1546 expected[i] = 1 |
|
0d24d4c537a6
Issue #12062: In the `io` module, fix a flushing bug when doing a certain
Antoine Pitrou <solipsis@pitrou.net>
parents:
68256
diff
changeset
|
1547 self.assertEqual(raw.getvalue(), expected, |
|
0d24d4c537a6
Issue #12062: In the `io` module, fix a flushing bug when doing a certain
Antoine Pitrou <solipsis@pitrou.net>
parents:
68256
diff
changeset
|
1548 "failed result for i=%d, j=%d" % (i, j)) |
|
0d24d4c537a6
Issue #12062: In the `io` module, fix a flushing bug when doing a certain
Antoine Pitrou <solipsis@pitrou.net>
parents:
68256
diff
changeset
|
1549 |
|
58624
77130f2fe944
- Issue #6939: Fix file I/O objects in the `io` module to keep the original
Antoine Pitrou <solipsis@pitrou.net>
parents:
58472
diff
changeset
|
1550 def test_truncate_after_read_or_write(self): |
|
77130f2fe944
- Issue #6939: Fix file I/O objects in the `io` module to keep the original
Antoine Pitrou <solipsis@pitrou.net>
parents:
58472
diff
changeset
|
1551 raw = self.BytesIO(b"A" * 10) |
|
77130f2fe944
- Issue #6939: Fix file I/O objects in the `io` module to keep the original
Antoine Pitrou <solipsis@pitrou.net>
parents:
58472
diff
changeset
|
1552 bufio = self.tp(raw, 100) |
|
77130f2fe944
- Issue #6939: Fix file I/O objects in the `io` module to keep the original
Antoine Pitrou <solipsis@pitrou.net>
parents:
58472
diff
changeset
|
1553 self.assertEqual(bufio.read(2), b"AA") # the read buffer gets filled |
|
77130f2fe944
- Issue #6939: Fix file I/O objects in the `io` module to keep the original
Antoine Pitrou <solipsis@pitrou.net>
parents:
58472
diff
changeset
|
1554 self.assertEqual(bufio.truncate(), 2) |
|
77130f2fe944
- Issue #6939: Fix file I/O objects in the `io` module to keep the original
Antoine Pitrou <solipsis@pitrou.net>
parents:
58472
diff
changeset
|
1555 self.assertEqual(bufio.write(b"BB"), 2) # the write buffer increases |
|
77130f2fe944
- Issue #6939: Fix file I/O objects in the `io` module to keep the original
Antoine Pitrou <solipsis@pitrou.net>
parents:
58472
diff
changeset
|
1556 self.assertEqual(bufio.truncate(), 4) |
|
77130f2fe944
- Issue #6939: Fix file I/O objects in the `io` module to keep the original
Antoine Pitrou <solipsis@pitrou.net>
parents:
58472
diff
changeset
|
1557 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1558 def test_misbehaved_io(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1559 BufferedReaderTest.test_misbehaved_io(self) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1560 BufferedWriterTest.test_misbehaved_io(self) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1561 |
|
71984
cf2010e9f941
Issue #12213: Fix a buffering bug with interleaved reads and writes that
Antoine Pitrou <solipsis@pitrou.net>
parents:
71299
diff
changeset
|
1562 def test_interleaved_read_write(self): |
|
cf2010e9f941
Issue #12213: Fix a buffering bug with interleaved reads and writes that
Antoine Pitrou <solipsis@pitrou.net>
parents:
71299
diff
changeset
|
1563 # Test for issue #12213 |
|
cf2010e9f941
Issue #12213: Fix a buffering bug with interleaved reads and writes that
Antoine Pitrou <solipsis@pitrou.net>
parents:
71299
diff
changeset
|
1564 with self.BytesIO(b'abcdefgh') as raw: |
|
cf2010e9f941
Issue #12213: Fix a buffering bug with interleaved reads and writes that
Antoine Pitrou <solipsis@pitrou.net>
parents:
71299
diff
changeset
|
1565 with self.tp(raw, 100) as f: |
|
cf2010e9f941
Issue #12213: Fix a buffering bug with interleaved reads and writes that
Antoine Pitrou <solipsis@pitrou.net>
parents:
71299
diff
changeset
|
1566 f.write(b"1") |
|
cf2010e9f941
Issue #12213: Fix a buffering bug with interleaved reads and writes that
Antoine Pitrou <solipsis@pitrou.net>
parents:
71299
diff
changeset
|
1567 self.assertEqual(f.read(1), b'b') |
|
cf2010e9f941
Issue #12213: Fix a buffering bug with interleaved reads and writes that
Antoine Pitrou <solipsis@pitrou.net>
parents:
71299
diff
changeset
|
1568 f.write(b'2') |
|
cf2010e9f941
Issue #12213: Fix a buffering bug with interleaved reads and writes that
Antoine Pitrou <solipsis@pitrou.net>
parents:
71299
diff
changeset
|
1569 self.assertEqual(f.read1(1), b'd') |
|
cf2010e9f941
Issue #12213: Fix a buffering bug with interleaved reads and writes that
Antoine Pitrou <solipsis@pitrou.net>
parents:
71299
diff
changeset
|
1570 f.write(b'3') |
|
cf2010e9f941
Issue #12213: Fix a buffering bug with interleaved reads and writes that
Antoine Pitrou <solipsis@pitrou.net>
parents:
71299
diff
changeset
|
1571 buf = bytearray(1) |
|
cf2010e9f941
Issue #12213: Fix a buffering bug with interleaved reads and writes that
Antoine Pitrou <solipsis@pitrou.net>
parents:
71299
diff
changeset
|
1572 f.readinto(buf) |
|
cf2010e9f941
Issue #12213: Fix a buffering bug with interleaved reads and writes that
Antoine Pitrou <solipsis@pitrou.net>
parents:
71299
diff
changeset
|
1573 self.assertEqual(buf, b'f') |
|
cf2010e9f941
Issue #12213: Fix a buffering bug with interleaved reads and writes that
Antoine Pitrou <solipsis@pitrou.net>
parents:
71299
diff
changeset
|
1574 f.write(b'4') |
|
cf2010e9f941
Issue #12213: Fix a buffering bug with interleaved reads and writes that
Antoine Pitrou <solipsis@pitrou.net>
parents:
71299
diff
changeset
|
1575 self.assertEqual(f.peek(1), b'h') |
|
cf2010e9f941
Issue #12213: Fix a buffering bug with interleaved reads and writes that
Antoine Pitrou <solipsis@pitrou.net>
parents:
71299
diff
changeset
|
1576 f.flush() |
|
cf2010e9f941
Issue #12213: Fix a buffering bug with interleaved reads and writes that
Antoine Pitrou <solipsis@pitrou.net>
parents:
71299
diff
changeset
|
1577 self.assertEqual(raw.getvalue(), b'1b2d3f4h') |
|
cf2010e9f941
Issue #12213: Fix a buffering bug with interleaved reads and writes that
Antoine Pitrou <solipsis@pitrou.net>
parents:
71299
diff
changeset
|
1578 |
|
cf2010e9f941
Issue #12213: Fix a buffering bug with interleaved reads and writes that
Antoine Pitrou <solipsis@pitrou.net>
parents:
71299
diff
changeset
|
1579 with self.BytesIO(b'abc') as raw: |
|
cf2010e9f941
Issue #12213: Fix a buffering bug with interleaved reads and writes that
Antoine Pitrou <solipsis@pitrou.net>
parents:
71299
diff
changeset
|
1580 with self.tp(raw, 100) as f: |
|
cf2010e9f941
Issue #12213: Fix a buffering bug with interleaved reads and writes that
Antoine Pitrou <solipsis@pitrou.net>
parents:
71299
diff
changeset
|
1581 self.assertEqual(f.read(1), b'a') |
|
cf2010e9f941
Issue #12213: Fix a buffering bug with interleaved reads and writes that
Antoine Pitrou <solipsis@pitrou.net>
parents:
71299
diff
changeset
|
1582 f.write(b"2") |
|
cf2010e9f941
Issue #12213: Fix a buffering bug with interleaved reads and writes that
Antoine Pitrou <solipsis@pitrou.net>
parents:
71299
diff
changeset
|
1583 self.assertEqual(f.read(1), b'c') |
|
cf2010e9f941
Issue #12213: Fix a buffering bug with interleaved reads and writes that
Antoine Pitrou <solipsis@pitrou.net>
parents:
71299
diff
changeset
|
1584 f.flush() |
|
cf2010e9f941
Issue #12213: Fix a buffering bug with interleaved reads and writes that
Antoine Pitrou <solipsis@pitrou.net>
parents:
71299
diff
changeset
|
1585 self.assertEqual(raw.getvalue(), b'a2c') |
|
cf2010e9f941
Issue #12213: Fix a buffering bug with interleaved reads and writes that
Antoine Pitrou <solipsis@pitrou.net>
parents:
71299
diff
changeset
|
1586 |
|
cf2010e9f941
Issue #12213: Fix a buffering bug with interleaved reads and writes that
Antoine Pitrou <solipsis@pitrou.net>
parents:
71299
diff
changeset
|
1587 def test_interleaved_readline_write(self): |
|
cf2010e9f941
Issue #12213: Fix a buffering bug with interleaved reads and writes that
Antoine Pitrou <solipsis@pitrou.net>
parents:
71299
diff
changeset
|
1588 with self.BytesIO(b'ab\ncdef\ng\n') as raw: |
|
cf2010e9f941
Issue #12213: Fix a buffering bug with interleaved reads and writes that
Antoine Pitrou <solipsis@pitrou.net>
parents:
71299
diff
changeset
|
1589 with self.tp(raw) as f: |
|
cf2010e9f941
Issue #12213: Fix a buffering bug with interleaved reads and writes that
Antoine Pitrou <solipsis@pitrou.net>
parents:
71299
diff
changeset
|
1590 f.write(b'1') |
|
cf2010e9f941
Issue #12213: Fix a buffering bug with interleaved reads and writes that
Antoine Pitrou <solipsis@pitrou.net>
parents:
71299
diff
changeset
|
1591 self.assertEqual(f.readline(), b'b\n') |
|
cf2010e9f941
Issue #12213: Fix a buffering bug with interleaved reads and writes that
Antoine Pitrou <solipsis@pitrou.net>
parents:
71299
diff
changeset
|
1592 f.write(b'2') |
|
cf2010e9f941
Issue #12213: Fix a buffering bug with interleaved reads and writes that
Antoine Pitrou <solipsis@pitrou.net>
parents:
71299
diff
changeset
|
1593 self.assertEqual(f.readline(), b'def\n') |
|
cf2010e9f941
Issue #12213: Fix a buffering bug with interleaved reads and writes that
Antoine Pitrou <solipsis@pitrou.net>
parents:
71299
diff
changeset
|
1594 f.write(b'3') |
|
cf2010e9f941
Issue #12213: Fix a buffering bug with interleaved reads and writes that
Antoine Pitrou <solipsis@pitrou.net>
parents:
71299
diff
changeset
|
1595 self.assertEqual(f.readline(), b'\n') |
|
cf2010e9f941
Issue #12213: Fix a buffering bug with interleaved reads and writes that
Antoine Pitrou <solipsis@pitrou.net>
parents:
71299
diff
changeset
|
1596 f.flush() |
|
cf2010e9f941
Issue #12213: Fix a buffering bug with interleaved reads and writes that
Antoine Pitrou <solipsis@pitrou.net>
parents:
71299
diff
changeset
|
1597 self.assertEqual(raw.getvalue(), b'1b\n2def\n3\n') |
|
cf2010e9f941
Issue #12213: Fix a buffering bug with interleaved reads and writes that
Antoine Pitrou <solipsis@pitrou.net>
parents:
71299
diff
changeset
|
1598 |
|
78320
1102e86b8739
Issue #15487: Add a __sizeof__ implementation for buffered I/O objects.
Antoine Pitrou <solipsis@pitrou.net>
parents:
77134
diff
changeset
|
1599 class CBufferedRandomTest(CBufferedReaderTest, CBufferedWriterTest, |
|
1102e86b8739
Issue #15487: Add a __sizeof__ implementation for buffered I/O objects.
Antoine Pitrou <solipsis@pitrou.net>
parents:
77134
diff
changeset
|
1600 BufferedRandomTest, SizeofTest): |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1601 tp = io.BufferedRandom |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1602 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1603 def test_constructor(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1604 BufferedRandomTest.test_constructor(self) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1605 # The allocation can succeed on 32-bit builds, e.g. with more |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1606 # than 2GB RAM and a 64-bit kernel. |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1607 if sys.maxsize > 0x7FFFFFFF: |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1608 rawio = self.MockRawIO() |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1609 bufio = self.tp(rawio) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1610 self.assertRaises((OverflowError, MemoryError, ValueError), |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1611 bufio.__init__, rawio, sys.maxsize) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1612 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1613 def test_garbage_collection(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1614 CBufferedReaderTest.test_garbage_collection(self) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1615 CBufferedWriterTest.test_garbage_collection(self) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1616 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1617 class PyBufferedRandomTest(BufferedRandomTest): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1618 tp = pyio.BufferedRandom |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1619 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1620 |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1621 # To fully exercise seek/tell, the StatefulIncrementalDecoder has these |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1622 # properties: |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1623 # - A single output character can correspond to many bytes of input. |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1624 # - The number of input bytes to complete the character can be |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1625 # undetermined until the last input byte is received. |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1626 # - The number of input bytes can vary depending on previous input. |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1627 # - A single input byte can correspond to many characters of output. |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1628 # - The number of output characters can be undetermined until the |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1629 # last input byte is received. |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1630 # - The number of output characters can vary depending on previous input. |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1631 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1632 class StatefulIncrementalDecoder(codecs.IncrementalDecoder): |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1633 """ |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1634 For testing seek/tell behavior with a stateful, buffering decoder. |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1635 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1636 Input is a sequence of words. Words may be fixed-length (length set |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1637 by input) or variable-length (period-terminated). In variable-length |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1638 mode, extra periods are ignored. Possible words are: |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1639 - 'i' followed by a number sets the input length, I (maximum 99). |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1640 When I is set to 0, words are space-terminated. |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1641 - 'o' followed by a number sets the output length, O (maximum 99). |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1642 - Any other word is converted into a word followed by a period on |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1643 the output. The output word consists of the input word truncated |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1644 or padded out with hyphens to make its length equal to O. If O |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1645 is 0, the word is output verbatim without truncating or padding. |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1646 I and O are initially set to 1. When I changes, any buffered input is |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1647 re-scanned according to the new I. EOF also terminates the last word. |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1648 """ |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1649 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1650 def __init__(self, errors='strict'): |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1651 codecs.IncrementalDecoder.__init__(self, errors) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1652 self.reset() |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1653 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1654 def __repr__(self): |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1655 return '<SID %x>' % id(self) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1656 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1657 def reset(self): |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1658 self.i = 1 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1659 self.o = 1 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1660 self.buffer = bytearray() |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1661 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1662 def getstate(self): |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1663 i, o = self.i ^ 1, self.o ^ 1 # so that flags = 0 after reset() |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1664 return bytes(self.buffer), i*100 + o |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1665 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1666 def setstate(self, state): |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1667 buffer, io = state |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1668 self.buffer = bytearray(buffer) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1669 i, o = divmod(io, 100) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1670 self.i, self.o = i ^ 1, o ^ 1 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1671 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1672 def decode(self, input, final=False): |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1673 output = '' |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1674 for b in input: |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1675 if self.i == 0: # variable-length, terminated with period |
|
46244
4779e3496ae1
Fix and enable a skipped test:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
46124
diff
changeset
|
1676 if b == '.': |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1677 if self.buffer: |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1678 output += self.process_word() |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1679 else: |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1680 self.buffer.append(b) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1681 else: # fixed-length, terminate after self.i bytes |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1682 self.buffer.append(b) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1683 if len(self.buffer) == self.i: |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1684 output += self.process_word() |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1685 if final and self.buffer: # EOF terminates the last word |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1686 output += self.process_word() |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1687 return output |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1688 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1689 def process_word(self): |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1690 output = '' |
|
46641
bfa82b493335
In test_io, StatefulIncrementalDecoderTest was not part of the test suite.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
46245
diff
changeset
|
1691 if self.buffer[0] == ord('i'): |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1692 self.i = min(99, int(self.buffer[1:] or 0)) # set input length |
|
46641
bfa82b493335
In test_io, StatefulIncrementalDecoderTest was not part of the test suite.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
46245
diff
changeset
|
1693 elif self.buffer[0] == ord('o'): |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1694 self.o = min(99, int(self.buffer[1:] or 0)) # set output length |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1695 else: |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1696 output = self.buffer.decode('ascii') |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1697 if len(output) < self.o: |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1698 output += '-'*self.o # pad out with hyphens |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1699 if self.o: |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1700 output = output[:self.o] # truncate to output length |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1701 output += '.' |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1702 self.buffer = bytearray() |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1703 return output |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1704 |
|
46245
0730f3d50cdc
Newly enabled test appears to leak:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
46244
diff
changeset
|
1705 codecEnabled = False |
|
0730f3d50cdc
Newly enabled test appears to leak:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
46244
diff
changeset
|
1706 |
|
0730f3d50cdc
Newly enabled test appears to leak:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
46244
diff
changeset
|
1707 @classmethod |
|
0730f3d50cdc
Newly enabled test appears to leak:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
46244
diff
changeset
|
1708 def lookupTestDecoder(cls, name): |
|
0730f3d50cdc
Newly enabled test appears to leak:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
46244
diff
changeset
|
1709 if cls.codecEnabled and name == 'test_decoder': |
|
50171
d15746abf6c7
Merged revisions 67762 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50008
diff
changeset
|
1710 latin1 = codecs.lookup('latin-1') |
|
46245
0730f3d50cdc
Newly enabled test appears to leak:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
46244
diff
changeset
|
1711 return codecs.CodecInfo( |
|
50171
d15746abf6c7
Merged revisions 67762 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50008
diff
changeset
|
1712 name='test_decoder', encode=latin1.encode, decode=None, |
|
46245
0730f3d50cdc
Newly enabled test appears to leak:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
46244
diff
changeset
|
1713 incrementalencoder=None, |
|
0730f3d50cdc
Newly enabled test appears to leak:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
46244
diff
changeset
|
1714 streamreader=None, streamwriter=None, |
|
0730f3d50cdc
Newly enabled test appears to leak:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
46244
diff
changeset
|
1715 incrementaldecoder=cls) |
|
0730f3d50cdc
Newly enabled test appears to leak:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
46244
diff
changeset
|
1716 |
|
0730f3d50cdc
Newly enabled test appears to leak:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
46244
diff
changeset
|
1717 # Register the previous decoder for testing. |
|
0730f3d50cdc
Newly enabled test appears to leak:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
46244
diff
changeset
|
1718 # Disabled by default, tests will enable it. |
|
0730f3d50cdc
Newly enabled test appears to leak:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
46244
diff
changeset
|
1719 codecs.register(StatefulIncrementalDecoder.lookupTestDecoder) |
|
0730f3d50cdc
Newly enabled test appears to leak:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
46244
diff
changeset
|
1720 |
|
0730f3d50cdc
Newly enabled test appears to leak:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
46244
diff
changeset
|
1721 |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1722 class StatefulIncrementalDecoderTest(unittest.TestCase): |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1723 """ |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1724 Make sure the StatefulIncrementalDecoder actually works. |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1725 """ |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1726 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1727 test_cases = [ |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1728 # I=1, O=1 (fixed-length input == fixed-length output) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1729 (b'abcd', False, 'a.b.c.d.'), |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1730 # I=0, O=0 (variable-length input, variable-length output) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1731 (b'oiabcd', True, 'abcd.'), |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1732 # I=0, O=0 (should ignore extra periods) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1733 (b'oi...abcd...', True, 'abcd.'), |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1734 # I=0, O=6 (variable-length input, fixed-length output) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1735 (b'i.o6.x.xyz.toolongtofit.', False, 'x-----.xyz---.toolon.'), |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1736 # I=2, O=6 (fixed-length input < fixed-length output) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1737 (b'i.i2.o6xyz', True, 'xy----.z-----.'), |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1738 # I=6, O=3 (fixed-length input > fixed-length output) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1739 (b'i.o3.i6.abcdefghijklmnop', True, 'abc.ghi.mno.'), |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1740 # I=0, then 3; O=29, then 15 (with longer output) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1741 (b'i.o29.a.b.cde.o15.abcdefghijabcdefghij.i3.a.b.c.d.ei00k.l.m', True, |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1742 'a----------------------------.' + |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1743 'b----------------------------.' + |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1744 'cde--------------------------.' + |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1745 'abcdefghijabcde.' + |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1746 'a.b------------.' + |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1747 '.c.------------.' + |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1748 'd.e------------.' + |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1749 'k--------------.' + |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1750 'l--------------.' + |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1751 'm--------------.') |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1752 ] |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1753 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1754 def test_decoder(self): |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1755 # Try a few one-shot test cases. |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1756 for input, eof, output in self.test_cases: |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1757 d = StatefulIncrementalDecoder() |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
1758 self.assertEqual(d.decode(input, eof), output) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1759 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1760 # Also test an unfinished decode, followed by forcing EOF. |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1761 d = StatefulIncrementalDecoder() |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
1762 self.assertEqual(d.decode(b'oiabcd'), '') |
|
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
1763 self.assertEqual(d.decode(b'', 1), 'abcd.') |
|
63262
315c2b524c59
Issue #5006: Better handling of unicode byte-order marks (BOM) in the io
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61606
diff
changeset
|
1764 |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1765 class TextIOWrapperTest(unittest.TestCase): |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1766 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1767 def setUp(self): |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1768 self.testdata = b"AAA\r\nBBB\rCCC\r\nDDD\nEEE\r\n" |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1769 self.normalized = b"AAA\nBBB\nCCC\nDDD\nEEE\n".decode("ascii") |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1770 support.unlink(support.TESTFN) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1771 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1772 def tearDown(self): |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1773 support.unlink(support.TESTFN) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1774 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1775 def test_constructor(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1776 r = self.BytesIO(b"\xc3\xa9\n\n") |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1777 b = self.BufferedReader(r, 1000) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1778 t = self.TextIOWrapper(b) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1779 t.__init__(b, encoding="latin1", newline="\r\n") |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
1780 self.assertEqual(t.encoding, "latin1") |
|
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
1781 self.assertEqual(t.line_buffering, False) |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1782 t.__init__(b, encoding="utf8", line_buffering=True) |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
1783 self.assertEqual(t.encoding, "utf8") |
|
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
1784 self.assertEqual(t.line_buffering, True) |
|
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
1785 self.assertEqual("\xe9\n", t.readline()) |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1786 self.assertRaises(TypeError, t.__init__, b, newline=42) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1787 self.assertRaises(ValueError, t.__init__, b, newline='xyzzy') |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1788 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1789 def test_detach(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1790 r = self.BytesIO() |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1791 b = self.BufferedWriter(r) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1792 t = self.TextIOWrapper(b) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1793 self.assertIs(t.detach(), b) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1794 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1795 t = self.TextIOWrapper(b, encoding="ascii") |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1796 t.write("howdy") |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1797 self.assertFalse(r.getvalue()) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1798 t.detach() |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1799 self.assertEqual(r.getvalue(), b"howdy") |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1800 self.assertRaises(ValueError, t.detach) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1801 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1802 def test_repr(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1803 raw = self.BytesIO("hello".encode("utf-8")) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1804 b = self.BufferedReader(raw) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1805 t = self.TextIOWrapper(b, encoding="utf-8") |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1806 modname = self.TextIOWrapper.__module__ |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1807 self.assertEqual(repr(t), |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1808 "<%s.TextIOWrapper encoding='utf-8'>" % modname) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1809 raw.name = "dummy" |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1810 self.assertEqual(repr(t), |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1811 "<%s.TextIOWrapper name=u'dummy' encoding='utf-8'>" % modname) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1812 raw.name = b"dummy" |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1813 self.assertEqual(repr(t), |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1814 "<%s.TextIOWrapper name='dummy' encoding='utf-8'>" % modname) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1815 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1816 def test_line_buffering(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1817 r = self.BytesIO() |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1818 b = self.BufferedWriter(r, 1000) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1819 t = self.TextIOWrapper(b, newline="\n", line_buffering=True) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1820 t.write("X") |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
1821 self.assertEqual(r.getvalue(), b"") # No flush happened |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1822 t.write("Y\nZ") |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
1823 self.assertEqual(r.getvalue(), b"XY\nZ") # All got flushed |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1824 t.write("A\rB") |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
1825 self.assertEqual(r.getvalue(), b"XY\nZA\rB") |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1826 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1827 def test_encoding(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1828 # Check the encoding attribute is always set, and valid |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1829 b = self.BytesIO() |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1830 t = self.TextIOWrapper(b, encoding="utf8") |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1831 self.assertEqual(t.encoding, "utf8") |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1832 t = self.TextIOWrapper(b) |
|
55002
6768b2350c57
convert usage of fail* to assert*
Benjamin Peterson <benjamin@python.org>
parents:
54781
diff
changeset
|
1833 self.assertTrue(t.encoding is not None) |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1834 codecs.lookup(t.encoding) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1835 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1836 def test_encoding_errors_reading(self): |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1837 # (1) default |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1838 b = self.BytesIO(b"abc\n\xff\n") |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1839 t = self.TextIOWrapper(b, encoding="ascii") |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1840 self.assertRaises(UnicodeError, t.read) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1841 # (2) explicit strict |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1842 b = self.BytesIO(b"abc\n\xff\n") |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1843 t = self.TextIOWrapper(b, encoding="ascii", errors="strict") |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1844 self.assertRaises(UnicodeError, t.read) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1845 # (3) ignore |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1846 b = self.BytesIO(b"abc\n\xff\n") |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1847 t = self.TextIOWrapper(b, encoding="ascii", errors="ignore") |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
1848 self.assertEqual(t.read(), "abc\n\n") |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1849 # (4) replace |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1850 b = self.BytesIO(b"abc\n\xff\n") |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1851 t = self.TextIOWrapper(b, encoding="ascii", errors="replace") |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
1852 self.assertEqual(t.read(), "abc\n\ufffd\n") |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1853 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1854 def test_encoding_errors_writing(self): |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1855 # (1) default |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1856 b = self.BytesIO() |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1857 t = self.TextIOWrapper(b, encoding="ascii") |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1858 self.assertRaises(UnicodeError, t.write, "\xff") |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1859 # (2) explicit strict |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1860 b = self.BytesIO() |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1861 t = self.TextIOWrapper(b, encoding="ascii", errors="strict") |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1862 self.assertRaises(UnicodeError, t.write, "\xff") |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1863 # (3) ignore |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1864 b = self.BytesIO() |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1865 t = self.TextIOWrapper(b, encoding="ascii", errors="ignore", |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1866 newline="\n") |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1867 t.write("abc\xffdef\n") |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1868 t.flush() |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
1869 self.assertEqual(b.getvalue(), b"abcdef\n") |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1870 # (4) replace |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1871 b = self.BytesIO() |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1872 t = self.TextIOWrapper(b, encoding="ascii", errors="replace", |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1873 newline="\n") |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1874 t.write("abc\xffdef\n") |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1875 t.flush() |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
1876 self.assertEqual(b.getvalue(), b"abc?def\n") |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1877 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1878 def test_newlines(self): |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1879 input_lines = [ "unix\n", "windows\r\n", "os9\r", "last\n", "nonl" ] |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1880 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1881 tests = [ |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1882 [ None, [ 'unix\n', 'windows\n', 'os9\n', 'last\n', 'nonl' ] ], |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1883 [ '', input_lines ], |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1884 [ '\n', [ "unix\n", "windows\r\n", "os9\rlast\n", "nonl" ] ], |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1885 [ '\r\n', [ "unix\nwindows\r\n", "os9\rlast\nnonl" ] ], |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1886 [ '\r', [ "unix\nwindows\r", "\nos9\r", "last\nnonl" ] ], |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1887 ] |
|
50171
d15746abf6c7
Merged revisions 67762 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50008
diff
changeset
|
1888 encodings = ( |
|
d15746abf6c7
Merged revisions 67762 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50008
diff
changeset
|
1889 'utf-8', 'latin-1', |
|
d15746abf6c7
Merged revisions 67762 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50008
diff
changeset
|
1890 'utf-16', 'utf-16-le', 'utf-16-be', |
|
d15746abf6c7
Merged revisions 67762 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50008
diff
changeset
|
1891 'utf-32', 'utf-32-le', 'utf-32-be', |
|
d15746abf6c7
Merged revisions 67762 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50008
diff
changeset
|
1892 ) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1893 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1894 # Try a range of buffer sizes to test the case where \r is the last |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1895 # character in TextIOWrapper._pending_line. |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1896 for encoding in encodings: |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1897 # XXX: str.encode() should return bytes |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1898 data = bytes(''.join(input_lines).encode(encoding)) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1899 for do_reads in (False, True): |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1900 for bufsize in range(1, 10): |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1901 for newline, exp_lines in tests: |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1902 bufio = self.BufferedReader(self.BytesIO(data), bufsize) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1903 textio = self.TextIOWrapper(bufio, newline=newline, |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1904 encoding=encoding) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1905 if do_reads: |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1906 got_lines = [] |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1907 while True: |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1908 c2 = textio.read(2) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1909 if c2 == '': |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1910 break |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
1911 self.assertEqual(len(c2), 2) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1912 got_lines.append(c2 + textio.readline()) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1913 else: |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1914 got_lines = list(textio) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1915 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1916 for got_line, exp_line in zip(got_lines, exp_lines): |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
1917 self.assertEqual(got_line, exp_line) |
|
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
1918 self.assertEqual(len(got_lines), len(exp_lines)) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1919 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1920 def test_newlines_input(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1921 testdata = b"AAA\nBB\x00B\nCCC\rDDD\rEEE\r\nFFF\r\nGGG" |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1922 normalized = testdata.replace(b"\r\n", b"\n").replace(b"\r", b"\n") |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1923 for newline, expected in [ |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1924 (None, normalized.decode("ascii").splitlines(True)), |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1925 ("", testdata.decode("ascii").splitlines(True)), |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1926 ("\n", ["AAA\n", "BB\x00B\n", "CCC\rDDD\rEEE\r\n", "FFF\r\n", "GGG"]), |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1927 ("\r\n", ["AAA\nBB\x00B\nCCC\rDDD\rEEE\r\n", "FFF\r\n", "GGG"]), |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1928 ("\r", ["AAA\nBB\x00B\nCCC\r", "DDD\r", "EEE\r", "\nFFF\r", "\nGGG"]), |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1929 ]: |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1930 buf = self.BytesIO(testdata) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1931 txt = self.TextIOWrapper(buf, encoding="ascii", newline=newline) |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
1932 self.assertEqual(txt.readlines(), expected) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1933 txt.seek(0) |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
1934 self.assertEqual(txt.read(), "".join(expected)) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1935 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1936 def test_newlines_output(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1937 testdict = { |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1938 "": b"AAA\nBBB\nCCC\nX\rY\r\nZ", |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1939 "\n": b"AAA\nBBB\nCCC\nX\rY\r\nZ", |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1940 "\r": b"AAA\rBBB\rCCC\rX\rY\r\rZ", |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1941 "\r\n": b"AAA\r\nBBB\r\nCCC\r\nX\rY\r\r\nZ", |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1942 } |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1943 tests = [(None, testdict[os.linesep])] + sorted(testdict.items()) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1944 for newline, expected in tests: |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1945 buf = self.BytesIO() |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1946 txt = self.TextIOWrapper(buf, encoding="ascii", newline=newline) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1947 txt.write("AAA\nB") |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1948 txt.write("BB\nCCC\n") |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1949 txt.write("X\rY\r\nZ") |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1950 txt.flush() |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
1951 self.assertEqual(buf.closed, False) |
|
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
1952 self.assertEqual(buf.getvalue(), expected) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1953 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1954 def test_destructor(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1955 l = [] |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1956 base = self.BytesIO |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1957 class MyBytesIO(base): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1958 def close(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1959 l.append(self.getvalue()) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1960 base.close(self) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1961 b = MyBytesIO() |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1962 t = self.TextIOWrapper(b, encoding="ascii") |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1963 t.write("abc") |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1964 del t |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1965 support.gc_collect() |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
1966 self.assertEqual([b"abc"], l) |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1967 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1968 def test_override_destructor(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1969 record = [] |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1970 class MyTextIO(self.TextIOWrapper): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1971 def __del__(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1972 record.append(1) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1973 try: |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1974 f = super(MyTextIO, self).__del__ |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1975 except AttributeError: |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1976 pass |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1977 else: |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1978 f() |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1979 def close(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1980 record.append(2) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1981 super(MyTextIO, self).close() |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1982 def flush(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1983 record.append(3) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1984 super(MyTextIO, self).flush() |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1985 b = self.BytesIO() |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1986 t = MyTextIO(b, encoding="ascii") |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1987 del t |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1988 support.gc_collect() |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1989 self.assertEqual(record, [1, 2, 3]) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1990 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1991 def test_error_through_destructor(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1992 # Test that the exception state is not modified by a destructor, |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1993 # even if close() fails. |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1994 rawio = self.CloseFailureIO() |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1995 def f(): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1996 self.TextIOWrapper(rawio).xyzzy |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1997 with support.captured_output("stderr") as s: |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1998 self.assertRaises(AttributeError, f) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
1999 s = s.getvalue().strip() |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2000 if s: |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2001 # The destructor *may* have printed an unraisable error, check it |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2002 self.assertEqual(len(s.splitlines()), 1) |
|
55002
6768b2350c57
convert usage of fail* to assert*
Benjamin Peterson <benjamin@python.org>
parents:
54781
diff
changeset
|
2003 self.assertTrue(s.startswith("Exception IOError: "), s) |
|
6768b2350c57
convert usage of fail* to assert*
Benjamin Peterson <benjamin@python.org>
parents:
54781
diff
changeset
|
2004 self.assertTrue(s.endswith(" ignored"), s) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2005 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2006 # Systematic tests of the text I/O API |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2007 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2008 def test_basic_io(self): |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2009 for chunksize in (1, 2, 3, 4, 5, 15, 16, 17, 31, 32, 33, 63, 64, 65): |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2010 for enc in "ascii", "latin1", "utf8" :# , "utf-16-be", "utf-16-le": |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2011 f = self.open(support.TESTFN, "w+", encoding=enc) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2012 f._CHUNK_SIZE = chunksize |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
2013 self.assertEqual(f.write("abc"), 3) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2014 f.close() |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2015 f = self.open(support.TESTFN, "r+", encoding=enc) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2016 f._CHUNK_SIZE = chunksize |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
2017 self.assertEqual(f.tell(), 0) |
|
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
2018 self.assertEqual(f.read(), "abc") |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2019 cookie = f.tell() |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
2020 self.assertEqual(f.seek(0), 0) |
|
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
2021 self.assertEqual(f.read(None), "abc") |
|
57703
54f84558ad2b
accept None as the same as having passed no argument in file types #7349
Benjamin Peterson <benjamin@python.org>
parents:
55756
diff
changeset
|
2022 f.seek(0) |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
2023 self.assertEqual(f.read(2), "ab") |
|
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
2024 self.assertEqual(f.read(1), "c") |
|
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
2025 self.assertEqual(f.read(1), "") |
|
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
2026 self.assertEqual(f.read(), "") |
|
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
2027 self.assertEqual(f.tell(), cookie) |
|
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
2028 self.assertEqual(f.seek(0), 0) |
|
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
2029 self.assertEqual(f.seek(0, 2), cookie) |
|
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
2030 self.assertEqual(f.write("def"), 3) |
|
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
2031 self.assertEqual(f.seek(cookie), cookie) |
|
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
2032 self.assertEqual(f.read(), "def") |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2033 if enc.startswith("utf"): |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2034 self.multi_line_test(f, enc) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2035 f.close() |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2036 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2037 def multi_line_test(self, f, enc): |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2038 f.seek(0) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2039 f.truncate() |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2040 sample = "s\xff\u0fff\uffff" |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2041 wlines = [] |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2042 for size in (0, 1, 2, 3, 4, 5, 30, 31, 32, 33, 62, 63, 64, 65, 1000): |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2043 chars = [] |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2044 for i in range(size): |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2045 chars.append(sample[i % len(sample)]) |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2046 line = "".join(chars) + "\n" |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2047 wlines.append((f.tell(), line)) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2048 f.write(line) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2049 f.seek(0) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2050 rlines = [] |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2051 while True: |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2052 pos = f.tell() |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2053 line = f.readline() |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2054 if not line: |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2055 break |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2056 rlines.append((pos, line)) |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
2057 self.assertEqual(rlines, wlines) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2058 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2059 def test_telling(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2060 f = self.open(support.TESTFN, "w+", encoding="utf8") |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2061 p0 = f.tell() |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2062 f.write("\xff\n") |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2063 p1 = f.tell() |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2064 f.write("\xff\n") |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2065 p2 = f.tell() |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2066 f.seek(0) |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
2067 self.assertEqual(f.tell(), p0) |
|
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
2068 self.assertEqual(f.readline(), "\xff\n") |
|
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
2069 self.assertEqual(f.tell(), p1) |
|
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
2070 self.assertEqual(f.readline(), "\xff\n") |
|
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
2071 self.assertEqual(f.tell(), p2) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2072 f.seek(0) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2073 for line in f: |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
2074 self.assertEqual(line, "\xff\n") |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2075 self.assertRaises(IOError, f.tell) |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
2076 self.assertEqual(f.tell(), p2) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2077 f.close() |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2078 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2079 def test_seeking(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2080 chunk_size = _default_chunk_size() |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2081 prefix_size = chunk_size - 2 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2082 u_prefix = "a" * prefix_size |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2083 prefix = bytes(u_prefix.encode("utf-8")) |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
2084 self.assertEqual(len(u_prefix), len(prefix)) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2085 u_suffix = "\u8888\n" |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2086 suffix = bytes(u_suffix.encode("utf-8")) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2087 line = prefix + suffix |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2088 f = self.open(support.TESTFN, "wb") |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2089 f.write(line*2) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2090 f.close() |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2091 f = self.open(support.TESTFN, "r", encoding="utf-8") |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2092 s = f.read(prefix_size) |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
2093 self.assertEqual(s, prefix.decode("ascii")) |
|
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
2094 self.assertEqual(f.tell(), prefix_size) |
|
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
2095 self.assertEqual(f.readline(), u_suffix) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2096 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2097 def test_seeking_too(self): |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2098 # Regression test for a specific bug |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2099 data = b'\xe0\xbf\xbf\n' |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2100 f = self.open(support.TESTFN, "wb") |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2101 f.write(data) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2102 f.close() |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2103 f = self.open(support.TESTFN, "r", encoding="utf-8") |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2104 f._CHUNK_SIZE # Just test that it exists |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2105 f._CHUNK_SIZE = 2 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2106 f.readline() |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2107 f.tell() |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2108 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2109 def test_seek_and_tell(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2110 #Test seek/tell using the StatefulIncrementalDecoder. |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2111 # Make test faster by doing smaller seeks |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2112 CHUNK_SIZE = 128 |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2113 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2114 def test_seek_and_tell_with_data(data, min_pos=0): |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2115 """Tell/seek to various points within a data stream and ensure |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2116 that the decoded data returned by read() is consistent.""" |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2117 f = self.open(support.TESTFN, 'wb') |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2118 f.write(data) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2119 f.close() |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2120 f = self.open(support.TESTFN, encoding='test_decoder') |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2121 f._CHUNK_SIZE = CHUNK_SIZE |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2122 decoded = f.read() |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2123 f.close() |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2124 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2125 for i in range(min_pos, len(decoded) + 1): # seek positions |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2126 for j in [1, 5, len(decoded) - i]: # read lengths |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2127 f = self.open(support.TESTFN, encoding='test_decoder') |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
2128 self.assertEqual(f.read(i), decoded[:i]) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2129 cookie = f.tell() |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
2130 self.assertEqual(f.read(j), decoded[i:i + j]) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2131 f.seek(cookie) |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
2132 self.assertEqual(f.read(), decoded[i:]) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2133 f.close() |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2134 |
|
46245
0730f3d50cdc
Newly enabled test appears to leak:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
46244
diff
changeset
|
2135 # Enable the test decoder. |
|
0730f3d50cdc
Newly enabled test appears to leak:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
46244
diff
changeset
|
2136 StatefulIncrementalDecoder.codecEnabled = 1 |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2137 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2138 # Run the tests. |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2139 try: |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2140 # Try each test case. |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2141 for input, _, _ in StatefulIncrementalDecoderTest.test_cases: |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2142 test_seek_and_tell_with_data(input) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2143 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2144 # Position each test case so that it crosses a chunk boundary. |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2145 for input, _, _ in StatefulIncrementalDecoderTest.test_cases: |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2146 offset = CHUNK_SIZE - len(input)//2 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2147 prefix = b'.'*offset |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2148 # Don't bother seeking into the prefix (takes too long). |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2149 min_pos = offset*2 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2150 test_seek_and_tell_with_data(prefix + input, min_pos) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2151 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2152 # Ensure our test decoder won't interfere with subsequent tests. |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2153 finally: |
|
46245
0730f3d50cdc
Newly enabled test appears to leak:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
46244
diff
changeset
|
2154 StatefulIncrementalDecoder.codecEnabled = 0 |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2155 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2156 def test_encoded_writes(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2157 data = "1234567890" |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2158 tests = ("utf-16", |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2159 "utf-16-le", |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2160 "utf-16-be", |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2161 "utf-32", |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2162 "utf-32-le", |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2163 "utf-32-be") |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2164 for encoding in tests: |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2165 buf = self.BytesIO() |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2166 f = self.TextIOWrapper(buf, encoding=encoding) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2167 # Check if the BOM is written only once (see issue1753). |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2168 f.write(data) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2169 f.write(data) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2170 f.seek(0) |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
2171 self.assertEqual(f.read(), data * 2) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2172 f.seek(0) |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
2173 self.assertEqual(f.read(), data * 2) |
|
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
2174 self.assertEqual(buf.getvalue(), (data * 2).encode(encoding)) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2175 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2176 def test_unreadable(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2177 class UnReadable(self.BytesIO): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2178 def readable(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2179 return False |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2180 txt = self.TextIOWrapper(UnReadable()) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2181 self.assertRaises(IOError, txt.read) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2182 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2183 def test_read_one_by_one(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2184 txt = self.TextIOWrapper(self.BytesIO(b"AA\r\nBB")) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2185 reads = "" |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2186 while True: |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2187 c = txt.read(1) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2188 if not c: |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2189 break |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2190 reads += c |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
2191 self.assertEqual(reads, "AA\nBB") |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2192 |
|
57703
54f84558ad2b
accept None as the same as having passed no argument in file types #7349
Benjamin Peterson <benjamin@python.org>
parents:
55756
diff
changeset
|
2193 def test_readlines(self): |
|
54f84558ad2b
accept None as the same as having passed no argument in file types #7349
Benjamin Peterson <benjamin@python.org>
parents:
55756
diff
changeset
|
2194 txt = self.TextIOWrapper(self.BytesIO(b"AA\nBB\nCC")) |
|
54f84558ad2b
accept None as the same as having passed no argument in file types #7349
Benjamin Peterson <benjamin@python.org>
parents:
55756
diff
changeset
|
2195 self.assertEqual(txt.readlines(), ["AA\n", "BB\n", "CC"]) |
|
54f84558ad2b
accept None as the same as having passed no argument in file types #7349
Benjamin Peterson <benjamin@python.org>
parents:
55756
diff
changeset
|
2196 txt.seek(0) |
|
54f84558ad2b
accept None as the same as having passed no argument in file types #7349
Benjamin Peterson <benjamin@python.org>
parents:
55756
diff
changeset
|
2197 self.assertEqual(txt.readlines(None), ["AA\n", "BB\n", "CC"]) |
|
54f84558ad2b
accept None as the same as having passed no argument in file types #7349
Benjamin Peterson <benjamin@python.org>
parents:
55756
diff
changeset
|
2198 txt.seek(0) |
|
54f84558ad2b
accept None as the same as having passed no argument in file types #7349
Benjamin Peterson <benjamin@python.org>
parents:
55756
diff
changeset
|
2199 self.assertEqual(txt.readlines(5), ["AA\n", "BB\n"]) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2200 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2201 # read in amounts equal to TextIOWrapper._CHUNK_SIZE which is 128. |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2202 def test_read_by_chunk(self): |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2203 # make sure "\r\n" straddles 128 char boundary. |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2204 txt = self.TextIOWrapper(self.BytesIO(b"A" * 127 + b"\r\nB")) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2205 reads = "" |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2206 while True: |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2207 c = txt.read(128) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2208 if not c: |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2209 break |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2210 reads += c |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
2211 self.assertEqual(reads, "A"*127+"\nB") |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2212 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2213 def test_issue1395_1(self): |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2214 txt = self.TextIOWrapper(self.BytesIO(self.testdata), encoding="ascii") |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2215 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2216 # read one char at a time |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2217 reads = "" |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2218 while True: |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2219 c = txt.read(1) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2220 if not c: |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2221 break |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2222 reads += c |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
2223 self.assertEqual(reads, self.normalized) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2224 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2225 def test_issue1395_2(self): |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2226 txt = self.TextIOWrapper(self.BytesIO(self.testdata), encoding="ascii") |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2227 txt._CHUNK_SIZE = 4 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2228 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2229 reads = "" |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2230 while True: |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2231 c = txt.read(4) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2232 if not c: |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2233 break |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2234 reads += c |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
2235 self.assertEqual(reads, self.normalized) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2236 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2237 def test_issue1395_3(self): |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2238 txt = self.TextIOWrapper(self.BytesIO(self.testdata), encoding="ascii") |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2239 txt._CHUNK_SIZE = 4 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2240 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2241 reads = txt.read(4) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2242 reads += txt.read(4) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2243 reads += txt.readline() |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2244 reads += txt.readline() |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2245 reads += txt.readline() |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
2246 self.assertEqual(reads, self.normalized) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2247 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2248 def test_issue1395_4(self): |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2249 txt = self.TextIOWrapper(self.BytesIO(self.testdata), encoding="ascii") |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2250 txt._CHUNK_SIZE = 4 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2251 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2252 reads = txt.read(4) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2253 reads += txt.read() |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
2254 self.assertEqual(reads, self.normalized) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2255 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2256 def test_issue1395_5(self): |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2257 txt = self.TextIOWrapper(self.BytesIO(self.testdata), encoding="ascii") |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2258 txt._CHUNK_SIZE = 4 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2259 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2260 reads = txt.read(4) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2261 pos = txt.tell() |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2262 txt.seek(0) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2263 txt.seek(pos) |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
2264 self.assertEqual(txt.read(4), "BBB\n") |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2265 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2266 def test_issue2282(self): |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2267 buffer = self.BytesIO(self.testdata) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2268 txt = self.TextIOWrapper(buffer, encoding="ascii") |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2269 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2270 self.assertEqual(buffer.seekable(), txt.seekable()) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2271 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2272 def test_append_bom(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2273 # The BOM is not written again when appending to a non-empty file |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2274 filename = support.TESTFN |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2275 for charset in ('utf-8-sig', 'utf-16', 'utf-32'): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2276 with self.open(filename, 'w', encoding=charset) as f: |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2277 f.write('aaa') |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2278 pos = f.tell() |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2279 with self.open(filename, 'rb') as f: |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
2280 self.assertEqual(f.read(), 'aaa'.encode(charset)) |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2281 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2282 with self.open(filename, 'a', encoding=charset) as f: |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2283 f.write('xxx') |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2284 with self.open(filename, 'rb') as f: |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
2285 self.assertEqual(f.read(), 'aaaxxx'.encode(charset)) |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2286 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2287 def test_seek_bom(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2288 # Same test, but when seeking manually |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2289 filename = support.TESTFN |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2290 for charset in ('utf-8-sig', 'utf-16', 'utf-32'): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2291 with self.open(filename, 'w', encoding=charset) as f: |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2292 f.write('aaa') |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2293 pos = f.tell() |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2294 with self.open(filename, 'r+', encoding=charset) as f: |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2295 f.seek(pos) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2296 f.write('zzz') |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2297 f.seek(0) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2298 f.write('bbb') |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2299 with self.open(filename, 'rb') as f: |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
2300 self.assertEqual(f.read(), 'bbbzzz'.encode(charset)) |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2301 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2302 def test_errors_property(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2303 with self.open(support.TESTFN, "w") as f: |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2304 self.assertEqual(f.errors, "strict") |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2305 with self.open(support.TESTFN, "w", errors="replace") as f: |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2306 self.assertEqual(f.errors, "replace") |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2307 |
|
61046
3a0484200034
Issue #7449, last part (11): fix many tests if thread support is disabled
Victor Stinner <victor.stinner@haypocalc.com>
parents:
60486
diff
changeset
|
2308 @unittest.skipUnless(threading, 'Threading required for this test.') |
|
55756
d4037fb856d2
#6750: TextIOWrapped could duplicate output when several threads write to it.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
55564
diff
changeset
|
2309 def test_threads_write(self): |
|
d4037fb856d2
#6750: TextIOWrapped could duplicate output when several threads write to it.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
55564
diff
changeset
|
2310 # Issue6750: concurrent writes could duplicate data |
|
d4037fb856d2
#6750: TextIOWrapped could duplicate output when several threads write to it.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
55564
diff
changeset
|
2311 event = threading.Event() |
|
d4037fb856d2
#6750: TextIOWrapped could duplicate output when several threads write to it.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
55564
diff
changeset
|
2312 with self.open(support.TESTFN, "w", buffering=1) as f: |
|
d4037fb856d2
#6750: TextIOWrapped could duplicate output when several threads write to it.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
55564
diff
changeset
|
2313 def run(n): |
|
d4037fb856d2
#6750: TextIOWrapped could duplicate output when several threads write to it.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
55564
diff
changeset
|
2314 text = "Thread%03d\n" % n |
|
d4037fb856d2
#6750: TextIOWrapped could duplicate output when several threads write to it.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
55564
diff
changeset
|
2315 event.wait() |
|
d4037fb856d2
#6750: TextIOWrapped could duplicate output when several threads write to it.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
55564
diff
changeset
|
2316 f.write(text) |
|
d4037fb856d2
#6750: TextIOWrapped could duplicate output when several threads write to it.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
55564
diff
changeset
|
2317 threads = [threading.Thread(target=lambda n=x: run(n)) |
|
d4037fb856d2
#6750: TextIOWrapped could duplicate output when several threads write to it.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
55564
diff
changeset
|
2318 for x in range(20)] |
|
d4037fb856d2
#6750: TextIOWrapped could duplicate output when several threads write to it.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
55564
diff
changeset
|
2319 for t in threads: |
|
d4037fb856d2
#6750: TextIOWrapped could duplicate output when several threads write to it.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
55564
diff
changeset
|
2320 t.start() |
|
d4037fb856d2
#6750: TextIOWrapped could duplicate output when several threads write to it.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
55564
diff
changeset
|
2321 time.sleep(0.02) |
|
d4037fb856d2
#6750: TextIOWrapped could duplicate output when several threads write to it.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
55564
diff
changeset
|
2322 event.set() |
|
d4037fb856d2
#6750: TextIOWrapped could duplicate output when several threads write to it.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
55564
diff
changeset
|
2323 for t in threads: |
|
d4037fb856d2
#6750: TextIOWrapped could duplicate output when several threads write to it.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
55564
diff
changeset
|
2324 t.join() |
|
d4037fb856d2
#6750: TextIOWrapped could duplicate output when several threads write to it.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
55564
diff
changeset
|
2325 with self.open(support.TESTFN) as f: |
|
d4037fb856d2
#6750: TextIOWrapped could duplicate output when several threads write to it.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
55564
diff
changeset
|
2326 content = f.read() |
|
d4037fb856d2
#6750: TextIOWrapped could duplicate output when several threads write to it.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
55564
diff
changeset
|
2327 for n in range(20): |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
2328 self.assertEqual(content.count("Thread%03d\n" % n), 1) |
|
55756
d4037fb856d2
#6750: TextIOWrapped could duplicate output when several threads write to it.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
55564
diff
changeset
|
2329 |
|
61180
9b438bb06d4d
Issue #7865: The close() method of :mod:`io` objects should not swallow
Antoine Pitrou <solipsis@pitrou.net>
parents:
61046
diff
changeset
|
2330 def test_flush_error_on_close(self): |
|
9b438bb06d4d
Issue #7865: The close() method of :mod:`io` objects should not swallow
Antoine Pitrou <solipsis@pitrou.net>
parents:
61046
diff
changeset
|
2331 txt = self.TextIOWrapper(self.BytesIO(self.testdata), encoding="ascii") |
|
9b438bb06d4d
Issue #7865: The close() method of :mod:`io` objects should not swallow
Antoine Pitrou <solipsis@pitrou.net>
parents:
61046
diff
changeset
|
2332 def bad_flush(): |
|
9b438bb06d4d
Issue #7865: The close() method of :mod:`io` objects should not swallow
Antoine Pitrou <solipsis@pitrou.net>
parents:
61046
diff
changeset
|
2333 raise IOError() |
|
9b438bb06d4d
Issue #7865: The close() method of :mod:`io` objects should not swallow
Antoine Pitrou <solipsis@pitrou.net>
parents:
61046
diff
changeset
|
2334 txt.flush = bad_flush |
|
9b438bb06d4d
Issue #7865: The close() method of :mod:`io` objects should not swallow
Antoine Pitrou <solipsis@pitrou.net>
parents:
61046
diff
changeset
|
2335 self.assertRaises(IOError, txt.close) # exception not swallowed |
|
9b438bb06d4d
Issue #7865: The close() method of :mod:`io` objects should not swallow
Antoine Pitrou <solipsis@pitrou.net>
parents:
61046
diff
changeset
|
2336 |
|
9b438bb06d4d
Issue #7865: The close() method of :mod:`io` objects should not swallow
Antoine Pitrou <solipsis@pitrou.net>
parents:
61046
diff
changeset
|
2337 def test_multi_close(self): |
|
9b438bb06d4d
Issue #7865: The close() method of :mod:`io` objects should not swallow
Antoine Pitrou <solipsis@pitrou.net>
parents:
61046
diff
changeset
|
2338 txt = self.TextIOWrapper(self.BytesIO(self.testdata), encoding="ascii") |
|
9b438bb06d4d
Issue #7865: The close() method of :mod:`io` objects should not swallow
Antoine Pitrou <solipsis@pitrou.net>
parents:
61046
diff
changeset
|
2339 txt.close() |
|
9b438bb06d4d
Issue #7865: The close() method of :mod:`io` objects should not swallow
Antoine Pitrou <solipsis@pitrou.net>
parents:
61046
diff
changeset
|
2340 txt.close() |
|
9b438bb06d4d
Issue #7865: The close() method of :mod:`io` objects should not swallow
Antoine Pitrou <solipsis@pitrou.net>
parents:
61046
diff
changeset
|
2341 txt.close() |
|
9b438bb06d4d
Issue #7865: The close() method of :mod:`io` objects should not swallow
Antoine Pitrou <solipsis@pitrou.net>
parents:
61046
diff
changeset
|
2342 self.assertRaises(ValueError, txt.flush) |
|
9b438bb06d4d
Issue #7865: The close() method of :mod:`io` objects should not swallow
Antoine Pitrou <solipsis@pitrou.net>
parents:
61046
diff
changeset
|
2343 |
|
67075
595f258806ef
Merged revisions 87427 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66660
diff
changeset
|
2344 def test_readonly_attributes(self): |
|
595f258806ef
Merged revisions 87427 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66660
diff
changeset
|
2345 txt = self.TextIOWrapper(self.BytesIO(self.testdata), encoding="ascii") |
|
595f258806ef
Merged revisions 87427 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66660
diff
changeset
|
2346 buf = self.BytesIO(self.testdata) |
|
595f258806ef
Merged revisions 87427 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66660
diff
changeset
|
2347 with self.assertRaises((AttributeError, TypeError)): |
|
595f258806ef
Merged revisions 87427 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66660
diff
changeset
|
2348 txt.buffer = buf |
|
595f258806ef
Merged revisions 87427 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66660
diff
changeset
|
2349 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2350 class CTextIOWrapperTest(TextIOWrapperTest): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2351 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2352 def test_initialization(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2353 r = self.BytesIO(b"\xc3\xa9\n\n") |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2354 b = self.BufferedReader(r, 1000) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2355 t = self.TextIOWrapper(b) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2356 self.assertRaises(TypeError, t.__init__, b, newline=42) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2357 self.assertRaises(ValueError, t.read) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2358 self.assertRaises(ValueError, t.__init__, b, newline='xyzzy') |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2359 self.assertRaises(ValueError, t.read) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2360 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2361 def test_garbage_collection(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2362 # C TextIOWrapper objects are collected, and collecting them flushes |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2363 # all data to disk. |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2364 # The Python version has __del__, so it ends in gc.garbage instead. |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2365 rawio = io.FileIO(support.TESTFN, "wb") |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2366 b = self.BufferedWriter(rawio) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2367 t = self.TextIOWrapper(b, encoding="ascii") |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2368 t.write("456def") |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2369 t.x = t |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2370 wr = weakref.ref(t) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2371 del t |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2372 support.gc_collect() |
|
55002
6768b2350c57
convert usage of fail* to assert*
Benjamin Peterson <benjamin@python.org>
parents:
54781
diff
changeset
|
2373 self.assertTrue(wr() is None, wr) |
|
54781
a5f31b30c7c3
Issue #6215: Fixed to use self.open() instead of open() or io.open().
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents:
54717
diff
changeset
|
2374 with self.open(support.TESTFN, "rb") as f: |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2375 self.assertEqual(f.read(), b"456def") |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2376 |
|
72754
89b9e4bf6f1f
Issue #13070: Fix a crash when a TextIOWrapper caught in a reference cycle
Charles-François Natali <neologix@free.fr>
parents:
71984
diff
changeset
|
2377 def test_rwpair_cleared_before_textio(self): |
|
89b9e4bf6f1f
Issue #13070: Fix a crash when a TextIOWrapper caught in a reference cycle
Charles-François Natali <neologix@free.fr>
parents:
71984
diff
changeset
|
2378 # Issue 13070: TextIOWrapper's finalization would crash when called |
|
89b9e4bf6f1f
Issue #13070: Fix a crash when a TextIOWrapper caught in a reference cycle
Charles-François Natali <neologix@free.fr>
parents:
71984
diff
changeset
|
2379 # after the reference to the underlying BufferedRWPair's writer got |
|
89b9e4bf6f1f
Issue #13070: Fix a crash when a TextIOWrapper caught in a reference cycle
Charles-François Natali <neologix@free.fr>
parents:
71984
diff
changeset
|
2380 # cleared by the GC. |
|
89b9e4bf6f1f
Issue #13070: Fix a crash when a TextIOWrapper caught in a reference cycle
Charles-François Natali <neologix@free.fr>
parents:
71984
diff
changeset
|
2381 for i in range(1000): |
|
89b9e4bf6f1f
Issue #13070: Fix a crash when a TextIOWrapper caught in a reference cycle
Charles-François Natali <neologix@free.fr>
parents:
71984
diff
changeset
|
2382 b1 = self.BufferedRWPair(self.MockRawIO(), self.MockRawIO()) |
|
89b9e4bf6f1f
Issue #13070: Fix a crash when a TextIOWrapper caught in a reference cycle
Charles-François Natali <neologix@free.fr>
parents:
71984
diff
changeset
|
2383 t1 = self.TextIOWrapper(b1, encoding="ascii") |
|
89b9e4bf6f1f
Issue #13070: Fix a crash when a TextIOWrapper caught in a reference cycle
Charles-François Natali <neologix@free.fr>
parents:
71984
diff
changeset
|
2384 b2 = self.BufferedRWPair(self.MockRawIO(), self.MockRawIO()) |
|
89b9e4bf6f1f
Issue #13070: Fix a crash when a TextIOWrapper caught in a reference cycle
Charles-François Natali <neologix@free.fr>
parents:
71984
diff
changeset
|
2385 t2 = self.TextIOWrapper(b2, encoding="ascii") |
|
89b9e4bf6f1f
Issue #13070: Fix a crash when a TextIOWrapper caught in a reference cycle
Charles-François Natali <neologix@free.fr>
parents:
71984
diff
changeset
|
2386 # circular references |
|
89b9e4bf6f1f
Issue #13070: Fix a crash when a TextIOWrapper caught in a reference cycle
Charles-François Natali <neologix@free.fr>
parents:
71984
diff
changeset
|
2387 t1.buddy = t2 |
|
89b9e4bf6f1f
Issue #13070: Fix a crash when a TextIOWrapper caught in a reference cycle
Charles-François Natali <neologix@free.fr>
parents:
71984
diff
changeset
|
2388 t2.buddy = t1 |
|
89b9e4bf6f1f
Issue #13070: Fix a crash when a TextIOWrapper caught in a reference cycle
Charles-François Natali <neologix@free.fr>
parents:
71984
diff
changeset
|
2389 support.gc_collect() |
|
89b9e4bf6f1f
Issue #13070: Fix a crash when a TextIOWrapper caught in a reference cycle
Charles-François Natali <neologix@free.fr>
parents:
71984
diff
changeset
|
2390 |
|
89b9e4bf6f1f
Issue #13070: Fix a crash when a TextIOWrapper caught in a reference cycle
Charles-François Natali <neologix@free.fr>
parents:
71984
diff
changeset
|
2391 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2392 class PyTextIOWrapperTest(TextIOWrapperTest): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2393 pass |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2394 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2395 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2396 class IncrementalNewlineDecoderTest(unittest.TestCase): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2397 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2398 def check_newline_decoding_utf8(self, decoder): |
|
50171
d15746abf6c7
Merged revisions 67762 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50008
diff
changeset
|
2399 # UTF-8 specific tests for a newline decoder |
|
d15746abf6c7
Merged revisions 67762 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50008
diff
changeset
|
2400 def _check_decode(b, s, **kwargs): |
|
d15746abf6c7
Merged revisions 67762 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50008
diff
changeset
|
2401 # We exercise getstate() / setstate() as well as decode() |
|
d15746abf6c7
Merged revisions 67762 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50008
diff
changeset
|
2402 state = decoder.getstate() |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
2403 self.assertEqual(decoder.decode(b, **kwargs), s) |
|
50171
d15746abf6c7
Merged revisions 67762 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50008
diff
changeset
|
2404 decoder.setstate(state) |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
2405 self.assertEqual(decoder.decode(b, **kwargs), s) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2406 |
|
50171
d15746abf6c7
Merged revisions 67762 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50008
diff
changeset
|
2407 _check_decode(b'\xe8\xa2\x88', "\u8888") |
|
d15746abf6c7
Merged revisions 67762 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50008
diff
changeset
|
2408 |
|
d15746abf6c7
Merged revisions 67762 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50008
diff
changeset
|
2409 _check_decode(b'\xe8', "") |
|
d15746abf6c7
Merged revisions 67762 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50008
diff
changeset
|
2410 _check_decode(b'\xa2', "") |
|
d15746abf6c7
Merged revisions 67762 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50008
diff
changeset
|
2411 _check_decode(b'\x88', "\u8888") |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2412 |
|
50171
d15746abf6c7
Merged revisions 67762 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50008
diff
changeset
|
2413 _check_decode(b'\xe8', "") |
|
d15746abf6c7
Merged revisions 67762 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50008
diff
changeset
|
2414 _check_decode(b'\xa2', "") |
|
d15746abf6c7
Merged revisions 67762 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50008
diff
changeset
|
2415 _check_decode(b'\x88', "\u8888") |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2416 |
|
50171
d15746abf6c7
Merged revisions 67762 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50008
diff
changeset
|
2417 _check_decode(b'\xe8', "") |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2418 self.assertRaises(UnicodeDecodeError, decoder.decode, b'', final=True) |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2419 |
|
50171
d15746abf6c7
Merged revisions 67762 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50008
diff
changeset
|
2420 decoder.reset() |
|
d15746abf6c7
Merged revisions 67762 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50008
diff
changeset
|
2421 _check_decode(b'\n', "\n") |
|
d15746abf6c7
Merged revisions 67762 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50008
diff
changeset
|
2422 _check_decode(b'\r', "") |
|
d15746abf6c7
Merged revisions 67762 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50008
diff
changeset
|
2423 _check_decode(b'', "\n", final=True) |
|
d15746abf6c7
Merged revisions 67762 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50008
diff
changeset
|
2424 _check_decode(b'\r', "\n", final=True) |
|
d15746abf6c7
Merged revisions 67762 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50008
diff
changeset
|
2425 |
|
d15746abf6c7
Merged revisions 67762 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50008
diff
changeset
|
2426 _check_decode(b'\r', "") |
|
d15746abf6c7
Merged revisions 67762 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50008
diff
changeset
|
2427 _check_decode(b'a', "\na") |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2428 |
|
50171
d15746abf6c7
Merged revisions 67762 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50008
diff
changeset
|
2429 _check_decode(b'\r\r\n', "\n\n") |
|
d15746abf6c7
Merged revisions 67762 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50008
diff
changeset
|
2430 _check_decode(b'\r', "") |
|
d15746abf6c7
Merged revisions 67762 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50008
diff
changeset
|
2431 _check_decode(b'\r', "\n") |
|
d15746abf6c7
Merged revisions 67762 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50008
diff
changeset
|
2432 _check_decode(b'\na', "\na") |
|
d15746abf6c7
Merged revisions 67762 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50008
diff
changeset
|
2433 |
|
d15746abf6c7
Merged revisions 67762 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50008
diff
changeset
|
2434 _check_decode(b'\xe8\xa2\x88\r\n', "\u8888\n") |
|
d15746abf6c7
Merged revisions 67762 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50008
diff
changeset
|
2435 _check_decode(b'\xe8\xa2\x88', "\u8888") |
|
d15746abf6c7
Merged revisions 67762 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50008
diff
changeset
|
2436 _check_decode(b'\n', "\n") |
|
d15746abf6c7
Merged revisions 67762 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50008
diff
changeset
|
2437 _check_decode(b'\xe8\xa2\x88\r', "\u8888") |
|
d15746abf6c7
Merged revisions 67762 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50008
diff
changeset
|
2438 _check_decode(b'\n', "\n") |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2439 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2440 def check_newline_decoding(self, decoder, encoding): |
|
50171
d15746abf6c7
Merged revisions 67762 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50008
diff
changeset
|
2441 result = [] |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2442 if encoding is not None: |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2443 encoder = codecs.getincrementalencoder(encoding)() |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2444 def _decode_bytewise(s): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2445 # Decode one byte at a time |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2446 for b in encoder.encode(s): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2447 result.append(decoder.decode(b)) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2448 else: |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2449 encoder = None |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2450 def _decode_bytewise(s): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2451 # Decode one char at a time |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2452 for c in s: |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2453 result.append(decoder.decode(c)) |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
2454 self.assertEqual(decoder.newlines, None) |
|
50171
d15746abf6c7
Merged revisions 67762 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50008
diff
changeset
|
2455 _decode_bytewise("abc\n\r") |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
2456 self.assertEqual(decoder.newlines, '\n') |
|
50171
d15746abf6c7
Merged revisions 67762 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50008
diff
changeset
|
2457 _decode_bytewise("\nabc") |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
2458 self.assertEqual(decoder.newlines, ('\n', '\r\n')) |
|
50171
d15746abf6c7
Merged revisions 67762 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50008
diff
changeset
|
2459 _decode_bytewise("abc\r") |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
2460 self.assertEqual(decoder.newlines, ('\n', '\r\n')) |
|
50171
d15746abf6c7
Merged revisions 67762 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50008
diff
changeset
|
2461 _decode_bytewise("abc") |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
2462 self.assertEqual(decoder.newlines, ('\r', '\n', '\r\n')) |
|
50171
d15746abf6c7
Merged revisions 67762 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50008
diff
changeset
|
2463 _decode_bytewise("abc\r") |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
2464 self.assertEqual("".join(result), "abc\n\nabcabc\nabcabc") |
|
50171
d15746abf6c7
Merged revisions 67762 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50008
diff
changeset
|
2465 decoder.reset() |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2466 input = "abc" |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2467 if encoder is not None: |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2468 encoder.reset() |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2469 input = encoder.encode(input) |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
2470 self.assertEqual(decoder.decode(input), "abc") |
|
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
2471 self.assertEqual(decoder.newlines, None) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2472 |
|
50171
d15746abf6c7
Merged revisions 67762 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50008
diff
changeset
|
2473 def test_newline_decoder(self): |
|
d15746abf6c7
Merged revisions 67762 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50008
diff
changeset
|
2474 encodings = ( |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2475 # None meaning the IncrementalNewlineDecoder takes unicode input |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2476 # rather than bytes input |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2477 None, 'utf-8', 'latin-1', |
|
50171
d15746abf6c7
Merged revisions 67762 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50008
diff
changeset
|
2478 'utf-16', 'utf-16-le', 'utf-16-be', |
|
d15746abf6c7
Merged revisions 67762 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50008
diff
changeset
|
2479 'utf-32', 'utf-32-le', 'utf-32-be', |
|
d15746abf6c7
Merged revisions 67762 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50008
diff
changeset
|
2480 ) |
|
d15746abf6c7
Merged revisions 67762 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50008
diff
changeset
|
2481 for enc in encodings: |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2482 decoder = enc and codecs.getincrementaldecoder(enc)() |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2483 decoder = self.IncrementalNewlineDecoder(decoder, translate=True) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2484 self.check_newline_decoding(decoder, enc) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2485 decoder = codecs.getincrementaldecoder("utf-8")() |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2486 decoder = self.IncrementalNewlineDecoder(decoder, translate=True) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2487 self.check_newline_decoding_utf8(decoder) |
|
50171
d15746abf6c7
Merged revisions 67762 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50008
diff
changeset
|
2488 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2489 def test_newline_bytes(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2490 # Issue 5433: Excessive optimization in IncrementalNewlineDecoder |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2491 def _check(dec): |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
2492 self.assertEqual(dec.newlines, None) |
|
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
2493 self.assertEqual(dec.decode("\u0D00"), "\u0D00") |
|
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
2494 self.assertEqual(dec.newlines, None) |
|
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
2495 self.assertEqual(dec.decode("\u0A00"), "\u0A00") |
|
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
2496 self.assertEqual(dec.newlines, None) |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2497 dec = self.IncrementalNewlineDecoder(None, translate=False) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2498 _check(dec) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2499 dec = self.IncrementalNewlineDecoder(None, translate=True) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2500 _check(dec) |
|
61181
fe3bf399a19c
Merged revisions 80720 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
58544
diff
changeset
|
2501 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2502 class CIncrementalNewlineDecoderTest(IncrementalNewlineDecoderTest): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2503 pass |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2504 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2505 class PyIncrementalNewlineDecoderTest(IncrementalNewlineDecoderTest): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2506 pass |
|
61181
fe3bf399a19c
Merged revisions 80720 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
58544
diff
changeset
|
2507 |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2508 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2509 # XXX Tests for open() |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2510 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2511 class MiscIOTest(unittest.TestCase): |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2512 |
|
50002
5ef8b5a74efa
Merged revisions 67245,67277,67289,67295,67301-67303,67307,67330,67332,67336,67355,67359,67362,67364,67367-67368,67370 via svnmerge from
Georg Brandl <georg@python.org>
parents:
49677
diff
changeset
|
2513 def tearDown(self): |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2514 support.unlink(support.TESTFN) |
|
50002
5ef8b5a74efa
Merged revisions 67245,67277,67289,67295,67301-67303,67307,67330,67332,67336,67355,67359,67362,67364,67367-67368,67370 via svnmerge from
Georg Brandl <georg@python.org>
parents:
49677
diff
changeset
|
2515 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2516 def test___all__(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2517 for name in self.io.__all__: |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2518 obj = getattr(self.io, name, None) |
|
52701
f390464639fb
handle SEEK_ constants in test_io
Benjamin Peterson <benjamin@python.org>
parents:
50956
diff
changeset
|
2519 self.assertTrue(obj is not None, name) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2520 if name == "open": |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2521 continue |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2522 elif "error" in name.lower() or name == "UnsupportedOperation": |
|
52701
f390464639fb
handle SEEK_ constants in test_io
Benjamin Peterson <benjamin@python.org>
parents:
50956
diff
changeset
|
2523 self.assertTrue(issubclass(obj, Exception), name) |
|
f390464639fb
handle SEEK_ constants in test_io
Benjamin Peterson <benjamin@python.org>
parents:
50956
diff
changeset
|
2524 elif not name.startswith("SEEK_"): |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2525 self.assertTrue(issubclass(obj, self.IOBase)) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2526 |
|
50002
5ef8b5a74efa
Merged revisions 67245,67277,67289,67295,67301-67303,67307,67330,67332,67336,67355,67359,67362,67364,67367-67368,67370 via svnmerge from
Georg Brandl <georg@python.org>
parents:
49677
diff
changeset
|
2527 def test_attributes(self): |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2528 f = self.open(support.TESTFN, "wb", buffering=0) |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
2529 self.assertEqual(f.mode, "wb") |
|
50002
5ef8b5a74efa
Merged revisions 67245,67277,67289,67295,67301-67303,67307,67330,67332,67336,67355,67359,67362,67364,67367-67368,67370 via svnmerge from
Georg Brandl <georg@python.org>
parents:
49677
diff
changeset
|
2530 f.close() |
|
5ef8b5a74efa
Merged revisions 67245,67277,67289,67295,67301-67303,67307,67330,67332,67336,67355,67359,67362,67364,67367-67368,67370 via svnmerge from
Georg Brandl <georg@python.org>
parents:
49677
diff
changeset
|
2531 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2532 f = self.open(support.TESTFN, "U") |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
2533 self.assertEqual(f.name, support.TESTFN) |
|
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
2534 self.assertEqual(f.buffer.name, support.TESTFN) |
|
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
2535 self.assertEqual(f.buffer.raw.name, support.TESTFN) |
|
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
2536 self.assertEqual(f.mode, "U") |
|
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
2537 self.assertEqual(f.buffer.mode, "rb") |
|
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
2538 self.assertEqual(f.buffer.raw.mode, "rb") |
|
50002
5ef8b5a74efa
Merged revisions 67245,67277,67289,67295,67301-67303,67307,67330,67332,67336,67355,67359,67362,67364,67367-67368,67370 via svnmerge from
Georg Brandl <georg@python.org>
parents:
49677
diff
changeset
|
2539 f.close() |
|
5ef8b5a74efa
Merged revisions 67245,67277,67289,67295,67301-67303,67307,67330,67332,67336,67355,67359,67362,67364,67367-67368,67370 via svnmerge from
Georg Brandl <georg@python.org>
parents:
49677
diff
changeset
|
2540 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2541 f = self.open(support.TESTFN, "w+") |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
2542 self.assertEqual(f.mode, "w+") |
|
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
2543 self.assertEqual(f.buffer.mode, "rb+") # Does it really matter? |
|
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
2544 self.assertEqual(f.buffer.raw.mode, "rb+") |
|
50002
5ef8b5a74efa
Merged revisions 67245,67277,67289,67295,67301-67303,67307,67330,67332,67336,67355,67359,67362,67364,67367-67368,67370 via svnmerge from
Georg Brandl <georg@python.org>
parents:
49677
diff
changeset
|
2545 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2546 g = self.open(f.fileno(), "wb", closefd=False) |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
2547 self.assertEqual(g.mode, "wb") |
|
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
2548 self.assertEqual(g.raw.mode, "wb") |
|
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
2549 self.assertEqual(g.name, f.fileno()) |
|
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65318
diff
changeset
|
2550 self.assertEqual(g.raw.name, f.fileno()) |
|
50002
5ef8b5a74efa
Merged revisions 67245,67277,67289,67295,67301-67303,67307,67330,67332,67336,67355,67359,67362,67364,67367-67368,67370 via svnmerge from
Georg Brandl <georg@python.org>
parents:
49677
diff
changeset
|
2551 f.close() |
|
5ef8b5a74efa
Merged revisions 67245,67277,67289,67295,67301-67303,67307,67330,67332,67336,67355,67359,67362,67364,67367-67368,67370 via svnmerge from
Georg Brandl <georg@python.org>
parents:
49677
diff
changeset
|
2552 g.close() |
|
5ef8b5a74efa
Merged revisions 67245,67277,67289,67295,67301-67303,67307,67330,67332,67336,67355,67359,67362,67364,67367-67368,67370 via svnmerge from
Georg Brandl <georg@python.org>
parents:
49677
diff
changeset
|
2553 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2554 def test_io_after_close(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2555 for kwargs in [ |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2556 {"mode": "w"}, |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2557 {"mode": "wb"}, |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2558 {"mode": "w", "buffering": 1}, |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2559 {"mode": "w", "buffering": 2}, |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2560 {"mode": "wb", "buffering": 0}, |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2561 {"mode": "r"}, |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2562 {"mode": "rb"}, |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2563 {"mode": "r", "buffering": 1}, |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2564 {"mode": "r", "buffering": 2}, |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2565 {"mode": "rb", "buffering": 0}, |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2566 {"mode": "w+"}, |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2567 {"mode": "w+b"}, |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2568 {"mode": "w+", "buffering": 1}, |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2569 {"mode": "w+", "buffering": 2}, |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2570 {"mode": "w+b", "buffering": 0}, |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2571 ]: |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2572 f = self.open(support.TESTFN, **kwargs) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2573 f.close() |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2574 self.assertRaises(ValueError, f.flush) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2575 self.assertRaises(ValueError, f.fileno) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2576 self.assertRaises(ValueError, f.isatty) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2577 self.assertRaises(ValueError, f.__iter__) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2578 if hasattr(f, "peek"): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2579 self.assertRaises(ValueError, f.peek, 1) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2580 self.assertRaises(ValueError, f.read) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2581 if hasattr(f, "read1"): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2582 self.assertRaises(ValueError, f.read1, 1024) |
|
70384
f2414bb35c96
Issue #12175: FileIO.readall() now raises a ValueError instead of an IOError if
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70060
diff
changeset
|
2583 if hasattr(f, "readall"): |
|
f2414bb35c96
Issue #12175: FileIO.readall() now raises a ValueError instead of an IOError if
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70060
diff
changeset
|
2584 self.assertRaises(ValueError, f.readall) |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2585 if hasattr(f, "readinto"): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2586 self.assertRaises(ValueError, f.readinto, bytearray(1024)) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2587 self.assertRaises(ValueError, f.readline) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2588 self.assertRaises(ValueError, f.readlines) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2589 self.assertRaises(ValueError, f.seek, 0) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2590 self.assertRaises(ValueError, f.tell) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2591 self.assertRaises(ValueError, f.truncate) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2592 self.assertRaises(ValueError, f.write, |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2593 b"" if "b" in kwargs['mode'] else "") |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2594 self.assertRaises(ValueError, f.writelines, []) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2595 self.assertRaises(ValueError, next, f) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2596 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2597 def test_blockingioerror(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2598 # Various BlockingIOError issues |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2599 self.assertRaises(TypeError, self.BlockingIOError) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2600 self.assertRaises(TypeError, self.BlockingIOError, 1) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2601 self.assertRaises(TypeError, self.BlockingIOError, 1, 2, 3, 4) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2602 self.assertRaises(TypeError, self.BlockingIOError, 1, "", None) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2603 b = self.BlockingIOError(1, "") |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2604 self.assertEqual(b.characters_written, 0) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2605 class C(unicode): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2606 pass |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2607 c = C("") |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2608 b = self.BlockingIOError(1, c) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2609 c.b = b |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2610 b.c = c |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2611 wr = weakref.ref(c) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2612 del c, b |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2613 support.gc_collect() |
|
55002
6768b2350c57
convert usage of fail* to assert*
Benjamin Peterson <benjamin@python.org>
parents:
54781
diff
changeset
|
2614 self.assertTrue(wr() is None, wr) |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2615 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2616 def test_abcs(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2617 # Test the visible base classes are ABCs. |
|
58472
6ffcdafa0118
use assert[Not]IsInstance where appropriate
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58198
diff
changeset
|
2618 self.assertIsInstance(self.IOBase, abc.ABCMeta) |
|
6ffcdafa0118
use assert[Not]IsInstance where appropriate
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58198
diff
changeset
|
2619 self.assertIsInstance(self.RawIOBase, abc.ABCMeta) |
|
6ffcdafa0118
use assert[Not]IsInstance where appropriate
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58198
diff
changeset
|
2620 self.assertIsInstance(self.BufferedIOBase, abc.ABCMeta) |
|
6ffcdafa0118
use assert[Not]IsInstance where appropriate
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58198
diff
changeset
|
2621 self.assertIsInstance(self.TextIOBase, abc.ABCMeta) |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2622 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2623 def _check_abc_inheritance(self, abcmodule): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2624 with self.open(support.TESTFN, "wb", buffering=0) as f: |
|
58472
6ffcdafa0118
use assert[Not]IsInstance where appropriate
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58198
diff
changeset
|
2625 self.assertIsInstance(f, abcmodule.IOBase) |
|
6ffcdafa0118
use assert[Not]IsInstance where appropriate
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58198
diff
changeset
|
2626 self.assertIsInstance(f, abcmodule.RawIOBase) |
|
6ffcdafa0118
use assert[Not]IsInstance where appropriate
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58198
diff
changeset
|
2627 self.assertNotIsInstance(f, abcmodule.BufferedIOBase) |
|
6ffcdafa0118
use assert[Not]IsInstance where appropriate
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58198
diff
changeset
|
2628 self.assertNotIsInstance(f, abcmodule.TextIOBase) |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2629 with self.open(support.TESTFN, "wb") as f: |
|
58472
6ffcdafa0118
use assert[Not]IsInstance where appropriate
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58198
diff
changeset
|
2630 self.assertIsInstance(f, abcmodule.IOBase) |
|
6ffcdafa0118
use assert[Not]IsInstance where appropriate
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58198
diff
changeset
|
2631 self.assertNotIsInstance(f, abcmodule.RawIOBase) |
|
6ffcdafa0118
use assert[Not]IsInstance where appropriate
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58198
diff
changeset
|
2632 self.assertIsInstance(f, abcmodule.BufferedIOBase) |
|
6ffcdafa0118
use assert[Not]IsInstance where appropriate
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58198
diff
changeset
|
2633 self.assertNotIsInstance(f, abcmodule.TextIOBase) |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2634 with self.open(support.TESTFN, "w") as f: |
|
58472
6ffcdafa0118
use assert[Not]IsInstance where appropriate
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58198
diff
changeset
|
2635 self.assertIsInstance(f, abcmodule.IOBase) |
|
6ffcdafa0118
use assert[Not]IsInstance where appropriate
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58198
diff
changeset
|
2636 self.assertNotIsInstance(f, abcmodule.RawIOBase) |
|
6ffcdafa0118
use assert[Not]IsInstance where appropriate
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58198
diff
changeset
|
2637 self.assertNotIsInstance(f, abcmodule.BufferedIOBase) |
|
6ffcdafa0118
use assert[Not]IsInstance where appropriate
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58198
diff
changeset
|
2638 self.assertIsInstance(f, abcmodule.TextIOBase) |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2639 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2640 def test_abc_inheritance(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2641 # Test implementations inherit from their respective ABCs |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2642 self._check_abc_inheritance(self) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2643 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2644 def test_abc_inheritance_official(self): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2645 # Test implementations inherit from the official ABCs of the |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2646 # baseline "io" module. |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2647 self._check_abc_inheritance(io) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2648 |
|
73667
e84e17643eeb
Issue #13322: Fix BufferedWriter.write() to ensure that BlockingIOError is
Antoine Pitrou <solipsis@pitrou.net>
parents:
72754
diff
changeset
|
2649 @unittest.skipUnless(fcntl, 'fcntl required for this test') |
|
e84e17643eeb
Issue #13322: Fix BufferedWriter.write() to ensure that BlockingIOError is
Antoine Pitrou <solipsis@pitrou.net>
parents:
72754
diff
changeset
|
2650 def test_nonblock_pipe_write_bigbuf(self): |
|
e84e17643eeb
Issue #13322: Fix BufferedWriter.write() to ensure that BlockingIOError is
Antoine Pitrou <solipsis@pitrou.net>
parents:
72754
diff
changeset
|
2651 self._test_nonblock_pipe_write(16*1024) |
|
e84e17643eeb
Issue #13322: Fix BufferedWriter.write() to ensure that BlockingIOError is
Antoine Pitrou <solipsis@pitrou.net>
parents:
72754
diff
changeset
|
2652 |
|
e84e17643eeb
Issue #13322: Fix BufferedWriter.write() to ensure that BlockingIOError is
Antoine Pitrou <solipsis@pitrou.net>
parents:
72754
diff
changeset
|
2653 @unittest.skipUnless(fcntl, 'fcntl required for this test') |
|
e84e17643eeb
Issue #13322: Fix BufferedWriter.write() to ensure that BlockingIOError is
Antoine Pitrou <solipsis@pitrou.net>
parents:
72754
diff
changeset
|
2654 def test_nonblock_pipe_write_smallbuf(self): |
|
e84e17643eeb
Issue #13322: Fix BufferedWriter.write() to ensure that BlockingIOError is
Antoine Pitrou <solipsis@pitrou.net>
parents:
72754
diff
changeset
|
2655 self._test_nonblock_pipe_write(1024) |
|
e84e17643eeb
Issue #13322: Fix BufferedWriter.write() to ensure that BlockingIOError is
Antoine Pitrou <solipsis@pitrou.net>
parents:
72754
diff
changeset
|
2656 |
|
e84e17643eeb
Issue #13322: Fix BufferedWriter.write() to ensure that BlockingIOError is
Antoine Pitrou <solipsis@pitrou.net>
parents:
72754
diff
changeset
|
2657 def _set_non_blocking(self, fd): |
|
e84e17643eeb
Issue #13322: Fix BufferedWriter.write() to ensure that BlockingIOError is
Antoine Pitrou <solipsis@pitrou.net>
parents:
72754
diff
changeset
|
2658 flags = fcntl.fcntl(fd, fcntl.F_GETFL) |
|
e84e17643eeb
Issue #13322: Fix BufferedWriter.write() to ensure that BlockingIOError is
Antoine Pitrou <solipsis@pitrou.net>
parents:
72754
diff
changeset
|
2659 self.assertNotEqual(flags, -1) |
|
e84e17643eeb
Issue #13322: Fix BufferedWriter.write() to ensure that BlockingIOError is
Antoine Pitrou <solipsis@pitrou.net>
parents:
72754
diff
changeset
|
2660 res = fcntl.fcntl(fd, fcntl.F_SETFL, flags | os.O_NONBLOCK) |
|
e84e17643eeb
Issue #13322: Fix BufferedWriter.write() to ensure that BlockingIOError is
Antoine Pitrou <solipsis@pitrou.net>
parents:
72754
diff
changeset
|
2661 self.assertEqual(res, 0) |
|
e84e17643eeb
Issue #13322: Fix BufferedWriter.write() to ensure that BlockingIOError is
Antoine Pitrou <solipsis@pitrou.net>
parents:
72754
diff
changeset
|
2662 |
|
e84e17643eeb
Issue #13322: Fix BufferedWriter.write() to ensure that BlockingIOError is
Antoine Pitrou <solipsis@pitrou.net>
parents:
72754
diff
changeset
|
2663 def _test_nonblock_pipe_write(self, bufsize): |
|
e84e17643eeb
Issue #13322: Fix BufferedWriter.write() to ensure that BlockingIOError is
Antoine Pitrou <solipsis@pitrou.net>
parents:
72754
diff
changeset
|
2664 sent = [] |
|
e84e17643eeb
Issue #13322: Fix BufferedWriter.write() to ensure that BlockingIOError is
Antoine Pitrou <solipsis@pitrou.net>
parents:
72754
diff
changeset
|
2665 received = [] |
|
e84e17643eeb
Issue #13322: Fix BufferedWriter.write() to ensure that BlockingIOError is
Antoine Pitrou <solipsis@pitrou.net>
parents:
72754
diff
changeset
|
2666 r, w = os.pipe() |
|
e84e17643eeb
Issue #13322: Fix BufferedWriter.write() to ensure that BlockingIOError is
Antoine Pitrou <solipsis@pitrou.net>
parents:
72754
diff
changeset
|
2667 self._set_non_blocking(r) |
|
e84e17643eeb
Issue #13322: Fix BufferedWriter.write() to ensure that BlockingIOError is
Antoine Pitrou <solipsis@pitrou.net>
parents:
72754
diff
changeset
|
2668 self._set_non_blocking(w) |
|
e84e17643eeb
Issue #13322: Fix BufferedWriter.write() to ensure that BlockingIOError is
Antoine Pitrou <solipsis@pitrou.net>
parents:
72754
diff
changeset
|
2669 |
|
e84e17643eeb
Issue #13322: Fix BufferedWriter.write() to ensure that BlockingIOError is
Antoine Pitrou <solipsis@pitrou.net>
parents:
72754
diff
changeset
|
2670 # To exercise all code paths in the C implementation we need |
|
e84e17643eeb
Issue #13322: Fix BufferedWriter.write() to ensure that BlockingIOError is
Antoine Pitrou <solipsis@pitrou.net>
parents:
72754
diff
changeset
|
2671 # to play with buffer sizes. For instance, if we choose a |
|
e84e17643eeb
Issue #13322: Fix BufferedWriter.write() to ensure that BlockingIOError is
Antoine Pitrou <solipsis@pitrou.net>
parents:
72754
diff
changeset
|
2672 # buffer size less than or equal to _PIPE_BUF (4096 on Linux) |
|
e84e17643eeb
Issue #13322: Fix BufferedWriter.write() to ensure that BlockingIOError is
Antoine Pitrou <solipsis@pitrou.net>
parents:
72754
diff
changeset
|
2673 # then we will never get a partial write of the buffer. |
|
e84e17643eeb
Issue #13322: Fix BufferedWriter.write() to ensure that BlockingIOError is
Antoine Pitrou <solipsis@pitrou.net>
parents:
72754
diff
changeset
|
2674 rf = self.open(r, mode='rb', closefd=True, buffering=bufsize) |
|
e84e17643eeb
Issue #13322: Fix BufferedWriter.write() to ensure that BlockingIOError is
Antoine Pitrou <solipsis@pitrou.net>
parents:
72754
diff
changeset
|
2675 wf = self.open(w, mode='wb', closefd=True, buffering=bufsize) |
|
e84e17643eeb
Issue #13322: Fix BufferedWriter.write() to ensure that BlockingIOError is
Antoine Pitrou <solipsis@pitrou.net>
parents:
72754
diff
changeset
|
2676 |
|
e84e17643eeb
Issue #13322: Fix BufferedWriter.write() to ensure that BlockingIOError is
Antoine Pitrou <solipsis@pitrou.net>
parents:
72754
diff
changeset
|
2677 with rf, wf: |
|
e84e17643eeb
Issue #13322: Fix BufferedWriter.write() to ensure that BlockingIOError is
Antoine Pitrou <solipsis@pitrou.net>
parents:
72754
diff
changeset
|
2678 for N in 9999, 73, 7574: |
|
e84e17643eeb
Issue #13322: Fix BufferedWriter.write() to ensure that BlockingIOError is
Antoine Pitrou <solipsis@pitrou.net>
parents:
72754
diff
changeset
|
2679 try: |
|
e84e17643eeb
Issue #13322: Fix BufferedWriter.write() to ensure that BlockingIOError is
Antoine Pitrou <solipsis@pitrou.net>
parents:
72754
diff
changeset
|
2680 i = 0 |
|
e84e17643eeb
Issue #13322: Fix BufferedWriter.write() to ensure that BlockingIOError is
Antoine Pitrou <solipsis@pitrou.net>
parents:
72754
diff
changeset
|
2681 while True: |
|
e84e17643eeb
Issue #13322: Fix BufferedWriter.write() to ensure that BlockingIOError is
Antoine Pitrou <solipsis@pitrou.net>
parents:
72754
diff
changeset
|
2682 msg = bytes([i % 26 + 97]) * N |
|
e84e17643eeb
Issue #13322: Fix BufferedWriter.write() to ensure that BlockingIOError is
Antoine Pitrou <solipsis@pitrou.net>
parents:
72754
diff
changeset
|
2683 sent.append(msg) |
|
e84e17643eeb
Issue #13322: Fix BufferedWriter.write() to ensure that BlockingIOError is
Antoine Pitrou <solipsis@pitrou.net>
parents:
72754
diff
changeset
|
2684 wf.write(msg) |
|
e84e17643eeb
Issue #13322: Fix BufferedWriter.write() to ensure that BlockingIOError is
Antoine Pitrou <solipsis@pitrou.net>
parents:
72754
diff
changeset
|
2685 i += 1 |
|
e84e17643eeb
Issue #13322: Fix BufferedWriter.write() to ensure that BlockingIOError is
Antoine Pitrou <solipsis@pitrou.net>
parents:
72754
diff
changeset
|
2686 |
|
e84e17643eeb
Issue #13322: Fix BufferedWriter.write() to ensure that BlockingIOError is
Antoine Pitrou <solipsis@pitrou.net>
parents:
72754
diff
changeset
|
2687 except self.BlockingIOError as e: |
|
e84e17643eeb
Issue #13322: Fix BufferedWriter.write() to ensure that BlockingIOError is
Antoine Pitrou <solipsis@pitrou.net>
parents:
72754
diff
changeset
|
2688 self.assertEqual(e.args[0], errno.EAGAIN) |
|
e84e17643eeb
Issue #13322: Fix BufferedWriter.write() to ensure that BlockingIOError is
Antoine Pitrou <solipsis@pitrou.net>
parents:
72754
diff
changeset
|
2689 sent[-1] = sent[-1][:e.characters_written] |
|
e84e17643eeb
Issue #13322: Fix BufferedWriter.write() to ensure that BlockingIOError is
Antoine Pitrou <solipsis@pitrou.net>
parents:
72754
diff
changeset
|
2690 received.append(rf.read()) |
|
e84e17643eeb
Issue #13322: Fix BufferedWriter.write() to ensure that BlockingIOError is
Antoine Pitrou <solipsis@pitrou.net>
parents:
72754
diff
changeset
|
2691 msg = b'BLOCKED' |
|
e84e17643eeb
Issue #13322: Fix BufferedWriter.write() to ensure that BlockingIOError is
Antoine Pitrou <solipsis@pitrou.net>
parents:
72754
diff
changeset
|
2692 wf.write(msg) |
|
e84e17643eeb
Issue #13322: Fix BufferedWriter.write() to ensure that BlockingIOError is
Antoine Pitrou <solipsis@pitrou.net>
parents:
72754
diff
changeset
|
2693 sent.append(msg) |
|
e84e17643eeb
Issue #13322: Fix BufferedWriter.write() to ensure that BlockingIOError is
Antoine Pitrou <solipsis@pitrou.net>
parents:
72754
diff
changeset
|
2694 |
|
e84e17643eeb
Issue #13322: Fix BufferedWriter.write() to ensure that BlockingIOError is
Antoine Pitrou <solipsis@pitrou.net>
parents:
72754
diff
changeset
|
2695 while True: |
|
e84e17643eeb
Issue #13322: Fix BufferedWriter.write() to ensure that BlockingIOError is
Antoine Pitrou <solipsis@pitrou.net>
parents:
72754
diff
changeset
|
2696 try: |
|
e84e17643eeb
Issue #13322: Fix BufferedWriter.write() to ensure that BlockingIOError is
Antoine Pitrou <solipsis@pitrou.net>
parents:
72754
diff
changeset
|
2697 wf.flush() |
|
e84e17643eeb
Issue #13322: Fix BufferedWriter.write() to ensure that BlockingIOError is
Antoine Pitrou <solipsis@pitrou.net>
parents:
72754
diff
changeset
|
2698 break |
|
e84e17643eeb
Issue #13322: Fix BufferedWriter.write() to ensure that BlockingIOError is
Antoine Pitrou <solipsis@pitrou.net>
parents:
72754
diff
changeset
|
2699 except self.BlockingIOError as e: |
|
e84e17643eeb
Issue #13322: Fix BufferedWriter.write() to ensure that BlockingIOError is
Antoine Pitrou <solipsis@pitrou.net>
parents:
72754
diff
changeset
|
2700 self.assertEqual(e.args[0], errno.EAGAIN) |
|
e84e17643eeb
Issue #13322: Fix BufferedWriter.write() to ensure that BlockingIOError is
Antoine Pitrou <solipsis@pitrou.net>
parents:
72754
diff
changeset
|
2701 self.assertEqual(e.characters_written, 0) |
|
e84e17643eeb
Issue #13322: Fix BufferedWriter.write() to ensure that BlockingIOError is
Antoine Pitrou <solipsis@pitrou.net>
parents:
72754
diff
changeset
|
2702 received.append(rf.read()) |
|
e84e17643eeb
Issue #13322: Fix BufferedWriter.write() to ensure that BlockingIOError is
Antoine Pitrou <solipsis@pitrou.net>
parents:
72754
diff
changeset
|
2703 |
|
e84e17643eeb
Issue #13322: Fix BufferedWriter.write() to ensure that BlockingIOError is
Antoine Pitrou <solipsis@pitrou.net>
parents:
72754
diff
changeset
|
2704 received += iter(rf.read, None) |
|
e84e17643eeb
Issue #13322: Fix BufferedWriter.write() to ensure that BlockingIOError is
Antoine Pitrou <solipsis@pitrou.net>
parents:
72754
diff
changeset
|
2705 |
|
e84e17643eeb
Issue #13322: Fix BufferedWriter.write() to ensure that BlockingIOError is
Antoine Pitrou <solipsis@pitrou.net>
parents:
72754
diff
changeset
|
2706 sent, received = b''.join(sent), b''.join(received) |
|
e84e17643eeb
Issue #13322: Fix BufferedWriter.write() to ensure that BlockingIOError is
Antoine Pitrou <solipsis@pitrou.net>
parents:
72754
diff
changeset
|
2707 self.assertTrue(sent == received) |
|
e84e17643eeb
Issue #13322: Fix BufferedWriter.write() to ensure that BlockingIOError is
Antoine Pitrou <solipsis@pitrou.net>
parents:
72754
diff
changeset
|
2708 self.assertTrue(wf.closed) |
|
e84e17643eeb
Issue #13322: Fix BufferedWriter.write() to ensure that BlockingIOError is
Antoine Pitrou <solipsis@pitrou.net>
parents:
72754
diff
changeset
|
2709 self.assertTrue(rf.closed) |
|
e84e17643eeb
Issue #13322: Fix BufferedWriter.write() to ensure that BlockingIOError is
Antoine Pitrou <solipsis@pitrou.net>
parents:
72754
diff
changeset
|
2710 |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2711 class CMiscIOTest(MiscIOTest): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2712 io = io |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2713 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2714 class PyMiscIOTest(MiscIOTest): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2715 io = pyio |
| 49779 | 2716 |
|
64209
dfd0229748ef
Merged revisions 84239 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63921
diff
changeset
|
2717 |
|
dfd0229748ef
Merged revisions 84239 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63921
diff
changeset
|
2718 @unittest.skipIf(os.name == 'nt', 'POSIX signals required for this test.') |
|
dfd0229748ef
Merged revisions 84239 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63921
diff
changeset
|
2719 class SignalsTest(unittest.TestCase): |
|
dfd0229748ef
Merged revisions 84239 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63921
diff
changeset
|
2720 |
|
dfd0229748ef
Merged revisions 84239 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63921
diff
changeset
|
2721 def setUp(self): |
|
dfd0229748ef
Merged revisions 84239 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63921
diff
changeset
|
2722 self.oldalrm = signal.signal(signal.SIGALRM, self.alarm_interrupt) |
|
dfd0229748ef
Merged revisions 84239 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63921
diff
changeset
|
2723 |
|
dfd0229748ef
Merged revisions 84239 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63921
diff
changeset
|
2724 def tearDown(self): |
|
dfd0229748ef
Merged revisions 84239 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63921
diff
changeset
|
2725 signal.signal(signal.SIGALRM, self.oldalrm) |
|
dfd0229748ef
Merged revisions 84239 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63921
diff
changeset
|
2726 |
|
dfd0229748ef
Merged revisions 84239 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63921
diff
changeset
|
2727 def alarm_interrupt(self, sig, frame): |
|
64706
a59ae9389131
Silence warning about 1/0
Florent Xicluna <florent.xicluna@gmail.com>
parents:
64209
diff
changeset
|
2728 1 // 0 |
|
64209
dfd0229748ef
Merged revisions 84239 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63921
diff
changeset
|
2729 |
|
dfd0229748ef
Merged revisions 84239 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63921
diff
changeset
|
2730 @unittest.skipUnless(threading, 'Threading required for this test.') |
|
71188
a624b86264a4
Issue #12429: Skip interrupted write tests on FreeBSD <= 7
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70388
diff
changeset
|
2731 @unittest.skipIf(sys.platform in ('freebsd5', 'freebsd6', 'freebsd7'), |
|
a624b86264a4
Issue #12429: Skip interrupted write tests on FreeBSD <= 7
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70388
diff
changeset
|
2732 'issue #12429: skip test on FreeBSD <= 7') |
|
64209
dfd0229748ef
Merged revisions 84239 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63921
diff
changeset
|
2733 def check_interrupted_write(self, item, bytes, **fdopen_kwargs): |
|
dfd0229748ef
Merged revisions 84239 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63921
diff
changeset
|
2734 """Check that a partial write, when it gets interrupted, properly |
|
68028
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2735 invokes the signal handler, and bubbles up the exception raised |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2736 in the latter.""" |
|
64209
dfd0229748ef
Merged revisions 84239 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63921
diff
changeset
|
2737 read_results = [] |
|
dfd0229748ef
Merged revisions 84239 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63921
diff
changeset
|
2738 def _read(): |
|
dfd0229748ef
Merged revisions 84239 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63921
diff
changeset
|
2739 s = os.read(r, 1) |
|
dfd0229748ef
Merged revisions 84239 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63921
diff
changeset
|
2740 read_results.append(s) |
|
dfd0229748ef
Merged revisions 84239 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63921
diff
changeset
|
2741 t = threading.Thread(target=_read) |
|
dfd0229748ef
Merged revisions 84239 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63921
diff
changeset
|
2742 t.daemon = True |
|
dfd0229748ef
Merged revisions 84239 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63921
diff
changeset
|
2743 r, w = os.pipe() |
|
dfd0229748ef
Merged revisions 84239 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63921
diff
changeset
|
2744 try: |
|
dfd0229748ef
Merged revisions 84239 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63921
diff
changeset
|
2745 wio = self.io.open(w, **fdopen_kwargs) |
|
dfd0229748ef
Merged revisions 84239 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63921
diff
changeset
|
2746 t.start() |
|
dfd0229748ef
Merged revisions 84239 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63921
diff
changeset
|
2747 signal.alarm(1) |
|
dfd0229748ef
Merged revisions 84239 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63921
diff
changeset
|
2748 # Fill the pipe enough that the write will be blocking. |
|
dfd0229748ef
Merged revisions 84239 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63921
diff
changeset
|
2749 # It will be interrupted by the timer armed above. Since the |
|
dfd0229748ef
Merged revisions 84239 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63921
diff
changeset
|
2750 # other thread has read one byte, the low-level write will |
|
dfd0229748ef
Merged revisions 84239 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63921
diff
changeset
|
2751 # return with a successful (partial) result rather than an EINTR. |
|
dfd0229748ef
Merged revisions 84239 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63921
diff
changeset
|
2752 # The buffered IO layer must check for pending signal |
|
dfd0229748ef
Merged revisions 84239 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63921
diff
changeset
|
2753 # handlers, which in this case will invoke alarm_interrupt(). |
|
dfd0229748ef
Merged revisions 84239 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63921
diff
changeset
|
2754 self.assertRaises(ZeroDivisionError, |
|
dfd0229748ef
Merged revisions 84239 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63921
diff
changeset
|
2755 wio.write, item * (1024 * 1024)) |
|
dfd0229748ef
Merged revisions 84239 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63921
diff
changeset
|
2756 t.join() |
|
dfd0229748ef
Merged revisions 84239 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63921
diff
changeset
|
2757 # We got one byte, get another one and check that it isn't a |
|
dfd0229748ef
Merged revisions 84239 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63921
diff
changeset
|
2758 # repeat of the first one. |
|
dfd0229748ef
Merged revisions 84239 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63921
diff
changeset
|
2759 read_results.append(os.read(r, 1)) |
|
dfd0229748ef
Merged revisions 84239 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63921
diff
changeset
|
2760 self.assertEqual(read_results, [bytes[0:1], bytes[1:2]]) |
|
dfd0229748ef
Merged revisions 84239 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63921
diff
changeset
|
2761 finally: |
|
dfd0229748ef
Merged revisions 84239 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63921
diff
changeset
|
2762 os.close(w) |
|
dfd0229748ef
Merged revisions 84239 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63921
diff
changeset
|
2763 os.close(r) |
|
dfd0229748ef
Merged revisions 84239 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63921
diff
changeset
|
2764 # This is deliberate. If we didn't close the file descriptor |
|
dfd0229748ef
Merged revisions 84239 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63921
diff
changeset
|
2765 # before closing wio, wio would try to flush its internal |
|
dfd0229748ef
Merged revisions 84239 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63921
diff
changeset
|
2766 # buffer, and block again. |
|
dfd0229748ef
Merged revisions 84239 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63921
diff
changeset
|
2767 try: |
|
dfd0229748ef
Merged revisions 84239 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63921
diff
changeset
|
2768 wio.close() |
|
dfd0229748ef
Merged revisions 84239 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63921
diff
changeset
|
2769 except IOError as e: |
|
dfd0229748ef
Merged revisions 84239 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63921
diff
changeset
|
2770 if e.errno != errno.EBADF: |
|
dfd0229748ef
Merged revisions 84239 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63921
diff
changeset
|
2771 raise |
|
dfd0229748ef
Merged revisions 84239 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63921
diff
changeset
|
2772 |
|
dfd0229748ef
Merged revisions 84239 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63921
diff
changeset
|
2773 def test_interrupted_write_unbuffered(self): |
|
dfd0229748ef
Merged revisions 84239 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63921
diff
changeset
|
2774 self.check_interrupted_write(b"xy", b"xy", mode="wb", buffering=0) |
|
dfd0229748ef
Merged revisions 84239 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63921
diff
changeset
|
2775 |
|
dfd0229748ef
Merged revisions 84239 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63921
diff
changeset
|
2776 def test_interrupted_write_buffered(self): |
|
dfd0229748ef
Merged revisions 84239 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63921
diff
changeset
|
2777 self.check_interrupted_write(b"xy", b"xy", mode="wb") |
|
dfd0229748ef
Merged revisions 84239 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63921
diff
changeset
|
2778 |
|
dfd0229748ef
Merged revisions 84239 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63921
diff
changeset
|
2779 def test_interrupted_write_text(self): |
|
dfd0229748ef
Merged revisions 84239 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63921
diff
changeset
|
2780 self.check_interrupted_write("xy", b"xy", mode="w", encoding="ascii") |
|
dfd0229748ef
Merged revisions 84239 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63921
diff
changeset
|
2781 |
|
66660
5a723b7aefb7
Merged revisions 86981,86984 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66348
diff
changeset
|
2782 def check_reentrant_write(self, data, **fdopen_kwargs): |
|
5a723b7aefb7
Merged revisions 86981,86984 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66348
diff
changeset
|
2783 def on_alarm(*args): |
|
5a723b7aefb7
Merged revisions 86981,86984 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66348
diff
changeset
|
2784 # Will be called reentrantly from the same thread |
|
5a723b7aefb7
Merged revisions 86981,86984 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66348
diff
changeset
|
2785 wio.write(data) |
|
71227
9864e5d16407
test_io: make quiet the DeprecationWarning('classic int division')
Victor Stinner <victor.stinner@haypocalc.com>
parents:
71188
diff
changeset
|
2786 1//0 |
|
66660
5a723b7aefb7
Merged revisions 86981,86984 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66348
diff
changeset
|
2787 signal.signal(signal.SIGALRM, on_alarm) |
|
5a723b7aefb7
Merged revisions 86981,86984 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66348
diff
changeset
|
2788 r, w = os.pipe() |
|
5a723b7aefb7
Merged revisions 86981,86984 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66348
diff
changeset
|
2789 wio = self.io.open(w, **fdopen_kwargs) |
|
5a723b7aefb7
Merged revisions 86981,86984 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66348
diff
changeset
|
2790 try: |
|
5a723b7aefb7
Merged revisions 86981,86984 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66348
diff
changeset
|
2791 signal.alarm(1) |
|
5a723b7aefb7
Merged revisions 86981,86984 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66348
diff
changeset
|
2792 # Either the reentrant call to wio.write() fails with RuntimeError, |
|
5a723b7aefb7
Merged revisions 86981,86984 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66348
diff
changeset
|
2793 # or the signal handler raises ZeroDivisionError. |
|
5a723b7aefb7
Merged revisions 86981,86984 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66348
diff
changeset
|
2794 with self.assertRaises((ZeroDivisionError, RuntimeError)) as cm: |
|
5a723b7aefb7
Merged revisions 86981,86984 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66348
diff
changeset
|
2795 while 1: |
|
5a723b7aefb7
Merged revisions 86981,86984 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66348
diff
changeset
|
2796 for i in range(100): |
|
5a723b7aefb7
Merged revisions 86981,86984 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66348
diff
changeset
|
2797 wio.write(data) |
|
5a723b7aefb7
Merged revisions 86981,86984 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66348
diff
changeset
|
2798 wio.flush() |
|
5a723b7aefb7
Merged revisions 86981,86984 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66348
diff
changeset
|
2799 # Make sure the buffer doesn't fill up and block further writes |
|
5a723b7aefb7
Merged revisions 86981,86984 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66348
diff
changeset
|
2800 os.read(r, len(data) * 100) |
|
5a723b7aefb7
Merged revisions 86981,86984 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66348
diff
changeset
|
2801 exc = cm.exception |
|
5a723b7aefb7
Merged revisions 86981,86984 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66348
diff
changeset
|
2802 if isinstance(exc, RuntimeError): |
|
5a723b7aefb7
Merged revisions 86981,86984 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66348
diff
changeset
|
2803 self.assertTrue(str(exc).startswith("reentrant call"), str(exc)) |
|
5a723b7aefb7
Merged revisions 86981,86984 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66348
diff
changeset
|
2804 finally: |
|
5a723b7aefb7
Merged revisions 86981,86984 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66348
diff
changeset
|
2805 wio.close() |
|
5a723b7aefb7
Merged revisions 86981,86984 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66348
diff
changeset
|
2806 os.close(r) |
|
5a723b7aefb7
Merged revisions 86981,86984 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66348
diff
changeset
|
2807 |
|
5a723b7aefb7
Merged revisions 86981,86984 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66348
diff
changeset
|
2808 def test_reentrant_write_buffered(self): |
|
5a723b7aefb7
Merged revisions 86981,86984 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66348
diff
changeset
|
2809 self.check_reentrant_write(b"xy", mode="wb") |
|
5a723b7aefb7
Merged revisions 86981,86984 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66348
diff
changeset
|
2810 |
|
5a723b7aefb7
Merged revisions 86981,86984 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66348
diff
changeset
|
2811 def test_reentrant_write_text(self): |
|
5a723b7aefb7
Merged revisions 86981,86984 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66348
diff
changeset
|
2812 self.check_reentrant_write("xy", mode="w", encoding="ascii") |
|
5a723b7aefb7
Merged revisions 86981,86984 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66348
diff
changeset
|
2813 |
|
68028
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2814 def check_interrupted_read_retry(self, decode, **fdopen_kwargs): |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2815 """Check that a buffered read, when it gets interrupted (either |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2816 returning a partial result or EINTR), properly invokes the signal |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2817 handler and retries if the latter returned successfully.""" |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2818 r, w = os.pipe() |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2819 fdopen_kwargs["closefd"] = False |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2820 def alarm_handler(sig, frame): |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2821 os.write(w, b"bar") |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2822 signal.signal(signal.SIGALRM, alarm_handler) |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2823 try: |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2824 rio = self.io.open(r, **fdopen_kwargs) |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2825 os.write(w, b"foo") |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2826 signal.alarm(1) |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2827 # Expected behaviour: |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2828 # - first raw read() returns partial b"foo" |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2829 # - second raw read() returns EINTR |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2830 # - third raw read() returns b"bar" |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2831 self.assertEqual(decode(rio.read(6)), "foobar") |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2832 finally: |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2833 rio.close() |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2834 os.close(w) |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2835 os.close(r) |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2836 |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2837 def test_interrupterd_read_retry_buffered(self): |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2838 self.check_interrupted_read_retry(lambda x: x.decode('latin1'), |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2839 mode="rb") |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2840 |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2841 def test_interrupterd_read_retry_text(self): |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2842 self.check_interrupted_read_retry(lambda x: x, |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2843 mode="r") |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2844 |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2845 @unittest.skipUnless(threading, 'Threading required for this test.') |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2846 def check_interrupted_write_retry(self, item, **fdopen_kwargs): |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2847 """Check that a buffered write, when it gets interrupted (either |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2848 returning a partial result or EINTR), properly invokes the signal |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2849 handler and retries if the latter returned successfully.""" |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2850 select = support.import_module("select") |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2851 # A quantity that exceeds the buffer size of an anonymous pipe's |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2852 # write end. |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2853 N = 1024 * 1024 |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2854 r, w = os.pipe() |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2855 fdopen_kwargs["closefd"] = False |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2856 # We need a separate thread to read from the pipe and allow the |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2857 # write() to finish. This thread is started after the SIGALRM is |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2858 # received (forcing a first EINTR in write()). |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2859 read_results = [] |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2860 write_finished = False |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2861 def _read(): |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2862 while not write_finished: |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2863 while r in select.select([r], [], [], 1.0)[0]: |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2864 s = os.read(r, 1024) |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2865 read_results.append(s) |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2866 t = threading.Thread(target=_read) |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2867 t.daemon = True |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2868 def alarm1(sig, frame): |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2869 signal.signal(signal.SIGALRM, alarm2) |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2870 signal.alarm(1) |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2871 def alarm2(sig, frame): |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2872 t.start() |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2873 signal.signal(signal.SIGALRM, alarm1) |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2874 try: |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2875 wio = self.io.open(w, **fdopen_kwargs) |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2876 signal.alarm(1) |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2877 # Expected behaviour: |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2878 # - first raw write() is partial (because of the limited pipe buffer |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2879 # and the first alarm) |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2880 # - second raw write() returns EINTR (because of the second alarm) |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2881 # - subsequent write()s are successful (either partial or complete) |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2882 self.assertEqual(N, wio.write(item * N)) |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2883 wio.flush() |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2884 write_finished = True |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2885 t.join() |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2886 self.assertEqual(N, sum(len(x) for x in read_results)) |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2887 finally: |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2888 write_finished = True |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2889 os.close(w) |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2890 os.close(r) |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2891 # This is deliberate. If we didn't close the file descriptor |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2892 # before closing wio, wio would try to flush its internal |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2893 # buffer, and could block (in case of failure). |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2894 try: |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2895 wio.close() |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2896 except IOError as e: |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2897 if e.errno != errno.EBADF: |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2898 raise |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2899 |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2900 def test_interrupterd_write_retry_buffered(self): |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2901 self.check_interrupted_write_retry(b"x", mode="wb") |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2902 |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2903 def test_interrupterd_write_retry_text(self): |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2904 self.check_interrupted_write_retry("x", mode="w", encoding="latin1") |
|
675b48c4c88a
Merged revisions 88610 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67075
diff
changeset
|
2905 |
|
66660
5a723b7aefb7
Merged revisions 86981,86984 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66348
diff
changeset
|
2906 |
|
64209
dfd0229748ef
Merged revisions 84239 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63921
diff
changeset
|
2907 class CSignalsTest(SignalsTest): |
|
dfd0229748ef
Merged revisions 84239 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63921
diff
changeset
|
2908 io = io |
|
dfd0229748ef
Merged revisions 84239 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63921
diff
changeset
|
2909 |
|
dfd0229748ef
Merged revisions 84239 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63921
diff
changeset
|
2910 class PySignalsTest(SignalsTest): |
|
dfd0229748ef
Merged revisions 84239 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63921
diff
changeset
|
2911 io = pyio |
|
dfd0229748ef
Merged revisions 84239 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63921
diff
changeset
|
2912 |
|
66660
5a723b7aefb7
Merged revisions 86981,86984 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66348
diff
changeset
|
2913 # Handling reentrancy issues would slow down _pyio even more, so the |
|
5a723b7aefb7
Merged revisions 86981,86984 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66348
diff
changeset
|
2914 # tests are disabled. |
|
5a723b7aefb7
Merged revisions 86981,86984 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66348
diff
changeset
|
2915 test_reentrant_write_buffered = None |
|
5a723b7aefb7
Merged revisions 86981,86984 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66348
diff
changeset
|
2916 test_reentrant_write_text = None |
|
5a723b7aefb7
Merged revisions 86981,86984 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66348
diff
changeset
|
2917 |
|
50002
5ef8b5a74efa
Merged revisions 67245,67277,67289,67295,67301-67303,67307,67330,67332,67336,67355,67359,67362,67364,67367-67368,67370 via svnmerge from
Georg Brandl <georg@python.org>
parents:
49677
diff
changeset
|
2918 |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2919 def test_main(): |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2920 tests = (CIOTest, PyIOTest, |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2921 CBufferedReaderTest, PyBufferedReaderTest, |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2922 CBufferedWriterTest, PyBufferedWriterTest, |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2923 CBufferedRWPairTest, PyBufferedRWPairTest, |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2924 CBufferedRandomTest, PyBufferedRandomTest, |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2925 StatefulIncrementalDecoderTest, |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2926 CIncrementalNewlineDecoderTest, PyIncrementalNewlineDecoderTest, |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2927 CTextIOWrapperTest, PyTextIOWrapperTest, |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2928 CMiscIOTest, PyMiscIOTest, |
|
64209
dfd0229748ef
Merged revisions 84239 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63921
diff
changeset
|
2929 CSignalsTest, PySignalsTest, |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2930 ) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2931 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2932 # Put the namespaces of the IO module we are testing and some useful mock |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2933 # classes in the __dict__ of each test. |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2934 mocks = (MockRawIO, MisbehavedRawIO, MockFileIO, CloseFailureIO, |
|
64750
2b9dea2a2fff
Merged revisions 84814 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64706
diff
changeset
|
2935 MockNonBlockWriterIO, MockRawIOWithoutRead) |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2936 all_members = io.__all__ + ["IncrementalNewlineDecoder"] |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2937 c_io_ns = dict((name, getattr(io, name)) for name in all_members) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2938 py_io_ns = dict((name, getattr(pyio, name)) for name in all_members) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2939 globs = globals() |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2940 c_io_ns.update((x.__name__, globs["C" + x.__name__]) for x in mocks) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2941 py_io_ns.update((x.__name__, globs["Py" + x.__name__]) for x in mocks) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2942 # Avoid turning open into a bound method. |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2943 py_io_ns["open"] = pyio.OpenWrapper |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2944 for test in tests: |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2945 if test.__name__.startswith("C"): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2946 for name, obj in c_io_ns.items(): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2947 setattr(test, name, obj) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2948 elif test.__name__.startswith("Py"): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2949 for name, obj in py_io_ns.items(): |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2950 setattr(test, name, obj) |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2951 |
|
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2952 support.run_unittest(*tests) |
|
46107
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2953 |
|
5341b30b1812
Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2954 if __name__ == "__main__": |
|
54717
760a710eb6c1
Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents:
52701
diff
changeset
|
2955 test_main() |
