- Got rid of newmodule.c
[python/dscho.git] / Lib / test / test_file.py
blob261db2ccb6216236d52b076129dad2f55810620e
1 import sys
2 import os
3 from array import array
5 from 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', 'read', 'readinto', 'readline', 'readlines', 'seek', 'tell', 'truncate', 'write', 'xreadlines' ]
93 if sys.platform.startswith('atheos'):
94 methods.remove('truncate')
96 for methodname in methods:
97 method = getattr(f, methodname)
98 try:
99 method()
100 except ValueError:
101 pass
102 else:
103 raise TestFailed, 'file.%s() on a closed file should raise a ValueError' % methodname
105 try:
106 f.writelines([])
107 except ValueError:
108 pass
109 else:
110 raise TestFailed, 'file.writelines([]) on a closed file should raise a ValueError'
112 os.unlink(TESTFN)