Update version number and release date.
[python/dscho.git] / Lib / test / test_file.py
blobbe1b2de88e9aa893fabd4fde492a202d7f5f2c81
1 import sys
2 import os
3 from array import array
5 from test.test_support import verify, TESTFN, TestFailed
6 from UserList import UserList
8 # verify writelines with instance sequence
9 l = UserList(['1', '2'])
10 f = open(TESTFN, 'wb')
11 f.writelines(l)
12 f.close()
13 f = open(TESTFN, 'rb')
14 buf = f.read()
15 f.close()
16 verify(buf == '12')
18 # verify readinto
19 a = array('c', 'x'*10)
20 f = open(TESTFN, 'rb')
21 n = f.readinto(a)
22 f.close()
23 verify(buf == a.tostring()[:n])
25 # verify writelines with integers
26 f = open(TESTFN, 'wb')
27 try:
28 f.writelines([1, 2, 3])
29 except TypeError:
30 pass
31 else:
32 print "writelines accepted sequence of integers"
33 f.close()
35 # verify writelines with integers in UserList
36 f = open(TESTFN, 'wb')
37 l = UserList([1,2,3])
38 try:
39 f.writelines(l)
40 except TypeError:
41 pass
42 else:
43 print "writelines accepted sequence of integers"
44 f.close()
46 # verify writelines with non-string object
47 class NonString: pass
49 f = open(TESTFN, 'wb')
50 try:
51 f.writelines([NonString(), NonString()])
52 except TypeError:
53 pass
54 else:
55 print "writelines accepted sequence of non-string objects"
56 f.close()
58 # verify that we get a sensible error message for bad mode argument
59 bad_mode = "qwerty"
60 try:
61 open(TESTFN, bad_mode)
62 except IOError, msg:
63 if msg[0] != 0:
64 s = str(msg)
65 if s.find(TESTFN) != -1 or s.find(bad_mode) == -1:
66 print "bad error message for invalid mode: %s" % s
67 # if msg[0] == 0, we're probably on Windows where there may be
68 # no obvious way to discover why open() failed.
69 else:
70 print "no error for invalid mode: %s" % bad_mode
72 f = open(TESTFN)
73 if f.name != TESTFN:
74 raise TestFailed, 'file.name should be "%s"' % TESTFN
75 if f.isatty():
76 raise TestFailed, 'file.isatty() should be false'
78 if f.closed:
79 raise TestFailed, 'file.closed should be false'
81 try:
82 f.readinto("")
83 except TypeError:
84 pass
85 else:
86 raise TestFailed, 'file.readinto("") should raise a TypeError'
88 f.close()
89 if not f.closed:
90 raise TestFailed, 'file.closed should be true'
92 methods = ['fileno', 'flush', 'isatty', 'next', 'read', 'readinto',
93 'readline', 'readlines', 'seek', 'tell', 'truncate', 'write',
94 'xreadlines', '__iter__']
95 if sys.platform.startswith('atheos'):
96 methods.remove('truncate')
98 for methodname in methods:
99 method = getattr(f, methodname)
100 try:
101 method()
102 except ValueError:
103 pass
104 else:
105 raise TestFailed, 'file.%s() on a closed file should raise a ValueError' % methodname
107 try:
108 f.writelines([])
109 except ValueError:
110 pass
111 else:
112 raise TestFailed, 'file.writelines([]) on a closed file should raise a ValueError'
114 os.unlink(TESTFN)