annotate Lib/test/test_fileio.py @ 54294:dba767bc3155 legacy-trunk

remove mention of old ctypes version
author Benjamin Peterson <benjamin@python.org>
date Sat, 23 May 2009 20:59:09 +0000
parents 9fd1d54f617c
children 0bd616dfc977 760a710eb6c1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
48016
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
1 # Adapted from test_file.py by Daniel Stutzbach
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
2 #from __future__ import unicode_literals
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
3
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
4 import sys
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
5 import os
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
6 import unittest
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
7 from array import array
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
8 from weakref import proxy
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
9
50914
caa79d238917 Merged revisions 68779 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50906
diff changeset
10 from test.test_support import (TESTFN, findfile, check_warnings, run_unittest,
caa79d238917 Merged revisions 68779 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50906
diff changeset
11 make_bad_fd)
48016
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
12 from UserList import UserList
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
13
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
14 import _fileio
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
15
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
16 class AutoFileTests(unittest.TestCase):
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
17 # file tests for which a test file is automatically set up
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
18
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
19 def setUp(self):
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
20 self.f = _fileio._FileIO(TESTFN, 'w')
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
21
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
22 def tearDown(self):
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
23 if self.f:
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
24 self.f.close()
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
25 os.remove(TESTFN)
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
26
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
27 def testWeakRefs(self):
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
28 # verify weak references
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
29 p = proxy(self.f)
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
30 p.write(bytes(range(10)))
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
31 self.assertEquals(self.f.tell(), p.tell())
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
32 self.f.close()
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
33 self.f = None
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
34 self.assertRaises(ReferenceError, getattr, p, 'tell')
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
35
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
36 def testSeekTell(self):
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
37 self.f.write(bytes(bytearray(range(20))))
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
38 self.assertEquals(self.f.tell(), 20)
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
39 self.f.seek(0)
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
40 self.assertEquals(self.f.tell(), 0)
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
41 self.f.seek(10)
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
42 self.assertEquals(self.f.tell(), 10)
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
43 self.f.seek(5, 1)
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
44 self.assertEquals(self.f.tell(), 15)
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
45 self.f.seek(-5, 1)
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
46 self.assertEquals(self.f.tell(), 10)
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
47 self.f.seek(-5, 2)
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
48 self.assertEquals(self.f.tell(), 15)
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
49
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
50 def testAttributes(self):
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
51 # verify expected attributes exist
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
52 f = self.f
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
53
50008
11bf59fe10b9 Merged revisions 67326,67498,67531-67532,67538,67553-67554,67556-67557 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49677
diff changeset
54 self.assertEquals(f.mode, "wb")
48016
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
55 self.assertEquals(f.closed, False)
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
56
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
57 # verify the attributes are readonly
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
58 for attr in 'mode', 'closed':
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
59 self.assertRaises((AttributeError, TypeError),
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
60 setattr, f, attr, 'oops')
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
61
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
62 def testReadinto(self):
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
63 # verify readinto
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
64 self.f.write(bytes(bytearray([1, 2])))
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
65 self.f.close()
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
66 a = array('b', b'x'*10)
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
67 self.f = _fileio._FileIO(TESTFN, 'r')
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
68 n = self.f.readinto(a)
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
69 self.assertEquals(array('b', [1, 2]), a[:n])
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
70
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
71 def testRepr(self):
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
72 self.assertEquals(repr(self.f),
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
73 "_fileio._FileIO(%d, %s)" % (self.f.fileno(),
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
74 repr(self.f.mode)))
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
75
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
76 def testErrors(self):
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
77 f = self.f
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
78 self.assert_(not f.isatty())
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
79 self.assert_(not f.closed)
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
80 #self.assertEquals(f.name, TESTFN)
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
81 self.assertRaises(ValueError, f.read, 10) # Open for reading
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
82 f.close()
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
83 self.assert_(f.closed)
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
84 f = _fileio._FileIO(TESTFN, 'r')
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
85 self.assertRaises(TypeError, f.readinto, "")
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
86 self.assert_(not f.closed)
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
87 f.close()
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
88 self.assert_(f.closed)
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
89
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
90 def testMethods(self):
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
91 methods = ['fileno', 'isatty', 'read', 'readinto',
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
92 'seek', 'tell', 'truncate', 'write', 'seekable',
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
93 'readable', 'writable']
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
94 if sys.platform.startswith('atheos'):
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
95 methods.remove('truncate')
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
96
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
97 self.f.close()
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
98 self.assert_(self.f.closed)
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
99
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
100 for methodname in methods:
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
101 method = getattr(self.f, methodname)
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
102 # should raise on closed file
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
103 self.assertRaises(ValueError, method)
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
104
48918
7b39501b0a76 #3703 unhelpful _fileio.FileIO error message when trying to open a directory
Benjamin Peterson <benjamin@python.org>
parents: 48859
diff changeset
105 def testOpendir(self):
7b39501b0a76 #3703 unhelpful _fileio.FileIO error message when trying to open a directory
Benjamin Peterson <benjamin@python.org>
parents: 48859
diff changeset
106 # Issue 3703: opening a directory should fill the errno
7b39501b0a76 #3703 unhelpful _fileio.FileIO error message when trying to open a directory
Benjamin Peterson <benjamin@python.org>
parents: 48859
diff changeset
107 # Windows always returns "[Errno 13]: Permission denied
7b39501b0a76 #3703 unhelpful _fileio.FileIO error message when trying to open a directory
Benjamin Peterson <benjamin@python.org>
parents: 48859
diff changeset
108 # Unix calls dircheck() and returns "[Errno 21]: Is a directory"
7b39501b0a76 #3703 unhelpful _fileio.FileIO error message when trying to open a directory
Benjamin Peterson <benjamin@python.org>
parents: 48859
diff changeset
109 try:
7b39501b0a76 #3703 unhelpful _fileio.FileIO error message when trying to open a directory
Benjamin Peterson <benjamin@python.org>
parents: 48859
diff changeset
110 _fileio._FileIO('.', 'r')
7b39501b0a76 #3703 unhelpful _fileio.FileIO error message when trying to open a directory
Benjamin Peterson <benjamin@python.org>
parents: 48859
diff changeset
111 except IOError as e:
7b39501b0a76 #3703 unhelpful _fileio.FileIO error message when trying to open a directory
Benjamin Peterson <benjamin@python.org>
parents: 48859
diff changeset
112 self.assertNotEqual(e.errno, 0)
50424
df3923c36ec5 Merged revisions 67952-67953,67955,67957-67958,67960-67961,67963,67965,67967,67970-67971,67973,67982,67988,67990,67995,68014,68016,68030,68057,68061,68112,68115-68118,68120-68121,68123-68128 via svnmerge from
Georg Brandl <georg@python.org>
parents: 50008
diff changeset
113 self.assertEqual(e.filename, ".")
48918
7b39501b0a76 #3703 unhelpful _fileio.FileIO error message when trying to open a directory
Benjamin Peterson <benjamin@python.org>
parents: 48859
diff changeset
114 else:
7b39501b0a76 #3703 unhelpful _fileio.FileIO error message when trying to open a directory
Benjamin Peterson <benjamin@python.org>
parents: 48859
diff changeset
115 self.fail("Should have raised IOError")
7b39501b0a76 #3703 unhelpful _fileio.FileIO error message when trying to open a directory
Benjamin Peterson <benjamin@python.org>
parents: 48859
diff changeset
116
48016
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
117
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
118 class OtherFileTests(unittest.TestCase):
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
119
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
120 def testAbles(self):
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
121 try:
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
122 f = _fileio._FileIO(TESTFN, "w")
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
123 self.assertEquals(f.readable(), False)
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
124 self.assertEquals(f.writable(), True)
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
125 self.assertEquals(f.seekable(), True)
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
126 f.close()
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
127
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
128 f = _fileio._FileIO(TESTFN, "r")
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
129 self.assertEquals(f.readable(), True)
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
130 self.assertEquals(f.writable(), False)
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
131 self.assertEquals(f.seekable(), True)
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
132 f.close()
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
133
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
134 f = _fileio._FileIO(TESTFN, "a+")
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
135 self.assertEquals(f.readable(), True)
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
136 self.assertEquals(f.writable(), True)
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
137 self.assertEquals(f.seekable(), True)
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
138 self.assertEquals(f.isatty(), False)
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
139 f.close()
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
140
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
141 if sys.platform != "win32":
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
142 try:
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
143 f = _fileio._FileIO("/dev/tty", "a")
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
144 except EnvironmentError:
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
145 # When run in a cron job there just aren't any
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
146 # ttys, so skip the test. This also handles other
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
147 # OS'es that don't support /dev/tty.
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
148 pass
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
149 else:
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
150 f = _fileio._FileIO("/dev/tty", "a")
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
151 self.assertEquals(f.readable(), False)
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
152 self.assertEquals(f.writable(), True)
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
153 if sys.platform != "darwin" and \
54279
9fd1d54f617c Merged revisions 72859 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 50914
diff changeset
154 'bsd' not in sys.platform and \
48016
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
155 not sys.platform.startswith('sunos'):
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
156 # Somehow /dev/tty appears seekable on some BSDs
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
157 self.assertEquals(f.seekable(), False)
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
158 self.assertEquals(f.isatty(), True)
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
159 f.close()
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
160 finally:
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
161 os.unlink(TESTFN)
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
162
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
163 def testModeStrings(self):
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
164 # check invalid mode strings
50008
11bf59fe10b9 Merged revisions 67326,67498,67531-67532,67538,67553-67554,67556-67557 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49677
diff changeset
165 for mode in ("", "aU", "wU+", "rw", "rt"):
48016
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
166 try:
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
167 f = _fileio._FileIO(TESTFN, mode)
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
168 except ValueError:
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
169 pass
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
170 else:
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
171 f.close()
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
172 self.fail('%r is an invalid file mode' % mode)
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
173
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
174 def testUnicodeOpen(self):
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
175 # verify repr works for unicode too
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
176 f = _fileio._FileIO(str(TESTFN), "w")
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
177 f.close()
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
178 os.unlink(TESTFN)
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
179
50906
aeb2bde203aa Merged revisions 68755 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50424
diff changeset
180 def testInvalidFd(self):
aeb2bde203aa Merged revisions 68755 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50424
diff changeset
181 self.assertRaises(ValueError, _fileio._FileIO, -10)
50914
caa79d238917 Merged revisions 68779 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50906
diff changeset
182 self.assertRaises(OSError, _fileio._FileIO, make_bad_fd())
50906
aeb2bde203aa Merged revisions 68755 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50424
diff changeset
183
48016
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
184 def testBadModeArgument(self):
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
185 # verify that we get a sensible error message for bad mode argument
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
186 bad_mode = "qwerty"
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
187 try:
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
188 f = _fileio._FileIO(TESTFN, bad_mode)
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
189 except ValueError as msg:
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
190 if msg.args[0] != 0:
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
191 s = str(msg)
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
192 if s.find(TESTFN) != -1 or s.find(bad_mode) == -1:
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
193 self.fail("bad error message for invalid mode: %s" % s)
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
194 # if msg.args[0] == 0, we're probably on Windows where there may be
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
195 # no obvious way to discover why open() failed.
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
196 else:
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
197 f.close()
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
198 self.fail("no error for invalid mode: %s" % bad_mode)
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
199
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
200 def testTruncateOnWindows(self):
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
201 def bug801631():
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
202 # SF bug <http://www.python.org/sf/801631>
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
203 # "file.truncate fault on windows"
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
204 f = _fileio._FileIO(TESTFN, 'w')
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
205 f.write(bytes(bytearray(range(11))))
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
206 f.close()
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
207
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
208 f = _fileio._FileIO(TESTFN,'r+')
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
209 data = f.read(5)
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
210 if data != bytes(bytearray(range(5))):
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
211 self.fail("Read on file opened for update failed %r" % data)
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
212 if f.tell() != 5:
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
213 self.fail("File pos after read wrong %d" % f.tell())
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
214
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
215 f.truncate()
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
216 if f.tell() != 5:
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
217 self.fail("File pos after ftruncate wrong %d" % f.tell())
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
218
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
219 f.close()
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
220 size = os.path.getsize(TESTFN)
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
221 if size != 5:
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
222 self.fail("File size after ftruncate wrong %d" % size)
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
223
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
224 try:
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
225 bug801631()
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
226 finally:
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
227 os.unlink(TESTFN)
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
228
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
229 def testAppend(self):
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
230 try:
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
231 f = open(TESTFN, 'wb')
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
232 f.write(b'spam')
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
233 f.close()
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
234 f = open(TESTFN, 'ab')
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
235 f.write(b'eggs')
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
236 f.close()
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
237 f = open(TESTFN, 'rb')
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
238 d = f.read()
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
239 f.close()
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
240 self.assertEqual(d, b'spameggs')
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
241 finally:
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
242 try:
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
243 os.unlink(TESTFN)
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
244 except:
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
245 pass
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
246
48859
de954dd6797b #3662: Fix segfault introduced when fixing memory leaks.
Neal Norwitz <nnorwitz@gmail.com>
parents: 48016
diff changeset
247 def testInvalidInit(self):
de954dd6797b #3662: Fix segfault introduced when fixing memory leaks.
Neal Norwitz <nnorwitz@gmail.com>
parents: 48016
diff changeset
248 self.assertRaises(TypeError, _fileio._FileIO, "1", 0, 0)
de954dd6797b #3662: Fix segfault introduced when fixing memory leaks.
Neal Norwitz <nnorwitz@gmail.com>
parents: 48016
diff changeset
249
49677
82ccc7e77ec5 Merged revisions 66801,66803-66804,66813,66854-66856,66866,66870-66872,66874,66887,66903,66905,66911,66913,66927,66932,66938,66942,66962,66964,66973-66974,66977,66992,66998-66999,67002,67005,67007,67028,67040-67041,67044,67070,67089,67091,67101,67117-67119,67123-67124 via svnmerge from
Georg Brandl <georg@python.org>
parents: 48918
diff changeset
250 def testWarnings(self):
82ccc7e77ec5 Merged revisions 66801,66803-66804,66813,66854-66856,66866,66870-66872,66874,66887,66903,66905,66911,66913,66927,66932,66938,66942,66962,66964,66973-66974,66977,66992,66998-66999,67002,67005,67007,67028,67040-67041,67044,67070,67089,67091,67101,67117-67119,67123-67124 via svnmerge from
Georg Brandl <georg@python.org>
parents: 48918
diff changeset
251 with check_warnings() as w:
82ccc7e77ec5 Merged revisions 66801,66803-66804,66813,66854-66856,66866,66870-66872,66874,66887,66903,66905,66911,66913,66927,66932,66938,66942,66962,66964,66973-66974,66977,66992,66998-66999,67002,67005,67007,67028,67040-67041,67044,67070,67089,67091,67101,67117-67119,67123-67124 via svnmerge from
Georg Brandl <georg@python.org>
parents: 48918
diff changeset
252 self.assertEqual(w.warnings, [])
82ccc7e77ec5 Merged revisions 66801,66803-66804,66813,66854-66856,66866,66870-66872,66874,66887,66903,66905,66911,66913,66927,66932,66938,66942,66962,66964,66973-66974,66977,66992,66998-66999,67002,67005,67007,67028,67040-67041,67044,67070,67089,67091,67101,67117-67119,67123-67124 via svnmerge from
Georg Brandl <georg@python.org>
parents: 48918
diff changeset
253 self.assertRaises(TypeError, _fileio._FileIO, [])
82ccc7e77ec5 Merged revisions 66801,66803-66804,66813,66854-66856,66866,66870-66872,66874,66887,66903,66905,66911,66913,66927,66932,66938,66942,66962,66964,66973-66974,66977,66992,66998-66999,67002,67005,67007,67028,67040-67041,67044,67070,67089,67091,67101,67117-67119,67123-67124 via svnmerge from
Georg Brandl <georg@python.org>
parents: 48918
diff changeset
254 self.assertEqual(w.warnings, [])
82ccc7e77ec5 Merged revisions 66801,66803-66804,66813,66854-66856,66866,66870-66872,66874,66887,66903,66905,66911,66913,66927,66932,66938,66942,66962,66964,66973-66974,66977,66992,66998-66999,67002,67005,67007,67028,67040-67041,67044,67070,67089,67091,67101,67117-67119,67123-67124 via svnmerge from
Georg Brandl <georg@python.org>
parents: 48918
diff changeset
255 self.assertRaises(ValueError, _fileio._FileIO, "/some/invalid/name", "rt")
82ccc7e77ec5 Merged revisions 66801,66803-66804,66813,66854-66856,66866,66870-66872,66874,66887,66903,66905,66911,66913,66927,66932,66938,66942,66962,66964,66973-66974,66977,66992,66998-66999,67002,67005,67007,67028,67040-67041,67044,67070,67089,67091,67101,67117-67119,67123-67124 via svnmerge from
Georg Brandl <georg@python.org>
parents: 48918
diff changeset
256 self.assertEqual(w.warnings, [])
82ccc7e77ec5 Merged revisions 66801,66803-66804,66813,66854-66856,66866,66870-66872,66874,66887,66903,66905,66911,66913,66927,66932,66938,66942,66962,66964,66973-66974,66977,66992,66998-66999,67002,67005,67007,67028,67040-67041,67044,67070,67089,67091,67101,67117-67119,67123-67124 via svnmerge from
Georg Brandl <georg@python.org>
parents: 48918
diff changeset
257
48859
de954dd6797b #3662: Fix segfault introduced when fixing memory leaks.
Neal Norwitz <nnorwitz@gmail.com>
parents: 48016
diff changeset
258
48016
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
259 def test_main():
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
260 # Historically, these tests have been sloppy about removing TESTFN.
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
261 # So get rid of it no matter what.
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
262 try:
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
263 run_unittest(AutoFileTests, OtherFileTests)
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
264 finally:
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
265 if os.path.exists(TESTFN):
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
266 os.unlink(TESTFN)
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
267
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
268 if __name__ == '__main__':
1b20afa48d58 backport test_fileio
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
269 test_main()