62 lines
1.5 KiB
Python
62 lines
1.5 KiB
Python
# #
|
|
# # This file is placed under the public domain.
|
|
# #
|
|
"""Utility functions for the tests."""
|
|
import os
|
|
import sys
|
|
|
|
PY3K = sys.version_info[0] == 3
|
|
|
|
class StreamOutput(object):
|
|
def __init__(self, stream):
|
|
self.stream = stream
|
|
try:
|
|
self.startoffset = self.stream.tell()
|
|
except IOError:
|
|
self.startoffset = 0
|
|
self.curoffset = 0
|
|
|
|
def writeline(self, data=None):
|
|
if data:
|
|
self.stream.write(data)
|
|
self.stream.write(os.linesep)
|
|
if data:
|
|
self.curoffset = len(data)
|
|
else:
|
|
self.curoffset = 0
|
|
self.stream.flush()
|
|
|
|
def write(self, data):
|
|
self.stream.write(data)
|
|
self.curoffset = len(data)
|
|
self.stream.flush()
|
|
|
|
def writesame(self, data):
|
|
overhang = self.curoffset - len(data)
|
|
if overhang > 0:
|
|
self.stream.write("%s %s\r" % (data, " " * overhang))
|
|
else:
|
|
self.stream.write("%s\r" % data)
|
|
self.curoffset = len(data)
|
|
self.stream.flush()
|
|
|
|
class TeeOutput(object):
|
|
def __init__(self, stream1, stream2):
|
|
self.outputs = [stream1, stream2]
|
|
|
|
# -- methods from sys.stdout / sys.stderr
|
|
def write(self, data):
|
|
for stream in self.outputs:
|
|
if PY3K:
|
|
if 'b' in stream.mode:
|
|
data = data.encode('utf-8')
|
|
stream.write(data)
|
|
|
|
def tell(self):
|
|
raise IOError
|
|
|
|
def flush(self):
|
|
for stream in self.outputs:
|
|
stream.flush()
|
|
# --/ sys.stdout
|