Skip to content
Projeler
Gruplar
Parçacıklar
Yardım
Yükleniyor...
Oturum aç / Kaydol
Gezinmeyi değiştir
C
cpython
Proje
Proje
Ayrıntılar
Etkinlik
Cycle Analytics
Depo (repository)
Depo (repository)
Dosyalar
Kayıtlar (commit)
Dallar (branch)
Etiketler
Katkıda bulunanlar
Grafik
Karşılaştır
Grafikler
Konular (issue)
0
Konular (issue)
0
Liste
Pano
Etiketler
Kilometre Taşları
Birleştirme (merge) Talepleri
0
Birleştirme (merge) Talepleri
0
CI / CD
CI / CD
İş akışları (pipeline)
İşler
Zamanlamalar
Grafikler
Paketler
Paketler
Wiki
Wiki
Parçacıklar
Parçacıklar
Üyeler
Üyeler
Collapse sidebar
Close sidebar
Etkinlik
Grafik
Grafikler
Yeni bir konu (issue) oluştur
İşler
Kayıtlar (commit)
Konu (issue) Panoları
Kenar çubuğunu aç
Batuhan Osman TASKAYA
cpython
Commits
442b49e9
Kaydet (Commit)
442b49e9
authored
Haz 08, 2006
tarafından
Georg Brandl
Dosyalara gözat
Seçenekler
Dosyalara Gözat
İndir
Eposta Yamaları
Sade Fark
Convert test_file to unittest.
üst
98b40ad5
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
175 additions
and
202 deletions
+175
-202
test_file.py
Lib/test/test_file.py
+175
-202
No files found.
Lib/test/test_file.py
Dosyayı görüntüle @
442b49e9
import
sys
import
os
import
unittest
from
array
import
array
from
weakref
import
proxy
from
test.test_support
import
verify
,
TESTFN
,
TestFailed
,
findfile
from
test.test_support
import
TESTFN
,
findfile
,
run_unittest
from
UserList
import
UserList
# verify weak references
f
=
file
(
TESTFN
,
'w'
)
p
=
proxy
(
f
)
p
.
write
(
'teststring'
)
verify
(
f
.
tell
(),
p
.
tell
())
f
.
close
()
f
=
None
try
:
p
.
tell
()
except
ReferenceError
:
pass
else
:
raise
TestFailed
(
'file proxy still exists when the file is gone'
)
# verify expected attributes exist
f
=
file
(
TESTFN
,
'w'
)
softspace
=
f
.
softspace
f
.
name
# merely shouldn't blow up
f
.
mode
# ditto
f
.
closed
# ditto
class
AutoFileTests
(
unittest
.
TestCase
):
# file tests for which a test file is automatically set up
# verify softspace is writable
f
.
softspace
=
softspace
# merely shouldn't blow up
def
setUp
(
self
):
self
.
f
=
file
(
TESTFN
,
'wb'
)
# verify the others aren't
for
attr
in
'name'
,
'mode'
,
'closed'
:
def
tearDown
(
self
):
try
:
setattr
(
f
,
attr
,
'oops'
)
except
(
AttributeError
,
TypeError
):
if
self
.
f
:
self
.
f
.
close
()
except
IOError
:
pass
else
:
raise
TestFailed
(
'expected exception setting file attr
%
r'
%
attr
)
f
.
close
()
# check invalid mode strings
for
mode
in
(
""
,
"aU"
,
"wU+"
):
def
testWeakRefs
(
self
):
# verify weak references
p
=
proxy
(
self
.
f
)
p
.
write
(
'teststring'
)
self
.
assertEquals
(
self
.
f
.
tell
(),
p
.
tell
())
self
.
f
.
close
()
self
.
f
=
None
self
.
assertRaises
(
ReferenceError
,
getattr
,
p
,
'tell'
)
def
testAttributes
(
self
):
# verify expected attributes exist
f
=
self
.
f
softspace
=
f
.
softspace
f
.
name
# merely shouldn't blow up
f
.
mode
# ditto
f
.
closed
# ditto
# verify softspace is writable
f
.
softspace
=
softspace
# merely shouldn't blow up
# verify the others aren't
for
attr
in
'name'
,
'mode'
,
'closed'
:
self
.
assertRaises
((
AttributeError
,
TypeError
),
setattr
,
f
,
attr
,
'oops'
)
def
testReadinto
(
self
):
# verify readinto
self
.
f
.
write
(
'12'
)
self
.
f
.
close
()
a
=
array
(
'c'
,
'x'
*
10
)
self
.
f
=
open
(
TESTFN
,
'rb'
)
n
=
self
.
f
.
readinto
(
a
)
self
.
assertEquals
(
'12'
,
a
.
tostring
()[:
n
])
def
testWritelinesUserList
(
self
):
# verify writelines with instance sequence
l
=
UserList
([
'1'
,
'2'
])
self
.
f
.
writelines
(
l
)
self
.
f
.
close
()
self
.
f
=
open
(
TESTFN
,
'rb'
)
buf
=
self
.
f
.
read
()
self
.
assertEquals
(
buf
,
'12'
)
def
testWritelinesIntegers
(
self
):
# verify writelines with integers
self
.
assertRaises
(
TypeError
,
self
.
f
.
writelines
,
[
1
,
2
,
3
])
def
testWritelinesIntegersUserList
(
self
):
# verify writelines with integers in UserList
l
=
UserList
([
1
,
2
,
3
])
self
.
assertRaises
(
TypeError
,
self
.
f
.
writelines
,
l
)
def
testWritelinesNonString
(
self
):
# verify writelines with non-string object
class
NonString
:
pass
self
.
assertRaises
(
TypeError
,
self
.
f
.
writelines
,
[
NonString
(),
NonString
()])
def
testRepr
(
self
):
# verify repr works
self
.
assert_
(
repr
(
self
.
f
)
.
startswith
(
"<open file '"
+
TESTFN
))
def
testErrors
(
self
):
f
=
self
.
f
self
.
assertEquals
(
f
.
name
,
TESTFN
)
self
.
assert_
(
not
f
.
isatty
())
self
.
assert_
(
not
f
.
closed
)
self
.
assertRaises
(
TypeError
,
f
.
readinto
,
""
)
f
.
close
()
self
.
assert_
(
f
.
closed
)
def
testMethods
(
self
):
methods
=
[
'fileno'
,
'flush'
,
'isatty'
,
'next'
,
'read'
,
'readinto'
,
'readline'
,
'readlines'
,
'seek'
,
'tell'
,
'truncate'
,
'write'
,
'xreadlines'
,
'__iter__'
]
if
sys
.
platform
.
startswith
(
'atheos'
):
methods
.
remove
(
'truncate'
)
self
.
f
.
close
()
for
methodname
in
methods
:
method
=
getattr
(
self
.
f
,
methodname
)
# should raise on closed file
self
.
assertRaises
(
ValueError
,
method
)
self
.
assertRaises
(
ValueError
,
self
.
f
.
writelines
,
[])
class
OtherFileTests
(
unittest
.
TestCase
):
def
testModeStrings
(
self
):
# check invalid mode strings
for
mode
in
(
""
,
"aU"
,
"wU+"
):
try
:
f
=
file
(
TESTFN
,
mode
)
except
ValueError
:
pass
else
:
f
.
close
()
raise
TestFailed
(
'
%
r is an invalid file mode'
%
mode
)
# verify writelines with instance sequence
l
=
UserList
([
'1'
,
'2'
])
f
=
open
(
TESTFN
,
'wb'
)
f
.
writelines
(
l
)
f
.
close
()
f
=
open
(
TESTFN
,
'rb'
)
buf
=
f
.
read
()
f
.
close
()
verify
(
buf
==
'12'
)
# verify readinto
a
=
array
(
'c'
,
'x'
*
10
)
f
=
open
(
TESTFN
,
'rb'
)
n
=
f
.
readinto
(
a
)
f
.
close
()
verify
(
buf
==
a
.
tostring
()[:
n
])
# verify writelines with integers
f
=
open
(
TESTFN
,
'wb'
)
try
:
f
.
writelines
([
1
,
2
,
3
])
except
TypeError
:
pass
else
:
print
"writelines accepted sequence of integers"
f
.
close
()
# verify writelines with integers in UserList
f
=
open
(
TESTFN
,
'wb'
)
l
=
UserList
([
1
,
2
,
3
])
try
:
f
.
writelines
(
l
)
except
TypeError
:
pass
else
:
print
"writelines accepted sequence of integers"
f
.
close
()
# verify writelines with non-string object
class
NonString
:
pass
self
.
fail
(
'
%
r is an invalid file mode'
%
mode
)
f
=
open
(
TESTFN
,
'wb'
)
try
:
f
.
writelines
([
NonString
(),
NonString
()])
except
TypeError
:
pass
else
:
print
"writelines accepted sequence of non-string objects"
f
.
close
()
# This causes the interpreter to exit on OSF1 v5.1.
if
sys
.
platform
!=
'osf1V5'
:
try
:
sys
.
stdin
.
seek
(
-
1
)
except
IOError
:
pass
def
testStdin
(
self
):
# This causes the interpreter to exit on OSF1 v5.1.
if
sys
.
platform
!=
'osf1V5'
:
self
.
assertRaises
(
IOError
,
sys
.
stdin
.
seek
,
-
1
)
else
:
print
"should not be able to seek on sys.stdin"
else
:
print
>>
sys
.
__stdout__
,
(
' Skipping sys.stdin.seek(-1), it may crash the interpreter.'
' Test manually.'
)
self
.
assertRaises
(
IOError
,
sys
.
stdin
.
truncate
)
try
:
sys
.
stdin
.
truncate
()
except
IOError
:
pass
else
:
print
"should not be able to truncate on sys.stdin"
# verify repr works
f
=
open
(
TESTFN
)
if
not
repr
(
f
)
.
startswith
(
"<open file '"
+
TESTFN
):
print
"repr(file) failed"
f
.
close
()
# verify repr works for unicode too
f
=
open
(
unicode
(
TESTFN
))
if
not
repr
(
f
)
.
startswith
(
"<open file u'"
+
TESTFN
):
print
"repr(file with unicode name) failed"
f
.
close
()
# verify that we get a sensible error message for bad mode argument
bad_mode
=
"qwerty"
try
:
open
(
TESTFN
,
bad_mode
)
except
ValueError
,
msg
:
def
testUnicodeOpen
(
self
):
# verify repr works for unicode too
f
=
open
(
unicode
(
TESTFN
),
"w"
)
self
.
assert_
(
repr
(
f
)
.
startswith
(
"<open file u'"
+
TESTFN
))
f
.
close
()
def
testBadModeArgument
(
self
):
# verify that we get a sensible error message for bad mode argument
bad_mode
=
"qwerty"
try
:
f
=
open
(
TESTFN
,
bad_mode
)
except
ValueError
,
msg
:
if
msg
[
0
]
!=
0
:
s
=
str
(
msg
)
if
s
.
find
(
TESTFN
)
!=
-
1
or
s
.
find
(
bad_mode
)
==
-
1
:
print
"bad error message for invalid mode:
%
s"
%
s
self
.
fail
(
"bad error message for invalid mode:
%
s"
%
s
)
# if msg[0] == 0, we're probably on Windows where there may be
# no obvious way to discover why open() failed.
else
:
print
"no error for invalid mode:
%
s"
%
bad_mode
f
=
open
(
TESTFN
)
if
f
.
name
!=
TESTFN
:
raise
TestFailed
,
'file.name should be "
%
s"'
%
TESTFN
if
f
.
isatty
():
raise
TestFailed
,
'file.isatty() should be false'
if
f
.
closed
:
raise
TestFailed
,
'file.closed should be false'
try
:
f
.
readinto
(
""
)
except
TypeError
:
pass
else
:
raise
TestFailed
,
'file.readinto("") should raise a TypeError'
f
.
close
()
if
not
f
.
closed
:
raise
TestFailed
,
'file.closed should be true'
else
:
f
.
close
()
self
.
fail
(
"no error for invalid mode:
%
s"
%
bad_mode
)
# make sure that explicitly setting the buffer size doesn't cause
# misbehaviour especially with repeated close() calls
for
s
in
(
-
1
,
0
,
1
,
512
):
def
testSetBufferSize
(
self
):
# make sure that explicitly setting the buffer size doesn't cause
# misbehaviour especially with repeated close() calls
for
s
in
(
-
1
,
0
,
1
,
512
):
try
:
f
=
open
(
TESTFN
,
'w'
,
s
)
f
.
write
(
str
(
s
))
...
...
@@ -179,35 +166,13 @@ for s in (-1, 0, 1, 512):
f
.
close
()
f
.
close
()
except
IOError
,
msg
:
raise
TestFailed
,
'error setting buffer size
%
d:
%
s'
%
(
s
,
str
(
msg
))
if
d
!=
s
:
raise
TestFailed
,
'readback failure using buffer size
%
d'
methods
=
[
'fileno'
,
'flush'
,
'isatty'
,
'next'
,
'read'
,
'readinto'
,
'readline'
,
'readlines'
,
'seek'
,
'tell'
,
'truncate'
,
'write'
,
'xreadlines'
,
'__iter__'
]
if
sys
.
platform
.
startswith
(
'atheos'
):
methods
.
remove
(
'truncate'
)
for
methodname
in
methods
:
method
=
getattr
(
f
,
methodname
)
try
:
method
()
except
ValueError
:
pass
else
:
raise
TestFailed
,
'file.
%
s() on a closed file should raise a ValueError'
%
methodname
self
.
fail
(
'error setting buffer size
%
d:
%
s'
%
(
s
,
str
(
msg
)))
self
.
assertEquals
(
d
,
s
)
try
:
f
.
writelines
([])
except
ValueError
:
pass
else
:
raise
TestFailed
,
'file.writelines([]) on a closed file should raise a ValueError'
os
.
unlink
(
TESTFN
)
def
testTruncateOnWindows
(
self
):
os
.
unlink
(
TESTFN
)
def
bug801631
():
def
bug801631
():
# SF bug <http://www.python.org/sf/801631>
# "file.truncate fault on windows"
f
=
file
(
TESTFN
,
'wb'
)
...
...
@@ -217,49 +182,50 @@ def bug801631():
f
=
file
(
TESTFN
,
'rb+'
)
data
=
f
.
read
(
5
)
if
data
!=
'12345'
:
raise
TestFailed
(
"Read on file opened for update failed
%
r"
%
data
)
self
.
fail
(
"Read on file opened for update failed
%
r"
%
data
)
if
f
.
tell
()
!=
5
:
raise
TestFailed
(
"File pos after read wrong
%
d"
%
f
.
tell
())
self
.
fail
(
"File pos after read wrong
%
d"
%
f
.
tell
())
f
.
truncate
()
if
f
.
tell
()
!=
5
:
raise
TestFailed
(
"File pos after ftruncate wrong
%
d"
%
f
.
tell
())
self
.
fail
(
"File pos after ftruncate wrong
%
d"
%
f
.
tell
())
f
.
close
()
size
=
os
.
path
.
getsize
(
TESTFN
)
if
size
!=
5
:
raise
TestFailed
(
"File size after ftruncate wrong
%
d"
%
size
)
self
.
fail
(
"File size after ftruncate wrong
%
d"
%
size
)
try
:
try
:
bug801631
()
finally
:
finally
:
os
.
unlink
(
TESTFN
)
# Test the complex interaction when mixing file-iteration and the various
# read* methods. Ostensibly, the mixture could just be tested to work
# when it should work according to the Python language, instead of fail
# when it should fail according to the current CPython implementation.
# People don't always program Python the way they should, though, and the
# implemenation might change in subtle ways, so we explicitly test for
# errors, too; the test will just have to be updated when the
# implementation changes.
dataoffset
=
16384
filler
=
"ham
\n
"
assert
not
dataoffset
%
len
(
filler
),
\
def
testIteration
(
self
):
# Test the complex interaction when mixing file-iteration and the various
# read* methods. Ostensibly, the mixture could just be tested to work
# when it should work according to the Python language, instead of fail
# when it should fail according to the current CPython implementation.
# People don't always program Python the way they should, though, and the
# implemenation might change in subtle ways, so we explicitly test for
# errors, too; the test will just have to be updated when the
# implementation changes.
dataoffset
=
16384
filler
=
"ham
\n
"
assert
not
dataoffset
%
len
(
filler
),
\
"dataoffset must be multiple of len(filler)"
nchunks
=
dataoffset
//
len
(
filler
)
testlines
=
[
nchunks
=
dataoffset
//
len
(
filler
)
testlines
=
[
"spam, spam and eggs
\n
"
,
"eggs, spam, ham and spam
\n
"
,
"saussages, spam, spam and eggs
\n
"
,
"spam, ham, spam and eggs
\n
"
,
"spam, spam, spam, spam, spam, ham, spam
\n
"
,
"wonderful spaaaaaam.
\n
"
]
methods
=
[(
"readline"
,
()),
(
"read"
,
()),
(
"readlines"
,
()),
]
methods
=
[(
"readline"
,
()),
(
"read"
,
()),
(
"readlines"
,
()),
(
"readinto"
,
(
array
(
"c"
,
" "
*
100
),))]
try
:
try
:
# Prepare the testfile
bag
=
open
(
TESTFN
,
"w"
)
bag
.
write
(
filler
*
nchunks
)
...
...
@@ -269,14 +235,14 @@ try:
for
methodname
,
args
in
methods
:
f
=
open
(
TESTFN
)
if
f
.
next
()
!=
filler
:
raise
TestFailed
,
"Broken testfile"
self
.
fail
,
"Broken testfile"
meth
=
getattr
(
f
,
methodname
)
try
:
meth
(
*
args
)
except
ValueError
:
pass
else
:
raise
TestFailed
(
"
%
s
%
r after next() didn't raise ValueError"
%
self
.
fail
(
"
%
s
%
r after next() didn't raise ValueError"
%
(
methodname
,
args
))
f
.
close
()
...
...
@@ -293,39 +259,39 @@ try:
try
:
line
=
f
.
readline
()
except
ValueError
:
raise
TestFailed
(
"readline() after next() with supposedly empty "
self
.
fail
(
"readline() after next() with supposedly empty "
"iteration-buffer failed anyway"
)
if
line
!=
testline
:
raise
TestFailed
(
"readline() after next() with empty buffer "
self
.
fail
(
"readline() after next() with empty buffer "
"failed. Got
%
r, expected
%
r"
%
(
line
,
testline
))
testline
=
testlines
.
pop
(
0
)
buf
=
array
(
"c"
,
"
\x00
"
*
len
(
testline
))
try
:
f
.
readinto
(
buf
)
except
ValueError
:
raise
TestFailed
(
"readinto() after next() with supposedly empty "
self
.
fail
(
"readinto() after next() with supposedly empty "
"iteration-buffer failed anyway"
)
line
=
buf
.
tostring
()
if
line
!=
testline
:
raise
TestFailed
(
"readinto() after next() with empty buffer "
self
.
fail
(
"readinto() after next() with empty buffer "
"failed. Got
%
r, expected
%
r"
%
(
line
,
testline
))
testline
=
testlines
.
pop
(
0
)
try
:
line
=
f
.
read
(
len
(
testline
))
except
ValueError
:
raise
TestFailed
(
"read() after next() with supposedly empty "
self
.
fail
(
"read() after next() with supposedly empty "
"iteration-buffer failed anyway"
)
if
line
!=
testline
:
raise
TestFailed
(
"read() after next() with empty buffer "
self
.
fail
(
"read() after next() with empty buffer "
"failed. Got
%
r, expected
%
r"
%
(
line
,
testline
))
try
:
lines
=
f
.
readlines
()
except
ValueError
:
raise
TestFailed
(
"readlines() after next() with supposedly empty "
self
.
fail
(
"readlines() after next() with supposedly empty "
"iteration-buffer failed anyway"
)
if
lines
!=
testlines
:
raise
TestFailed
(
"readlines() after next() with empty buffer "
self
.
fail
(
"readlines() after next() with empty buffer "
"failed. Got
%
r, expected
%
r"
%
(
line
,
testline
))
# Reading after iteration hit EOF shouldn't hurt either
f
=
open
(
TESTFN
)
...
...
@@ -338,8 +304,15 @@ try:
f
.
read
()
f
.
readlines
()
except
ValueError
:
raise
TestFailed
(
"read* failed after next() consumed file"
)
self
.
fail
(
"read* failed after next() consumed file"
)
finally
:
f
.
close
()
finally
:
finally
:
os
.
unlink
(
TESTFN
)
def
test_main
():
run_unittest
(
AutoFileTests
,
OtherFileTests
)
if
__name__
==
'__main__'
:
test_main
()
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment