Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cpython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cpython
Commits
a9fbc26b
Commit
a9fbc26b
authored
Oct 28, 2006
by
Walter Dörwald
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Port test_bufio to unittest.
parent
b6b17f4e
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
61 additions
and
55 deletions
+61
-55
Lib/test/test_bufio.py
Lib/test/test_bufio.py
+61
-55
No files found.
Lib/test/test_bufio.py
View file @
a9fbc26b
from
test.test_support
import
verify
,
TestFailed
,
TESTFN
import
unittest
from
test
import
test_support
# Simple test to ensure that optimizations in fileobject.c deliver
# the expected results. For best testing, run this under a debug-build
# Python too (to exercise asserts in the C code).
# Repeat string 'pattern' as often as needed to reach total length
# 'length'. Then call try_one with that string, a string one larger
# than that, and a string one smaller than that. The main driver
# feeds this all small sizes and various powers of 2, so we exercise
# all likely stdio buffer sizes, and "off by one" errors on both
# sides.
def
drive_one
(
pattern
,
length
):
q
,
r
=
divmod
(
length
,
len
(
pattern
))
teststring
=
pattern
*
q
+
pattern
[:
r
]
verify
(
len
(
teststring
)
==
length
)
try_one
(
teststring
)
try_one
(
teststring
+
"x"
)
try_one
(
teststring
[:
-
1
])
# Write s + "\n" + s to file, then open it and ensure that successive
# .readline()s deliver what we wrote.
def
try_one
(
s
):
# Since C doesn't guarantee we can write/read arbitrary bytes in text
# files, use binary mode.
f
=
open
(
TESTFN
,
"wb"
)
# write once with \n and once without
f
.
write
(
s
)
f
.
write
(
"
\
n
"
)
f
.
write
(
s
)
f
.
close
()
f
=
open
(
TESTFN
,
"rb"
)
line
=
f
.
readline
()
if
line
!=
s
+
"
\
n
"
:
raise
TestFailed
(
"Expected %r got %r"
%
(
s
+
"
\
n
"
,
line
))
line
=
f
.
readline
()
if
line
!=
s
:
raise
TestFailed
(
"Expected %r got %r"
%
(
s
,
line
))
line
=
f
.
readline
()
if
line
:
raise
TestFailed
(
"Expected EOF but got %r"
%
line
)
f
.
close
()
# A pattern with prime length, to avoid simple relationships with
# stdio buffer sizes.
primepat
=
"1234567890
\
00
\
01
\
02
\
03
\
04
\
05
\
06
"
nullpat
=
"
\
0
"
*
1000
try
:
for
size
in
range
(
1
,
257
)
+
[
512
,
1000
,
1024
,
2048
,
4096
,
8192
,
10000
,
16384
,
32768
,
65536
,
1000000
]:
drive_one
(
primepat
,
size
)
drive_one
(
nullpat
,
size
)
finally
:
try
:
import
os
os
.
unlink
(
TESTFN
)
except
:
pass
lengths
=
range
(
1
,
257
)
+
[
512
,
1000
,
1024
,
2048
,
4096
,
8192
,
10000
,
16384
,
32768
,
65536
,
1000000
]
class
BufferSizeTest
(
unittest
.
TestCase
):
def
try_one
(
self
,
s
):
# Write s + "\n" + s to file, then open it and ensure that successive
# .readline()s deliver what we wrote.
# Since C doesn't guarantee we can write/read arbitrary bytes in text
# files, use binary mode.
f
=
open
(
test_support
.
TESTFN
,
"wb"
)
try
:
# write once with \n and once without
f
.
write
(
s
)
f
.
write
(
"
\
n
"
)
f
.
write
(
s
)
f
.
close
()
f
=
open
(
test_support
.
TESTFN
,
"rb"
)
line
=
f
.
readline
()
self
.
assertEqual
(
line
,
s
+
"
\
n
"
)
line
=
f
.
readline
()
self
.
assertEqual
(
line
,
s
)
line
=
f
.
readline
()
self
.
assert_
(
not
line
)
# Must be at EOF
f
.
close
()
finally
:
try
:
import
os
os
.
unlink
(
test_support
.
TESTFN
)
except
:
pass
def
drive_one
(
self
,
pattern
):
for
length
in
lengths
:
# Repeat string 'pattern' as often as needed to reach total length
# 'length'. Then call try_one with that string, a string one larger
# than that, and a string one smaller than that. Try this with all
# small sizes and various powers of 2, so we exercise all likely
# stdio buffer sizes, and "off by one" errors on both sides.
q
,
r
=
divmod
(
length
,
len
(
pattern
))
teststring
=
pattern
*
q
+
pattern
[:
r
]
self
.
assertEqual
(
len
(
teststring
),
length
)
self
.
try_one
(
teststring
)
self
.
try_one
(
teststring
+
"x"
)
self
.
try_one
(
teststring
[:
-
1
])
def
test_primepat
(
self
):
# A pattern with prime length, to avoid simple relationships with
# stdio buffer sizes.
self
.
drive_one
(
"1234567890
\
00
\
01
\
02
\
03
\
04
\
05
\
06
"
)
def
test_nullpat
(
self
):
self
.
drive_one
(
"
\
0
"
*
1000
)
def
test_main
():
test_support
.
run_unittest
(
BufferSizeTest
)
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