annotate Lib/test/test_memoryio.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 d0ab34d4c733
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
46805
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
1 """Unit tests for memory-based file-like objects.
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
2 StringIO -- for unicode strings
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
3 BytesIO -- for bytes
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
4 """
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
5
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
6 from __future__ import unicode_literals
54717
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
7 from __future__ import print_function
46805
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
8
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
9 import unittest
54717
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
10 from test import test_support as support
46805
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
11
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
12 import io
54717
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
13 import _pyio as pyio
56703
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
14 import pickle
54717
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
15
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
16 class MemorySeekTestMixin:
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
17
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
18 def testInit(self):
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
19 buf = self.buftype("1234567890")
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
20 bytesIo = self.ioclass(buf)
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
21
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
22 def testRead(self):
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
23 buf = self.buftype("1234567890")
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
24 bytesIo = self.ioclass(buf)
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
25
66348
614c84670c63 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66303
diff changeset
26 self.assertEqual(buf[:1], bytesIo.read(1))
614c84670c63 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66303
diff changeset
27 self.assertEqual(buf[1:5], bytesIo.read(4))
614c84670c63 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66303
diff changeset
28 self.assertEqual(buf[5:], bytesIo.read(900))
614c84670c63 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66303
diff changeset
29 self.assertEqual(self.EOF, bytesIo.read())
54717
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
30
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
31 def testReadNoArgs(self):
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
32 buf = self.buftype("1234567890")
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
33 bytesIo = self.ioclass(buf)
46805
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
34
66348
614c84670c63 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66303
diff changeset
35 self.assertEqual(buf, bytesIo.read())
614c84670c63 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66303
diff changeset
36 self.assertEqual(self.EOF, bytesIo.read())
54717
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
37
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
38 def testSeek(self):
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
39 buf = self.buftype("1234567890")
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
40 bytesIo = self.ioclass(buf)
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
41
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
42 bytesIo.read(5)
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
43 bytesIo.seek(0)
66348
614c84670c63 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66303
diff changeset
44 self.assertEqual(buf, bytesIo.read())
54717
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
45
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
46 bytesIo.seek(3)
66348
614c84670c63 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66303
diff changeset
47 self.assertEqual(buf[3:], bytesIo.read())
54717
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
48 self.assertRaises(TypeError, bytesIo.seek, 0.0)
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
49
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
50 def testTell(self):
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
51 buf = self.buftype("1234567890")
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
52 bytesIo = self.ioclass(buf)
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
53
66348
614c84670c63 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66303
diff changeset
54 self.assertEqual(0, bytesIo.tell())
54717
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
55 bytesIo.seek(5)
66348
614c84670c63 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66303
diff changeset
56 self.assertEqual(5, bytesIo.tell())
54717
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
57 bytesIo.seek(10000)
66348
614c84670c63 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66303
diff changeset
58 self.assertEqual(10000, bytesIo.tell())
46805
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
59
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
60
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
61 class MemoryTestMixin:
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
62
54717
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
63 def test_detach(self):
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
64 buf = self.ioclass()
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
65 self.assertRaises(self.UnsupportedOperation, buf.detach)
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
66
46805
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
67 def write_ops(self, f, t):
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
68 self.assertEqual(f.write(t("blah.")), 5)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
69 self.assertEqual(f.seek(0), 0)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
70 self.assertEqual(f.write(t("Hello.")), 6)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
71 self.assertEqual(f.tell(), 6)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
72 self.assertEqual(f.seek(5), 5)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
73 self.assertEqual(f.tell(), 5)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
74 self.assertEqual(f.write(t(" world\n\n\n")), 9)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
75 self.assertEqual(f.seek(0), 0)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
76 self.assertEqual(f.write(t("h")), 1)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
77 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: 57083
diff changeset
78 self.assertEqual(f.tell(), 1)
46805
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
79
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
80 def test_write(self):
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
81 buf = self.buftype("hello world\n")
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
82 memio = self.ioclass(buf)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
83
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
84 self.write_ops(memio, self.buftype)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
85 self.assertEqual(memio.getvalue(), buf)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
86 memio = self.ioclass()
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
87 self.write_ops(memio, self.buftype)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
88 self.assertEqual(memio.getvalue(), buf)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
89 self.assertRaises(TypeError, memio.write, None)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
90 memio.close()
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
91 self.assertRaises(ValueError, memio.write, self.buftype(""))
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
92
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
93 def test_writelines(self):
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
94 buf = self.buftype("1234567890")
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
95 memio = self.ioclass()
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
96
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
97 self.assertEqual(memio.writelines([buf] * 100), None)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
98 self.assertEqual(memio.getvalue(), buf * 100)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
99 memio.writelines([])
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
100 self.assertEqual(memio.getvalue(), buf * 100)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
101 memio = self.ioclass()
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
102 self.assertRaises(TypeError, memio.writelines, [buf] + [1])
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
103 self.assertEqual(memio.getvalue(), buf)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
104 self.assertRaises(TypeError, memio.writelines, None)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
105 memio.close()
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
106 self.assertRaises(ValueError, memio.writelines, [])
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
107
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
108 def test_writelines_error(self):
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
109 memio = self.ioclass()
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
110 def error_gen():
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
111 yield self.buftype('spam')
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
112 raise KeyboardInterrupt
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
113
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
114 self.assertRaises(KeyboardInterrupt, memio.writelines, error_gen())
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
115
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
116 def test_truncate(self):
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
117 buf = self.buftype("1234567890")
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
118 memio = self.ioclass(buf)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
119
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
120 self.assertRaises(ValueError, memio.truncate, -1)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
121 memio.seek(6)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
122 self.assertEqual(memio.truncate(), 6)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
123 self.assertEqual(memio.getvalue(), buf[:6])
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
124 self.assertEqual(memio.truncate(4), 4)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
125 self.assertEqual(memio.getvalue(), buf[:4])
57083
6c13bf35d166 Issue #7249: Methods of io.BytesIO now allow `long` as well as `int` arguments.
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
126 # truncate() accepts long objects
6c13bf35d166 Issue #7249: Methods of io.BytesIO now allow `long` as well as `int` arguments.
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
127 self.assertEqual(memio.truncate(4L), 4)
6c13bf35d166 Issue #7249: Methods of io.BytesIO now allow `long` as well as `int` arguments.
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
128 self.assertEqual(memio.getvalue(), buf[:4])
58544
0bd616dfc977 Issue #6939: Fix file I/O objects in the `io` module to keep the original
Antoine Pitrou <solipsis@pitrou.net>
parents: 57083
diff changeset
129 self.assertEqual(memio.tell(), 6)
0bd616dfc977 Issue #6939: Fix file I/O objects in the `io` module to keep the original
Antoine Pitrou <solipsis@pitrou.net>
parents: 57083
diff changeset
130 memio.seek(0, 2)
46805
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
131 memio.write(buf)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
132 self.assertEqual(memio.getvalue(), buf[:4] + buf)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
133 pos = memio.tell()
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
134 self.assertEqual(memio.truncate(None), pos)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
135 self.assertEqual(memio.tell(), pos)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
136 self.assertRaises(TypeError, memio.truncate, '0')
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
137 memio.close()
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
138 self.assertRaises(ValueError, memio.truncate, 0)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
139
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
140 def test_init(self):
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
141 buf = self.buftype("1234567890")
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
142 memio = self.ioclass(buf)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
143 self.assertEqual(memio.getvalue(), buf)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
144 memio = self.ioclass(None)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
145 self.assertEqual(memio.getvalue(), self.EOF)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
146 memio.__init__(buf * 2)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
147 self.assertEqual(memio.getvalue(), buf * 2)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
148 memio.__init__(buf)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
149 self.assertEqual(memio.getvalue(), buf)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
150
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
151 def test_read(self):
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
152 buf = self.buftype("1234567890")
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
153 memio = self.ioclass(buf)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
154
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
155 self.assertEqual(memio.read(0), self.EOF)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
156 self.assertEqual(memio.read(1), buf[:1])
57083
6c13bf35d166 Issue #7249: Methods of io.BytesIO now allow `long` as well as `int` arguments.
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
157 # read() accepts long objects
6c13bf35d166 Issue #7249: Methods of io.BytesIO now allow `long` as well as `int` arguments.
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
158 self.assertEqual(memio.read(4L), buf[1:5])
46805
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
159 self.assertEqual(memio.read(900), buf[5:])
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
160 self.assertEqual(memio.read(), self.EOF)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
161 memio.seek(0)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
162 self.assertEqual(memio.read(), buf)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
163 self.assertEqual(memio.read(), self.EOF)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
164 self.assertEqual(memio.tell(), 10)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
165 memio.seek(0)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
166 self.assertEqual(memio.read(-1), buf)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
167 memio.seek(0)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
168 self.assertEqual(type(memio.read()), type(buf))
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
169 memio.seek(100)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
170 self.assertEqual(type(memio.read()), type(buf))
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
171 memio.seek(0)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
172 self.assertEqual(memio.read(None), buf)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
173 self.assertRaises(TypeError, memio.read, '')
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
174 memio.close()
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
175 self.assertRaises(ValueError, memio.read)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
176
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
177 def test_readline(self):
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
178 buf = self.buftype("1234567890\n")
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
179 memio = self.ioclass(buf * 2)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
180
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
181 self.assertEqual(memio.readline(0), self.EOF)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
182 self.assertEqual(memio.readline(), buf)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
183 self.assertEqual(memio.readline(), buf)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
184 self.assertEqual(memio.readline(), self.EOF)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
185 memio.seek(0)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
186 self.assertEqual(memio.readline(5), buf[:5])
57083
6c13bf35d166 Issue #7249: Methods of io.BytesIO now allow `long` as well as `int` arguments.
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
187 # readline() accepts long objects
6c13bf35d166 Issue #7249: Methods of io.BytesIO now allow `long` as well as `int` arguments.
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
188 self.assertEqual(memio.readline(5L), buf[5:10])
46805
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
189 self.assertEqual(memio.readline(5), buf[10:15])
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
190 memio.seek(0)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
191 self.assertEqual(memio.readline(-1), buf)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
192 memio.seek(0)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
193 self.assertEqual(memio.readline(0), self.EOF)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
194
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
195 buf = self.buftype("1234567890\n")
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
196 memio = self.ioclass((buf * 3)[:-1])
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
197 self.assertEqual(memio.readline(), buf)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
198 self.assertEqual(memio.readline(), buf)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
199 self.assertEqual(memio.readline(), buf[:-1])
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
200 self.assertEqual(memio.readline(), self.EOF)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
201 memio.seek(0)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
202 self.assertEqual(type(memio.readline()), type(buf))
54717
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
203 self.assertEqual(memio.readline(), buf)
46805
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
204 self.assertRaises(TypeError, memio.readline, '')
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
205 memio.close()
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
206 self.assertRaises(ValueError, memio.readline)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
207
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
208 def test_readlines(self):
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
209 buf = self.buftype("1234567890\n")
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
210 memio = self.ioclass(buf * 10)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
211
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
212 self.assertEqual(memio.readlines(), [buf] * 10)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
213 memio.seek(5)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
214 self.assertEqual(memio.readlines(), [buf[5:]] + [buf] * 9)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
215 memio.seek(0)
57083
6c13bf35d166 Issue #7249: Methods of io.BytesIO now allow `long` as well as `int` arguments.
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
216 # readlines() accepts long objects
6c13bf35d166 Issue #7249: Methods of io.BytesIO now allow `long` as well as `int` arguments.
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
217 self.assertEqual(memio.readlines(15L), [buf] * 2)
46805
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
218 memio.seek(0)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
219 self.assertEqual(memio.readlines(-1), [buf] * 10)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
220 memio.seek(0)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
221 self.assertEqual(memio.readlines(0), [buf] * 10)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
222 memio.seek(0)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
223 self.assertEqual(type(memio.readlines()[0]), type(buf))
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
224 memio.seek(0)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
225 self.assertEqual(memio.readlines(None), [buf] * 10)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
226 self.assertRaises(TypeError, memio.readlines, '')
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
227 memio.close()
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
228 self.assertRaises(ValueError, memio.readlines)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
229
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
230 def test_iterator(self):
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
231 buf = self.buftype("1234567890\n")
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
232 memio = self.ioclass(buf * 10)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
233
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
234 self.assertEqual(iter(memio), memio)
55002
6768b2350c57 convert usage of fail* to assert*
Benjamin Peterson <benjamin@python.org>
parents: 54717
diff changeset
235 self.assertTrue(hasattr(memio, '__iter__'))
6768b2350c57 convert usage of fail* to assert*
Benjamin Peterson <benjamin@python.org>
parents: 54717
diff changeset
236 self.assertTrue(hasattr(memio, 'next'))
46805
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
237 i = 0
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
238 for line in memio:
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
239 self.assertEqual(line, buf)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
240 i += 1
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
241 self.assertEqual(i, 10)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
242 memio.seek(0)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
243 i = 0
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
244 for line in memio:
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
245 self.assertEqual(line, buf)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
246 i += 1
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
247 self.assertEqual(i, 10)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
248 memio = self.ioclass(buf * 2)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
249 memio.close()
54717
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
250 self.assertRaises(ValueError, next, memio)
46805
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
251
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
252 def test_getvalue(self):
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
253 buf = self.buftype("1234567890")
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
254 memio = self.ioclass(buf)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
255
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
256 self.assertEqual(memio.getvalue(), buf)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
257 memio.read()
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
258 self.assertEqual(memio.getvalue(), buf)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
259 self.assertEqual(type(memio.getvalue()), type(buf))
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
260 memio = self.ioclass(buf * 1000)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
261 self.assertEqual(memio.getvalue()[-3:], self.buftype("890"))
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
262 memio = self.ioclass(buf)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
263 memio.close()
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
264 self.assertRaises(ValueError, memio.getvalue)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
265
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
266 def test_seek(self):
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
267 buf = self.buftype("1234567890")
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
268 memio = self.ioclass(buf)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
269
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
270 memio.read(5)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
271 self.assertRaises(ValueError, memio.seek, -1)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
272 self.assertRaises(ValueError, memio.seek, 1, -1)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
273 self.assertRaises(ValueError, memio.seek, 1, 3)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
274 self.assertEqual(memio.seek(0), 0)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
275 self.assertEqual(memio.seek(0, 0), 0)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
276 self.assertEqual(memio.read(), buf)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
277 self.assertEqual(memio.seek(3), 3)
57083
6c13bf35d166 Issue #7249: Methods of io.BytesIO now allow `long` as well as `int` arguments.
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
278 # seek() accepts long objects
6c13bf35d166 Issue #7249: Methods of io.BytesIO now allow `long` as well as `int` arguments.
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
279 self.assertEqual(memio.seek(3L), 3)
46805
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
280 self.assertEqual(memio.seek(0, 1), 3)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
281 self.assertEqual(memio.read(), buf[3:])
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
282 self.assertEqual(memio.seek(len(buf)), len(buf))
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
283 self.assertEqual(memio.read(), self.EOF)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
284 memio.seek(len(buf) + 1)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
285 self.assertEqual(memio.read(), self.EOF)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
286 self.assertEqual(memio.seek(0, 2), len(buf))
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
287 self.assertEqual(memio.read(), self.EOF)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
288 memio.close()
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
289 self.assertRaises(ValueError, memio.seek, 0)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
290
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
291 def test_overseek(self):
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
292 buf = self.buftype("1234567890")
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
293 memio = self.ioclass(buf)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
294
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
295 self.assertEqual(memio.seek(len(buf) + 1), 11)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
296 self.assertEqual(memio.read(), self.EOF)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
297 self.assertEqual(memio.tell(), 11)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
298 self.assertEqual(memio.getvalue(), buf)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
299 memio.write(self.EOF)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
300 self.assertEqual(memio.getvalue(), buf)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
301 memio.write(buf)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
302 self.assertEqual(memio.getvalue(), buf + self.buftype('\0') + buf)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
303
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
304 def test_tell(self):
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
305 buf = self.buftype("1234567890")
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
306 memio = self.ioclass(buf)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
307
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
308 self.assertEqual(memio.tell(), 0)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
309 memio.seek(5)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
310 self.assertEqual(memio.tell(), 5)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
311 memio.seek(10000)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
312 self.assertEqual(memio.tell(), 10000)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
313 memio.close()
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
314 self.assertRaises(ValueError, memio.tell)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
315
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
316 def test_flush(self):
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
317 buf = self.buftype("1234567890")
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
318 memio = self.ioclass(buf)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
319
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
320 self.assertEqual(memio.flush(), None)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
321
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
322 def test_flags(self):
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
323 memio = self.ioclass()
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
324
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
325 self.assertEqual(memio.writable(), True)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
326 self.assertEqual(memio.readable(), True)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
327 self.assertEqual(memio.seekable(), True)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
328 self.assertEqual(memio.isatty(), False)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
329 self.assertEqual(memio.closed, False)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
330 memio.close()
78854
d0ab34d4c733 Issue #15841: The readable(), writable() and seekable() methods of io.BytesIO
Antoine Pitrou <solipsis@pitrou.net>
parents: 78323
diff changeset
331 self.assertRaises(ValueError, memio.writable)
d0ab34d4c733 Issue #15841: The readable(), writable() and seekable() methods of io.BytesIO
Antoine Pitrou <solipsis@pitrou.net>
parents: 78323
diff changeset
332 self.assertRaises(ValueError, memio.readable)
d0ab34d4c733 Issue #15841: The readable(), writable() and seekable() methods of io.BytesIO
Antoine Pitrou <solipsis@pitrou.net>
parents: 78323
diff changeset
333 self.assertRaises(ValueError, memio.seekable)
46805
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
334 self.assertRaises(ValueError, memio.isatty)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
335 self.assertEqual(memio.closed, True)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
336
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
337 def test_subclassing(self):
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
338 buf = self.buftype("1234567890")
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
339 def test1():
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
340 class MemIO(self.ioclass):
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
341 pass
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
342 m = MemIO(buf)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
343 return m.getvalue()
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
344 def test2():
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
345 class MemIO(self.ioclass):
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
346 def __init__(me, a, b):
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
347 self.ioclass.__init__(me, a)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
348 m = MemIO(buf, None)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
349 return m.getvalue()
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
350 self.assertEqual(test1(), buf)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
351 self.assertEqual(test2(), buf)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
352
56699
2f307c7adb8f Manual py3k backport: [svn r74155] Issue #6242: Fix deallocator of io.StringIO and io.BytesIO
Antoine Pitrou <solipsis@pitrou.net>
parents: 56523
diff changeset
353 def test_instance_dict_leak(self):
2f307c7adb8f Manual py3k backport: [svn r74155] Issue #6242: Fix deallocator of io.StringIO and io.BytesIO
Antoine Pitrou <solipsis@pitrou.net>
parents: 56523
diff changeset
354 # Test case for issue #6242.
2f307c7adb8f Manual py3k backport: [svn r74155] Issue #6242: Fix deallocator of io.StringIO and io.BytesIO
Antoine Pitrou <solipsis@pitrou.net>
parents: 56523
diff changeset
355 # This will be caught by regrtest.py -R if this leak.
2f307c7adb8f Manual py3k backport: [svn r74155] Issue #6242: Fix deallocator of io.StringIO and io.BytesIO
Antoine Pitrou <solipsis@pitrou.net>
parents: 56523
diff changeset
356 for _ in range(100):
2f307c7adb8f Manual py3k backport: [svn r74155] Issue #6242: Fix deallocator of io.StringIO and io.BytesIO
Antoine Pitrou <solipsis@pitrou.net>
parents: 56523
diff changeset
357 memio = self.ioclass()
2f307c7adb8f Manual py3k backport: [svn r74155] Issue #6242: Fix deallocator of io.StringIO and io.BytesIO
Antoine Pitrou <solipsis@pitrou.net>
parents: 56523
diff changeset
358 memio.foo = 1
46805
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
359
56703
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
360 def test_pickling(self):
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
361 buf = self.buftype("1234567890")
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
362 memio = self.ioclass(buf)
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
363 memio.foo = 42
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
364 memio.seek(2)
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
365
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
366 class PickleTestMemIO(self.ioclass):
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
367 def __init__(me, initvalue, foo):
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
368 self.ioclass.__init__(me, initvalue)
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
369 me.foo = foo
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
370 # __getnewargs__ is undefined on purpose. This checks that PEP 307
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
371 # is used to provide pickling support.
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
372
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
373 # Pickle expects the class to be on the module level. Here we use a
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
374 # little hack to allow the PickleTestMemIO class to derive from
68588
cd8d3c2d3bce #11565: Fix several typos. Patch by Piotr Kasprzyk.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 68256
diff changeset
375 # self.ioclass without having to define all combinations explicitly on
56703
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
376 # the module-level.
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
377 import __main__
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
378 PickleTestMemIO.__module__ = '__main__'
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
379 __main__.PickleTestMemIO = PickleTestMemIO
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
380 submemio = PickleTestMemIO(buf, 80)
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
381 submemio.seek(2)
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
382
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
383 # We only support pickle protocol 2 and onward since we use extended
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
384 # __reduce__ API of PEP 307 to provide pickling support.
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
385 for proto in range(2, pickle.HIGHEST_PROTOCOL):
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
386 for obj in (memio, submemio):
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
387 obj2 = pickle.loads(pickle.dumps(obj, protocol=proto))
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
388 self.assertEqual(obj.getvalue(), obj2.getvalue())
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
389 self.assertEqual(obj.__class__, obj2.__class__)
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
390 self.assertEqual(obj.foo, obj2.foo)
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
391 self.assertEqual(obj.tell(), obj2.tell())
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
392 obj.close()
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
393 self.assertRaises(ValueError, pickle.dumps, obj, proto)
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
394 del __main__.PickleTestMemIO
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
395
46805
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
396
54717
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
397 class PyBytesIOTest(MemoryTestMixin, MemorySeekTestMixin, unittest.TestCase):
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
398
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
399 UnsupportedOperation = pyio.UnsupportedOperation
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
400
46805
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
401 @staticmethod
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
402 def buftype(s):
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
403 return s.encode("ascii")
54717
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
404 ioclass = pyio.BytesIO
46805
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
405 EOF = b""
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
406
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
407 def test_read1(self):
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
408 buf = self.buftype("1234567890")
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
409 memio = self.ioclass(buf)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
410
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
411 self.assertRaises(TypeError, memio.read1)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
412 self.assertEqual(memio.read(), buf)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
413
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
414 def test_readinto(self):
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
415 buf = self.buftype("1234567890")
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
416 memio = self.ioclass(buf)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
417
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
418 b = bytearray(b"hello")
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
419 self.assertEqual(memio.readinto(b), 5)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
420 self.assertEqual(b, b"12345")
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
421 self.assertEqual(memio.readinto(b), 5)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
422 self.assertEqual(b, b"67890")
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
423 self.assertEqual(memio.readinto(b), 0)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
424 self.assertEqual(b, b"67890")
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
425 b = bytearray(b"hello world")
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
426 memio.seek(0)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
427 self.assertEqual(memio.readinto(b), 10)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
428 self.assertEqual(b, b"1234567890d")
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
429 b = bytearray(b"")
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
430 memio.seek(0)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
431 self.assertEqual(memio.readinto(b), 0)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
432 self.assertEqual(b, b"")
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
433 self.assertRaises(TypeError, memio.readinto, '')
54717
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
434 import array
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
435 a = array.array(b'b', b"hello world")
46805
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
436 memio = self.ioclass(buf)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
437 memio.readinto(a)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
438 self.assertEqual(a.tostring(), b"1234567890d")
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
439 memio.close()
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
440 self.assertRaises(ValueError, memio.readinto, b)
66303
c404c2a346a5 Merged revisions 86587 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 59431
diff changeset
441 memio = self.ioclass(b"123")
c404c2a346a5 Merged revisions 86587 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 59431
diff changeset
442 b = bytearray()
c404c2a346a5 Merged revisions 86587 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 59431
diff changeset
443 memio.seek(42)
c404c2a346a5 Merged revisions 86587 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 59431
diff changeset
444 memio.readinto(b)
c404c2a346a5 Merged revisions 86587 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 59431
diff changeset
445 self.assertEqual(b, b"")
46805
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
446
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
447 def test_relative_seek(self):
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
448 buf = self.buftype("1234567890")
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
449 memio = self.ioclass(buf)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
450
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
451 self.assertEqual(memio.seek(-1, 1), 0)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
452 self.assertEqual(memio.seek(3, 1), 3)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
453 self.assertEqual(memio.seek(-4, 1), 0)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
454 self.assertEqual(memio.seek(-1, 2), 9)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
455 self.assertEqual(memio.seek(1, 1), 10)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
456 self.assertEqual(memio.seek(1, 2), 11)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
457 memio.seek(-3, 2)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
458 self.assertEqual(memio.read(), buf[-3:])
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
459 memio.seek(0)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
460 memio.seek(1, 1)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
461 self.assertEqual(memio.read(), buf[1:])
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
462
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
463 def test_unicode(self):
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
464 memio = self.ioclass()
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
465
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
466 self.assertRaises(TypeError, self.ioclass, "1234567890")
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
467 self.assertRaises(TypeError, memio.write, "1234567890")
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
468 self.assertRaises(TypeError, memio.writelines, ["1234567890"])
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
469
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
470 def test_bytes_array(self):
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
471 buf = b"1234567890"
54717
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
472 import array
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
473 a = array.array(b'b', buf)
46805
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
474 memio = self.ioclass(a)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
475 self.assertEqual(memio.getvalue(), buf)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
476 self.assertEqual(memio.write(a), 10)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
477 self.assertEqual(memio.getvalue(), buf)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
478
56704
ae02b168162c Manual py3k backport: [svn r74316] Issue #5449: Fix io.BytesIO to not accept arbitrary keywords
Antoine Pitrou <solipsis@pitrou.net>
parents: 56703
diff changeset
479 def test_issue5449(self):
ae02b168162c Manual py3k backport: [svn r74316] Issue #5449: Fix io.BytesIO to not accept arbitrary keywords
Antoine Pitrou <solipsis@pitrou.net>
parents: 56703
diff changeset
480 buf = self.buftype("1234567890")
ae02b168162c Manual py3k backport: [svn r74316] Issue #5449: Fix io.BytesIO to not accept arbitrary keywords
Antoine Pitrou <solipsis@pitrou.net>
parents: 56703
diff changeset
481 self.ioclass(initial_bytes=buf)
ae02b168162c Manual py3k backport: [svn r74316] Issue #5449: Fix io.BytesIO to not accept arbitrary keywords
Antoine Pitrou <solipsis@pitrou.net>
parents: 56703
diff changeset
482 self.assertRaises(TypeError, self.ioclass, buf, foo=None)
46805
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
483
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
484
56703
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
485 class TextIOTestMixin:
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
486
54717
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
487 def test_newlines_property(self):
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
488 memio = self.ioclass(newline=None)
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
489 # The C StringIO decodes newlines in write() calls, but the Python
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
490 # implementation only does when reading. This function forces them to
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
491 # be decoded for testing.
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
492 def force_decode():
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
493 memio.seek(0)
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
494 memio.read()
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
495 self.assertEqual(memio.newlines, None)
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
496 memio.write("a\n")
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
497 force_decode()
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
498 self.assertEqual(memio.newlines, "\n")
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
499 memio.write("b\r\n")
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
500 force_decode()
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
501 self.assertEqual(memio.newlines, ("\n", "\r\n"))
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
502 memio.write("c\rd")
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
503 force_decode()
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
504 self.assertEqual(memio.newlines, ("\r", "\n", "\r\n"))
46805
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
505
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
506 def test_relative_seek(self):
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
507 memio = self.ioclass()
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
508
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
509 self.assertRaises(IOError, memio.seek, -1, 1)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
510 self.assertRaises(IOError, memio.seek, 3, 1)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
511 self.assertRaises(IOError, memio.seek, -3, 1)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
512 self.assertRaises(IOError, memio.seek, -1, 2)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
513 self.assertRaises(IOError, memio.seek, 1, 1)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
514 self.assertRaises(IOError, memio.seek, 1, 2)
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
515
54717
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
516 def test_textio_properties(self):
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
517 memio = self.ioclass()
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
518
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
519 # These are just dummy values but we nevertheless check them for fear
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
520 # of unexpected breakage.
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
521 self.assertIsNone(memio.encoding)
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
522 self.assertIsNone(memio.errors)
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
523 self.assertFalse(memio.line_buffering)
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
524
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
525 def test_newline_none(self):
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
526 # newline=None
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
527 memio = self.ioclass("a\nb\r\nc\rd", newline=None)
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
528 self.assertEqual(list(memio), ["a\n", "b\n", "c\n", "d"])
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
529 memio.seek(0)
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
530 self.assertEqual(memio.read(1), "a")
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
531 self.assertEqual(memio.read(2), "\nb")
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
532 self.assertEqual(memio.read(2), "\nc")
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
533 self.assertEqual(memio.read(1), "\n")
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
534 memio = self.ioclass(newline=None)
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
535 self.assertEqual(2, memio.write("a\n"))
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
536 self.assertEqual(3, memio.write("b\r\n"))
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
537 self.assertEqual(3, memio.write("c\rd"))
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
538 memio.seek(0)
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
539 self.assertEqual(memio.read(), "a\nb\nc\nd")
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
540 memio = self.ioclass("a\r\nb", newline=None)
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
541 self.assertEqual(memio.read(3), "a\nb")
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
542
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
543 def test_newline_empty(self):
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
544 # newline=""
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
545 memio = self.ioclass("a\nb\r\nc\rd", newline="")
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
546 self.assertEqual(list(memio), ["a\n", "b\r\n", "c\r", "d"])
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
547 memio.seek(0)
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
548 self.assertEqual(memio.read(4), "a\nb\r")
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
549 self.assertEqual(memio.read(2), "\nc")
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
550 self.assertEqual(memio.read(1), "\r")
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
551 memio = self.ioclass(newline="")
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
552 self.assertEqual(2, memio.write("a\n"))
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
553 self.assertEqual(2, memio.write("b\r"))
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
554 self.assertEqual(2, memio.write("\nc"))
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
555 self.assertEqual(2, memio.write("\rd"))
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
556 memio.seek(0)
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
557 self.assertEqual(list(memio), ["a\n", "b\r\n", "c\r", "d"])
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
558
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
559 def test_newline_lf(self):
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
560 # newline="\n"
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
561 memio = self.ioclass("a\nb\r\nc\rd")
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
562 self.assertEqual(list(memio), ["a\n", "b\r\n", "c\rd"])
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
563
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
564 def test_newline_cr(self):
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
565 # newline="\r"
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
566 memio = self.ioclass("a\nb\r\nc\rd", newline="\r")
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
567 self.assertEqual(memio.read(), "a\rb\r\rc\rd")
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
568 memio.seek(0)
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
569 self.assertEqual(list(memio), ["a\r", "b\r", "\r", "c\r", "d"])
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
570
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
571 def test_newline_crlf(self):
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
572 # newline="\r\n"
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
573 memio = self.ioclass("a\nb\r\nc\rd", newline="\r\n")
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
574 self.assertEqual(memio.read(), "a\r\nb\r\r\nc\rd")
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
575 memio.seek(0)
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
576 self.assertEqual(list(memio), ["a\r\n", "b\r\r\n", "c\rd"])
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
577
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
578 def test_issue5265(self):
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
579 # StringIO can duplicate newlines in universal newlines mode
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
580 memio = self.ioclass("a\r\nb\r\n", newline=None)
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
581 self.assertEqual(memio.read(5), "a\nb\n")
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
582
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
583
56703
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
584 class PyStringIOTest(MemoryTestMixin, MemorySeekTestMixin,
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
585 TextIOTestMixin, unittest.TestCase):
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
586 buftype = unicode
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
587 ioclass = pyio.StringIO
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
588 UnsupportedOperation = pyio.UnsupportedOperation
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
589 EOF = ""
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
590
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
591
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
592 class PyStringIOPickleTest(TextIOTestMixin, unittest.TestCase):
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
593 """Test if pickle restores properly the internal state of StringIO.
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
594 """
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
595 buftype = unicode
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
596 UnsupportedOperation = pyio.UnsupportedOperation
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
597 EOF = ""
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
598
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
599 class ioclass(pyio.StringIO):
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
600 def __new__(cls, *args, **kwargs):
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
601 return pickle.loads(pickle.dumps(pyio.StringIO(*args, **kwargs)))
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
602 def __init__(self, *args, **kwargs):
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
603 pass
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
604
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
605
54717
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
606 class CBytesIOTest(PyBytesIOTest):
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
607 ioclass = io.BytesIO
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
608 UnsupportedOperation = io.UnsupportedOperation
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
609
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
610 test_bytes_array = unittest.skip(
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
611 "array.array() does not have the new buffer API"
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
612 )(PyBytesIOTest.test_bytes_array)
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
613
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
614
56703
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
615 def test_getstate(self):
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
616 memio = self.ioclass()
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
617 state = memio.__getstate__()
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
618 self.assertEqual(len(state), 3)
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
619 bytearray(state[0]) # Check if state[0] supports the buffer interface.
58472
6ffcdafa0118 use assert[Not]IsInstance where appropriate
Ezio Melotti <ezio.melotti@gmail.com>
parents: 57081
diff changeset
620 self.assertIsInstance(state[1], int)
66348
614c84670c63 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66303
diff changeset
621 self.assertTrue(isinstance(state[2], dict) or state[2] is None)
56703
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
622 memio.close()
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
623 self.assertRaises(ValueError, memio.__getstate__)
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
624
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
625 def test_setstate(self):
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
626 # This checks whether __setstate__ does proper input validation.
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
627 memio = self.ioclass()
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
628 memio.__setstate__((b"no error", 0, None))
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
629 memio.__setstate__((bytearray(b"no error"), 0, None))
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
630 memio.__setstate__((b"no error", 0, {'spam': 3}))
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
631 self.assertRaises(ValueError, memio.__setstate__, (b"", -1, None))
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
632 self.assertRaises(TypeError, memio.__setstate__, ("unicode", 0, None))
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
633 self.assertRaises(TypeError, memio.__setstate__, (b"", 0.0, None))
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
634 self.assertRaises(TypeError, memio.__setstate__, (b"", 0, 0))
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
635 self.assertRaises(TypeError, memio.__setstate__, (b"len-test", 0))
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
636 self.assertRaises(TypeError, memio.__setstate__)
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
637 self.assertRaises(TypeError, memio.__setstate__, 0)
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
638 memio.close()
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
639 self.assertRaises(ValueError, memio.__setstate__, (b"closed", 0, None))
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
640
78323
e8851809ae83 Issue #15489: Add a __sizeof__ implementation for BytesIO objects.
Antoine Pitrou <solipsis@pitrou.net>
parents: 68588
diff changeset
641 check_sizeof = support.check_sizeof
e8851809ae83 Issue #15489: Add a __sizeof__ implementation for BytesIO objects.
Antoine Pitrou <solipsis@pitrou.net>
parents: 68588
diff changeset
642
e8851809ae83 Issue #15489: Add a __sizeof__ implementation for BytesIO objects.
Antoine Pitrou <solipsis@pitrou.net>
parents: 68588
diff changeset
643 @support.cpython_only
e8851809ae83 Issue #15489: Add a __sizeof__ implementation for BytesIO objects.
Antoine Pitrou <solipsis@pitrou.net>
parents: 68588
diff changeset
644 def test_sizeof(self):
e8851809ae83 Issue #15489: Add a __sizeof__ implementation for BytesIO objects.
Antoine Pitrou <solipsis@pitrou.net>
parents: 68588
diff changeset
645 basesize = support.calcobjsize(b'P2PP2P')
e8851809ae83 Issue #15489: Add a __sizeof__ implementation for BytesIO objects.
Antoine Pitrou <solipsis@pitrou.net>
parents: 68588
diff changeset
646 check = self.check_sizeof
e8851809ae83 Issue #15489: Add a __sizeof__ implementation for BytesIO objects.
Antoine Pitrou <solipsis@pitrou.net>
parents: 68588
diff changeset
647 self.assertEqual(object.__sizeof__(io.BytesIO()), basesize)
e8851809ae83 Issue #15489: Add a __sizeof__ implementation for BytesIO objects.
Antoine Pitrou <solipsis@pitrou.net>
parents: 68588
diff changeset
648 check(io.BytesIO(), basesize )
e8851809ae83 Issue #15489: Add a __sizeof__ implementation for BytesIO objects.
Antoine Pitrou <solipsis@pitrou.net>
parents: 68588
diff changeset
649 check(io.BytesIO(b'a'), basesize + 1 + 1 )
e8851809ae83 Issue #15489: Add a __sizeof__ implementation for BytesIO objects.
Antoine Pitrou <solipsis@pitrou.net>
parents: 68588
diff changeset
650 check(io.BytesIO(b'a' * 1000), basesize + 1000 + 1 )
e8851809ae83 Issue #15489: Add a __sizeof__ implementation for BytesIO objects.
Antoine Pitrou <solipsis@pitrou.net>
parents: 68588
diff changeset
651
54717
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
652 class CStringIOTest(PyStringIOTest):
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
653 ioclass = io.StringIO
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
654 UnsupportedOperation = io.UnsupportedOperation
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
655
46805
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
656 # XXX: For the Python version of io.StringIO, this is highly
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
657 # dependent on the encoding used for the underlying buffer.
54717
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
658 def test_widechar(self):
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
659 buf = self.buftype("\U0002030a\U00020347")
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
660 memio = self.ioclass(buf)
46805
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
661
54717
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
662 self.assertEqual(memio.getvalue(), buf)
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
663 self.assertEqual(memio.write(buf), len(buf))
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
664 self.assertEqual(memio.tell(), len(buf))
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
665 self.assertEqual(memio.getvalue(), buf)
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
666 self.assertEqual(memio.write(buf), len(buf))
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
667 self.assertEqual(memio.tell(), len(buf) * 2)
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
668 self.assertEqual(memio.getvalue(), buf + buf)
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
669
56703
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
670 def test_getstate(self):
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
671 memio = self.ioclass()
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
672 state = memio.__getstate__()
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
673 self.assertEqual(len(state), 4)
58472
6ffcdafa0118 use assert[Not]IsInstance where appropriate
Ezio Melotti <ezio.melotti@gmail.com>
parents: 57081
diff changeset
674 self.assertIsInstance(state[0], unicode)
6ffcdafa0118 use assert[Not]IsInstance where appropriate
Ezio Melotti <ezio.melotti@gmail.com>
parents: 57081
diff changeset
675 self.assertIsInstance(state[1], str)
6ffcdafa0118 use assert[Not]IsInstance where appropriate
Ezio Melotti <ezio.melotti@gmail.com>
parents: 57081
diff changeset
676 self.assertIsInstance(state[2], int)
66348
614c84670c63 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66303
diff changeset
677 self.assertTrue(isinstance(state[3], dict) or state[3] is None)
56703
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
678 memio.close()
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
679 self.assertRaises(ValueError, memio.__getstate__)
46805
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
680
56703
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
681 def test_setstate(self):
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
682 # This checks whether __setstate__ does proper input validation.
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
683 memio = self.ioclass()
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
684 memio.__setstate__(("no error", "\n", 0, None))
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
685 memio.__setstate__(("no error", "", 0, {'spam': 3}))
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
686 self.assertRaises(ValueError, memio.__setstate__, ("", "f", 0, None))
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
687 self.assertRaises(ValueError, memio.__setstate__, ("", "", -1, None))
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
688 self.assertRaises(TypeError, memio.__setstate__, (b"", "", 0, None))
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
689 # trunk is more tolerant than py3k on the type of the newline param
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
690 #self.assertRaises(TypeError, memio.__setstate__, ("", b"", 0, None))
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
691 self.assertRaises(TypeError, memio.__setstate__, ("", "", 0.0, None))
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
692 self.assertRaises(TypeError, memio.__setstate__, ("", "", 0, 0))
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
693 self.assertRaises(TypeError, memio.__setstate__, ("len-test", 0))
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
694 self.assertRaises(TypeError, memio.__setstate__)
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
695 self.assertRaises(TypeError, memio.__setstate__, 0)
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
696 memio.close()
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
697 self.assertRaises(ValueError, memio.__setstate__, ("closed", "", 0, None))
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
698
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
699
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
700 class CStringIOPickleTest(PyStringIOPickleTest):
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
701 UnsupportedOperation = io.UnsupportedOperation
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
702
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
703 class ioclass(io.StringIO):
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
704 def __new__(cls, *args, **kwargs):
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
705 return pickle.loads(pickle.dumps(io.StringIO(*args, **kwargs),
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
706 protocol=2))
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
707 def __init__(self, *args, **kwargs):
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
708 pass
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
709
46805
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
710
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
711 def test_main():
56703
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
712 tests = [PyBytesIOTest, PyStringIOTest, CBytesIOTest, CStringIOTest,
264609fbda48 Manual py3k backport: [svn r74158] Issue #6218: Make io.BytesIO and io.StringIO picklable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56699
diff changeset
713 PyStringIOPickleTest, CStringIOPickleTest]
54717
760a710eb6c1 Issue #6215: backport the 3.1 io lib
Antoine Pitrou <solipsis@pitrou.net>
parents: 46805
diff changeset
714 support.run_unittest(*tests)
46805
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
715
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
716 if __name__ == '__main__':
4c5ee1b38045 Backport fast alternate io.BytesIO implementation.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff changeset
717 test_main()