lib-python.2.5.test.test_bufio.py Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jython Show documentation
Show all versions of jython Show documentation
Jython is an implementation of the high-level, dynamic, object-oriented
language Python written in 100% Pure Java, and seamlessly integrated with
the Java platform. It thus allows you to run Python on any Java platform.
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