cpython/Lib/test/test_bufio.py
Barry Warsaw 408b6d34de Complete the absolute import patch for the test suite. All relative
imports of test modules now import from the test package.  Other
related oddities are also fixed (like DeprecationWarning filters that
weren't specifying the full import part, etc.).  Also did a general
code cleanup to remove all "from test.test_support import *"'s.  Other
from...import *'s weren't changed.
2002-07-30 23:27:12 +00:00

61 lines
1.9 KiB
Python

from test.test_support import verify, TestFailed, TESTFN
# 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