From 228b8e88bc7a7ce740e5c7326697e7c2256e099f Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Wed, 2 Apr 1997 06:13:34 +0000 Subject: Whole lotta changes. --- Lib/dos-8x3/cgihttps.py | 5 - Lib/dos-8x3/formatte.py | 4 +- Lib/dos-8x3/posixpat.py | 19 ++- Lib/dos-8x3/py_compi.py | 2 +- Lib/dos-8x3/test_arr.py | 38 ++++-- Lib/dos-8x3/test_aud.py | 355 ++++++++++++++++++++++++++++-------------------- Lib/dos-8x3/test_bin.py | 46 +++++++ Lib/dos-8x3/test_bsd.py | 69 ++++++++++ Lib/dos-8x3/test_cma.py | 47 ++++--- Lib/dos-8x3/test_cry.py | 7 +- Lib/dos-8x3/test_err.py | 44 ++++++ Lib/dos-8x3/test_fcn.py | 28 ++++ Lib/dos-8x3/test_gdb.py | 34 +++++ Lib/dos-8x3/test_ima.py | 165 ++++++++++++++++++++++ Lib/dos-8x3/test_img.py | 110 +++++++++++++++ Lib/dos-8x3/test_reg.py | 62 +++++++++ Lib/dos-8x3/test_rgb.py | 3 +- Lib/dos-8x3/test_rot.py | 28 ++++ Lib/dos-8x3/test_sel.py | 40 +++++- Lib/dos-8x3/test_sig.py | 33 +++-- Lib/dos-8x3/test_soc.py | 142 +++++++++++++++++++ Lib/dos-8x3/test_str.py | 21 ++- Lib/dos-8x3/test_sun.py | 28 ++++ Lib/dos-8x3/test_sup.py | 2 + Lib/dos-8x3/test_thr.py | 19 ++- Lib/dos-8x3/test_tim.py | 4 +- Lib/dos_8x3/cgihttps.py | 5 - Lib/dos_8x3/formatte.py | 4 +- Lib/dos_8x3/posixpat.py | 19 ++- Lib/dos_8x3/py_compi.py | 2 +- Lib/dos_8x3/test_arr.py | 38 ++++-- Lib/dos_8x3/test_aud.py | 355 ++++++++++++++++++++++++++++-------------------- Lib/dos_8x3/test_bin.py | 46 +++++++ Lib/dos_8x3/test_bsd.py | 69 ++++++++++ Lib/dos_8x3/test_cma.py | 47 ++++--- Lib/dos_8x3/test_cry.py | 7 +- Lib/dos_8x3/test_err.py | 44 ++++++ Lib/dos_8x3/test_fcn.py | 28 ++++ Lib/dos_8x3/test_gdb.py | 34 +++++ Lib/dos_8x3/test_ima.py | 165 ++++++++++++++++++++++ Lib/dos_8x3/test_img.py | 110 +++++++++++++++ Lib/dos_8x3/test_reg.py | 62 +++++++++ Lib/dos_8x3/test_rgb.py | 3 +- Lib/dos_8x3/test_rot.py | 28 ++++ Lib/dos_8x3/test_sel.py | 40 +++++- Lib/dos_8x3/test_sig.py | 33 +++-- Lib/dos_8x3/test_soc.py | 142 +++++++++++++++++++ Lib/dos_8x3/test_str.py | 21 ++- Lib/dos_8x3/test_sun.py | 28 ++++ Lib/dos_8x3/test_sup.py | 2 + Lib/dos_8x3/test_thr.py | 19 ++- Lib/dos_8x3/test_tim.py | 4 +- 52 files changed, 2276 insertions(+), 434 deletions(-) create mode 100644 Lib/dos-8x3/test_bin.py create mode 100644 Lib/dos-8x3/test_bsd.py create mode 100644 Lib/dos-8x3/test_err.py create mode 100644 Lib/dos-8x3/test_fcn.py create mode 100644 Lib/dos-8x3/test_gdb.py create mode 100644 Lib/dos-8x3/test_ima.py create mode 100644 Lib/dos-8x3/test_img.py create mode 100644 Lib/dos-8x3/test_reg.py create mode 100644 Lib/dos-8x3/test_rot.py create mode 100644 Lib/dos-8x3/test_soc.py create mode 100644 Lib/dos-8x3/test_sun.py create mode 100644 Lib/dos_8x3/test_bin.py create mode 100644 Lib/dos_8x3/test_bsd.py create mode 100644 Lib/dos_8x3/test_err.py create mode 100644 Lib/dos_8x3/test_fcn.py create mode 100644 Lib/dos_8x3/test_gdb.py create mode 100644 Lib/dos_8x3/test_ima.py create mode 100644 Lib/dos_8x3/test_img.py create mode 100644 Lib/dos_8x3/test_reg.py create mode 100644 Lib/dos_8x3/test_rot.py create mode 100644 Lib/dos_8x3/test_soc.py create mode 100644 Lib/dos_8x3/test_sun.py diff --git a/Lib/dos-8x3/cgihttps.py b/Lib/dos-8x3/cgihttps.py index 837f7c2..85e1721 100755 --- a/Lib/dos-8x3/cgihttps.py +++ b/Lib/dos-8x3/cgihttps.py @@ -191,11 +191,6 @@ def executable(path): def test(HandlerClass = CGIHTTPRequestHandler, ServerClass = BaseHTTPServer.HTTPServer): - import sys - if sys.argv[1:2] == ['-r']: - db = MyArchive() - db.regenindices() - return SimpleHTTPServer.test(HandlerClass, ServerClass) diff --git a/Lib/dos-8x3/formatte.py b/Lib/dos-8x3/formatte.py index 507ed8a..25dbe73 100755 --- a/Lib/dos-8x3/formatte.py +++ b/Lib/dos-8x3/formatte.py @@ -265,9 +265,9 @@ class AbstractFormatter: class NullWriter: - """Minimal writer interface to use in testing. - """ + """Minimal writer interface to use in testing & inheritance.""" def __init__(self): pass + def flush(self): pass def new_alignment(self, align): pass def new_font(self, font): pass def new_margin(self, margin, level): pass diff --git a/Lib/dos-8x3/posixpat.py b/Lib/dos-8x3/posixpat.py index 014dfe2..965184b 100755 --- a/Lib/dos-8x3/posixpat.py +++ b/Lib/dos-8x3/posixpat.py @@ -26,15 +26,20 @@ def isabs(s): return s[:1] == '/' -# Join two pathnames. -# Ignore the first part if the second part is absolute. +# Join pathnames. +# Ignore the previous parts if a part is absolute. # Insert a '/' unless the first part is empty or already ends in '/'. -def join(a, b): - if b[:1] == '/': return b - if a == '' or a[-1:] == '/': return a + b - # Note: join('x', '') returns 'x/'; is this what we want? - return a + '/' + b +def join(a, *p): + path = a + for b in p: + if b[:1] == '/': + path = b + elif path == '' or path[-1:] == '/': + path = path + b + else: + path = path + '/' + b + return path # Split a path in head (everything up to the last '/') and tail (the diff --git a/Lib/dos-8x3/py_compi.py b/Lib/dos-8x3/py_compi.py index fba7b1d..e9e90ff 100755 --- a/Lib/dos-8x3/py_compi.py +++ b/Lib/dos-8x3/py_compi.py @@ -19,7 +19,7 @@ def compile(file, cfile = None): timestamp = long(os.stat(file)[8]) codeobject = __builtin__.compile(codestring, file, 'exec') if not cfile: - cfile = file + 'c' + cfile = file + (__debug__ and 'c' or 'o') fc = open(cfile, 'wb') fc.write(MAGIC) wr_long(fc, timestamp) diff --git a/Lib/dos-8x3/test_arr.py b/Lib/dos-8x3/test_arr.py index 74fcd45..7474a27 100644 --- a/Lib/dos-8x3/test_arr.py +++ b/Lib/dos-8x3/test_arr.py @@ -1,16 +1,26 @@ #! /usr/bin/env python """Test the arraymodule. -Roger E. Masse + Roger E. Masse """ import array +from test_support import verbose + +def main(): + + testtype('c', 'c') + + for type in (['b', 'h', 'i', 'l', 'f', 'd']): + testtype(type, 1) + def testtype(type, example): a = array.array(type) a.append(example) - #print 40*'*' - #print 'array after append: ', a + if verbose: + print 40*'*' + print 'array after append: ', a a.typecode a.itemsize if a.typecode in ('i', 'b', 'h', 'l'): @@ -19,22 +29,24 @@ def testtype(type, example): if a.typecode == 'c': f = open('/etc/passwd', 'r') a.fromfile(f, 10) - #print 'char array with 10 bytes of /etc/passwd appended: ', a + if verbose: + print 'char array with 10 bytes of /etc/passwd appended: ', a a.fromlist(['a', 'b', 'c']) - #print 'char array with list appended: ', a + if verbose: + print 'char array with list appended: ', a a.insert(0, example) - #print 'array of %s after inserting another:' % a.typecode, a + if verbose: + print 'array of %s after inserting another:' % a.typecode, a f = open('/dev/null', 'w') a.tofile(f) a.tolist() a.tostring() - #print 'array of %s converted to a list: ' % a.typecode, a.tolist() - #print 'array of %s converted to a string: ' % a.typecode, a.tostring() - -testtype('c', 'c') - -for type in (['b', 'h', 'i', 'l', 'f', 'd']): - testtype(type, 1) + if verbose: + print 'array of %s converted to a list: ' % a.typecode, a.tolist() + if verbose: + print 'array of %s converted to a string: ' \ + % a.typecode, a.tostring() +main() diff --git a/Lib/dos-8x3/test_aud.py b/Lib/dos-8x3/test_aud.py index 3acf1bf..e966833 100755 --- a/Lib/dos-8x3/test_aud.py +++ b/Lib/dos-8x3/test_aud.py @@ -1,202 +1,263 @@ # Test audioop. import audioop +from test_support import verbose def gendata1(): - return '\0\1\2' + return '\0\1\2' def gendata2(): - if audioop.getsample('\0\1', 2, 0) == 1: - return '\0\0\0\1\0\2' - else: - return '\0\0\1\0\2\0' + if verbose: + print 'getsample' + if audioop.getsample('\0\1', 2, 0) == 1: + return '\0\0\0\1\0\2' + else: + return '\0\0\1\0\2\0' def gendata4(): - if audioop.getsample('\0\0\0\1', 4, 0) == 1: - return '\0\0\0\0\0\0\0\1\0\0\0\2' - else: - return '\0\0\0\0\1\0\0\0\2\0\0\0' + if verbose: + print 'getsample' + if audioop.getsample('\0\0\0\1', 4, 0) == 1: + return '\0\0\0\0\0\0\0\1\0\0\0\2' + else: + return '\0\0\0\0\1\0\0\0\2\0\0\0' def testmax(data): - if audioop.max(data[0], 1) <> 2 or \ - audioop.max(data[1], 2) <> 2 or \ - audioop.max(data[2], 4) <> 2: - return 0 - return 1 + if verbose: + print 'max' + if audioop.max(data[0], 1) <> 2 or \ + audioop.max(data[1], 2) <> 2 or \ + audioop.max(data[2], 4) <> 2: + return 0 + return 1 + +def testminmax(data): + if verbose: + print 'minmax' + if audioop.minmax(data[0], 1) <> (0, 2) or \ + audioop.minmax(data[1], 2) <> (0, 2) or \ + audioop.minmax(data[2], 4) <> (0, 2): + return 0 + return 1 def testmaxpp(data): - if audioop.maxpp(data[0], 1) <> 0 or \ - audioop.maxpp(data[1], 2) <> 0 or \ - audioop.maxpp(data[2], 4) <> 0: - return 0 - return 1 + if verbose: + print 'maxpp' + if audioop.maxpp(data[0], 1) <> 0 or \ + audioop.maxpp(data[1], 2) <> 0 or \ + audioop.maxpp(data[2], 4) <> 0: + return 0 + return 1 def testavg(data): - if audioop.avg(data[0], 1) <> 1 or \ - audioop.avg(data[1], 2) <> 1 or \ - audioop.avg(data[2], 4) <> 1: - return 0 - return 1 + if verbose: + print 'avg' + if audioop.avg(data[0], 1) <> 1 or \ + audioop.avg(data[1], 2) <> 1 or \ + audioop.avg(data[2], 4) <> 1: + return 0 + return 1 def testavgpp(data): - if audioop.avgpp(data[0], 1) <> 0 or \ - audioop.avgpp(data[1], 2) <> 0 or \ - audioop.avgpp(data[2], 4) <> 0: - return 0 - return 1 + if verbose: + print 'avgpp' + if audioop.avgpp(data[0], 1) <> 0 or \ + audioop.avgpp(data[1], 2) <> 0 or \ + audioop.avgpp(data[2], 4) <> 0: + return 0 + return 1 def testrms(data): - if audioop.rms(data[0], 1) <> 1 or \ - audioop.rms(data[1], 2) <> 1 or \ - audioop.rms(data[2], 4) <> 1: - return 0 - return 1 + if audioop.rms(data[0], 1) <> 1 or \ + audioop.rms(data[1], 2) <> 1 or \ + audioop.rms(data[2], 4) <> 1: + return 0 + return 1 def testcross(data): - if audioop.cross(data[0], 1) <> 0 or \ - audioop.cross(data[1], 2) <> 0 or \ - audioop.cross(data[2], 4) <> 0: - return 0 - return 1 + if verbose: + print 'cross' + if audioop.cross(data[0], 1) <> 0 or \ + audioop.cross(data[1], 2) <> 0 or \ + audioop.cross(data[2], 4) <> 0: + return 0 + return 1 def testadd(data): - data2 = [] - for d in data: - str = '' - for s in d: - str = str + chr(ord(s)*2) - data2.append(str) - if audioop.add(data[0], data[0], 1) <> data2[0] or \ - audioop.add(data[1], data[1], 2) <> data2[1] or \ - audioop.add(data[2], data[2], 4) <> data2[2]: - return 0 - return 1 + if verbose: + print 'add' + data2 = [] + for d in data: + str = '' + for s in d: + str = str + chr(ord(s)*2) + data2.append(str) + if audioop.add(data[0], data[0], 1) <> data2[0] or \ + audioop.add(data[1], data[1], 2) <> data2[1] or \ + audioop.add(data[2], data[2], 4) <> data2[2]: + return 0 + return 1 def testbias(data): - # Note: this test assumes that avg() works - d1 = audioop.bias(data[0], 1, 100) - d2 = audioop.bias(data[1], 2, 100) - d4 = audioop.bias(data[2], 4, 100) - if audioop.avg(d1, 1) <> 101 or \ - audioop.avg(d2, 2) <> 101 or \ - audioop.avg(d4, 4) <> 101: - return 0 - return 1 + if verbose: + print 'bias' + # Note: this test assumes that avg() works + d1 = audioop.bias(data[0], 1, 100) + d2 = audioop.bias(data[1], 2, 100) + d4 = audioop.bias(data[2], 4, 100) + if audioop.avg(d1, 1) <> 101 or \ + audioop.avg(d2, 2) <> 101 or \ + audioop.avg(d4, 4) <> 101: + return 0 + return 1 def testlin2lin(data): - # too simple: we test only the size - for d1 in data: - for d2 in data: - got = len(d1)/3 - wtd = len(d2)/3 - if len(audioop.lin2lin(d1, got, wtd)) <> len(d2): - return 0 - return 1 + if verbose: + print 'lin2lin' + # too simple: we test only the size + for d1 in data: + for d2 in data: + got = len(d1)/3 + wtd = len(d2)/3 + if len(audioop.lin2lin(d1, got, wtd)) <> len(d2): + return 0 + return 1 def testadpcm2lin(data): - # Very cursory test - if audioop.adpcm2lin('\0\0', 1, None) <> ('\0\0\0\0', (0,0)): - return 0 - return 1 + # Very cursory test + if audioop.adpcm2lin('\0\0', 1, None) <> ('\0\0\0\0', (0,0)): + return 0 + return 1 def testlin2adpcm(data): - # Very cursory test - if audioop.lin2adpcm('\0\0\0\0', 1, None) <> ('\0\0', (0,0)): - return 0 - return 1 + if verbose: + print 'lin2adpcm' + # Very cursory test + if audioop.lin2adpcm('\0\0\0\0', 1, None) <> ('\0\0', (0,0)): + return 0 + return 1 def testlin2ulaw(data): - if audioop.lin2ulaw(data[0], 1) <> '\377\347\333' or \ - audioop.lin2ulaw(data[1], 2) <> '\377\377\377' or \ - audioop.lin2ulaw(data[2], 4) <> '\377\377\377': - return 0 - return 1 + if verbose: + print 'lin2ulaw' + if audioop.lin2ulaw(data[0], 1) <> '\377\347\333' or \ + audioop.lin2ulaw(data[1], 2) <> '\377\377\377' or \ + audioop.lin2ulaw(data[2], 4) <> '\377\377\377': + return 0 + return 1 def testulaw2lin(data): - # Cursory - d = audioop.lin2ulaw(data[0], 1) - if audioop.ulaw2lin(d, 1) <> data[0]: - return 0 - return 1 + if verbose: + print 'ulaw2lin' + # Cursory + d = audioop.lin2ulaw(data[0], 1) + if audioop.ulaw2lin(d, 1) <> data[0]: + return 0 + return 1 def testmul(data): - data2 = [] - for d in data: - str = '' - for s in d: - str = str + chr(ord(s)*2) - data2.append(str) - if audioop.mul(data[0], 1, 2) <> data2[0] or \ - audioop.mul(data[1],2, 2) <> data2[1] or \ - audioop.mul(data[2], 4, 2) <> data2[2]: - return 0 - return 1 + if verbose: + print 'mul' + data2 = [] + for d in data: + str = '' + for s in d: + str = str + chr(ord(s)*2) + data2.append(str) + if audioop.mul(data[0], 1, 2) <> data2[0] or \ + audioop.mul(data[1],2, 2) <> data2[1] or \ + audioop.mul(data[2], 4, 2) <> data2[2]: + return 0 + return 1 + +def testratecv(data): + if verbose: + print 'ratecv' + state = (-8000, ((256, 512),)) + if audioop.ratecv(data[0], 1, 1, 8000, 16000, state) != \ + ('\001\000\000\001\001\002', state): + return 0 + return 1 def testreverse(data): - if audioop.reverse(data[0], 1) <> '\2\1\0': - return 0 - return 1 + if verbose: + print 'reverse' + if audioop.reverse(data[0], 1) <> '\2\1\0': + return 0 + return 1 def testtomono(data): - data2 = '' - for d in data[0]: - data2 = data2 + d + d - if audioop.tomono(data2, 1, 0.5, 0.5) <> data[0]: - return 0 - return 1 + if verbose: + print 'tomono' + data2 = '' + for d in data[0]: + data2 = data2 + d + d + if audioop.tomono(data2, 1, 0.5, 0.5) <> data[0]: + return 0 + return 1 def testtostereo(data): - data2 = '' - for d in data[0]: - data2 = data2 + d + d - if audioop.tostereo(data[0], 1, 1, 1) <> data2: - return 0 - return 1 + if verbose: + print 'tostereo' + data2 = '' + for d in data[0]: + data2 = data2 + d + d + if audioop.tostereo(data[0], 1, 1, 1) <> data2: + return 0 + return 1 def testfindfactor(data): - if audioop.findfactor(data[1], data[1]) <> 1.0: - return 0 - return 1 + if verbose: + print 'findfactor' + if audioop.findfactor(data[1], data[1]) <> 1.0: + return 0 + return 1 def testfindfit(data): - if audioop.findfit(data[1], data[1]) <> (0, 1.0): - return 0 - return 1 + if verbose: + print 'findfit' + if audioop.findfit(data[1], data[1]) <> (0, 1.0): + return 0 + return 1 def testfindmax(data): - if audioop.findmax(data[1], 1) <> 2: - return 0 - return 1 + if verbose: + print 'findmax' + if audioop.findmax(data[1], 1) <> 2: + return 0 + return 1 def testgetsample(data): - for i in range(3): - if audioop.getsample(data[0], 1, i) <> i or \ - audioop.getsample(data[1], 2, i) <> i or \ - audioop.getsample(data[2], 4, i) <> i: - return 0 - return 1 + if verbose: + print 'getsample' + for i in range(3): + if audioop.getsample(data[0], 1, i) <> i or \ + audioop.getsample(data[1], 2, i) <> i or \ + audioop.getsample(data[2], 4, i) <> i: + return 0 + return 1 def testone(name, data): - try: - func = eval('test'+name) - except NameError: - print 'No test found for audioop.'+name+'()' - return - try: - rv = func(data) - except 'xx': - print 'Test FAILED for audioop.'+name+'() (with an exception)' - return - if not rv: - print 'Test FAILED for audioop.'+name+'()' + try: + func = eval('test'+name) + except NameError: + print 'No test found for audioop.'+name+'()' + return + try: + rv = func(data) + except 'xx': + print 'Test FAILED for audioop.'+name+'() (with an exception)' + return + if not rv: + print 'Test FAILED for audioop.'+name+'()' def testall(): - data = [gendata1(), gendata2(), gendata4()] - names = dir(audioop) - # We know there is a routine 'add' - routines = [] - for n in names: - if type(eval('audioop.'+n)) == type(audioop.add): - routines.append(n) - for n in routines: - testone(n, data) + data = [gendata1(), gendata2(), gendata4()] + names = dir(audioop) + # We know there is a routine 'add' + routines = [] + for n in names: + if type(eval('audioop.'+n)) == type(audioop.add): + routines.append(n) + for n in routines: + testone(n, data) testall() diff --git a/Lib/dos-8x3/test_bin.py b/Lib/dos-8x3/test_bin.py new file mode 100644 index 0000000..aa156d9 --- /dev/null +++ b/Lib/dos-8x3/test_bin.py @@ -0,0 +1,46 @@ +#! /usr/bin/env python +"""Test script for the binascii C module + + Uses the mechanism of the python binhex module + Roger E. Masse +""" +import binhex +import tempfile +from test_support import verbose + +def test(): + + try: + fname1 = tempfile.mktemp() + fname2 = tempfile.mktemp() + f = open(fname1, 'w') + except: + raise ImportError, "Cannot test binascii without a temp file" + + start = 'Jack is my hero' + f.write(start) + f.close() + + binhex.binhex(fname1, fname2) + if verbose: + print 'binhex' + + binhex.hexbin(fname2, fname1) + if verbose: + print 'hexbin' + + f = open(fname1, 'r') + finish = f.readline() + + if start <> finish: + print 'Error: binhex <> hexbin' + elif verbose: + print 'binhex == hexbin' + + try: + import os + os.unlink(fname1) + os.unlink(fname2) + except: + pass +test() diff --git a/Lib/dos-8x3/test_bsd.py b/Lib/dos-8x3/test_bsd.py new file mode 100644 index 0000000..7a95eb9 --- /dev/null +++ b/Lib/dos-8x3/test_bsd.py @@ -0,0 +1,69 @@ +#! /usr/bin/env python +"""Test script for the bsddb C module + Roger E. Masse +""" +import bsddb +import tempfile +from test_support import verbose + +def test(openmethod, what): + + if verbose: + print '\nTesting: ', what + + fname = tempfile.mktemp() + f = openmethod(fname, 'c') + if verbose: + print 'creation...' + f['0'] = '' + f['a'] = 'Guido' + f['b'] = 'van' + f['c'] = 'Rossum' + f['d'] = 'invented' + f['f'] = 'Python' + if verbose: + print '%s %s %s' % (f['a'], f['b'], f['c']) + + if what == 'BTree' : + if verbose: + print 'key ordering...' + f.set_location(f.first()[0]) + while 1: + try: + rec = f.next() + except KeyError: + if rec <> f.last(): + print 'Error, last <> last!' + f.previous() + break + if verbose: + print rec + if not f.has_key('a'): + print 'Error, missing key!' + + f.sync() + f.close() + if verbose: + print 'modification...' + f = openmethod(fname, 'w') + f['d'] = 'discovered' + + if verbose: + print 'access...' + for key in f.keys(): + word = f[key] + if verbose: + print word + + f.close() + +types = [(bsddb.btopen, 'BTree'), + (bsddb.hashopen, 'Hash Table'), + # (bsddb.rnopen,'Record Numbers'), 'put' for RECNO for bsddb 1.85 + # appears broken... at least on + # Solaris Intel - rmasse 1/97 + ] + +for type in types: + test(type[0], type[1]) + diff --git a/Lib/dos-8x3/test_cma.py b/Lib/dos-8x3/test_cma.py index 8c452d7..71e7729 100644 --- a/Lib/dos-8x3/test_cma.py +++ b/Lib/dos-8x3/test_cma.py @@ -1,22 +1,35 @@ #! /usr/bin/env python """ Simple test script for cmathmodule.c -Roger E. Masse + Roger E. Masse """ import cmath +from test_support import verbose -cmath.acos(1.0) -cmath.acosh(1.0) -cmath.asin(1.0) -cmath.asinh(1.0) -cmath.atan(0.2) -cmath.atanh(0.3) -cmath.cos(1.0) -cmath.cosh(1.0) -cmath.exp(1.0) -cmath.log(1.0) -cmath.log10(1.0) -cmath.sin(1.0) -cmath.sinh(1.0) -cmath.sqrt(1.0) -cmath.tan(1.0) -cmath.tanh(1.0) +testdict = {'acos' : 1.0, + 'acosh' : 1.0, + 'asin' : 1.0, + 'asinh' : 1.0, + 'atan' : 0.2, + 'atanh' : 0.2, + 'cos' : 1.0, + 'cosh' : 1.0, + 'exp' : 1.0, + 'log' : 1.0, + 'log10' : 1.0, + 'sin' : 1.0, + 'sinh' : 1.0, + 'sqrt' : 1.0, + 'tan' : 1.0, + 'tanh' : 1.0} + +for func in testdict.keys(): + f = getattr(cmath, func) + r = f(testdict[func]) + if verbose: + print 'Calling %s(%f) = %f' % (func, testdict[func], abs(r)) + +p = cmath.pi +e = cmath.e +if verbose: + print 'PI = ', abs(p) + print 'E = ', abs(e) diff --git a/Lib/dos-8x3/test_cry.py b/Lib/dos-8x3/test_cry.py index 08e6b61..0685c95 100644 --- a/Lib/dos-8x3/test_cry.py +++ b/Lib/dos-8x3/test_cry.py @@ -2,5 +2,10 @@ """Simple test script for cryptmodule.c Roger E. Masse """ + +from test_support import verbose import crypt -print 'Test encryption: ', crypt.crypt('mypassword', 'ab') + +c = crypt.crypt('mypassword', 'ab') +if verbose: + print 'Test encryption: ', c diff --git a/Lib/dos-8x3/test_err.py b/Lib/dos-8x3/test_err.py new file mode 100644 index 0000000..6951255 --- /dev/null +++ b/Lib/dos-8x3/test_err.py @@ -0,0 +1,44 @@ +#! /usr/bin/env python +"""Test the errno module + Roger E. Masse +""" + +import errno +from test_support import verbose + +errors = ['E2BIG', 'EACCES', 'EADDRINUSE', 'EADDRNOTAVAIL', 'EADV', + 'EAFNOSUPPORT', 'EAGAIN', 'EALREADY', 'EBADE', 'EBADF', + 'EBADFD', 'EBADMSG', 'EBADR', 'EBADRQC', 'EBADSLT', + 'EBFONT', 'EBUSY', 'ECHILD', 'ECHRNG', 'ECOMM', + 'ECONNABORTED', 'ECONNREFUSED', 'ECONNRESET', + 'EDEADLK', 'EDEADLOCK', 'EDESTADDRREQ', 'EDOM', + 'EDQUOT', 'EEXIST', 'EFAULT', 'EFBIG', 'EHOSTDOWN', + 'EHOSTUNREACH', 'EIDRM', 'EILSEQ', 'EINPROGRESS', + 'EINTR', 'EINVAL', 'EIO', 'EISCONN', 'EISDIR', + 'EL2HLT', 'EL2NSYNC', 'EL3HLT', 'EL3RST', 'ELIBACC', + 'ELIBBAD', 'ELIBEXEC', 'ELIBMAX', 'ELIBSCN', 'ELNRNG', + 'ELOOP', 'EMFILE', 'EMLINK', 'EMSGSIZE', 'EMULTIHOP', + 'ENAMETOOLONG', 'ENETDOWN', 'ENETRESET', 'ENETUNREACH', + 'ENFILE', 'ENOANO', 'ENOBUFS', 'ENOCSI', 'ENODATA', + 'ENODEV', 'ENOENT', 'ENOEXEC', 'ENOLCK', 'ENOLINK', + 'ENOMEM', 'ENOMSG', 'ENONET', 'ENOPKG', 'ENOPROTOOPT', + 'ENOSPC', 'ENOSR', 'ENOSTR', 'ENOSYS', 'ENOTBLK', + 'ENOTCONN', 'ENOTDIR', 'ENOTEMPTY', 'ENOTSOCK', + 'ENOTTY', 'ENOTUNIQ', 'ENXIO', 'EOPNOTSUPP', + 'EOVERFLOW', 'EPERM', 'EPFNOSUPPORT', 'EPIPE', + 'EPROTO', 'EPROTONOSUPPORT', 'EPROTOTYPE', + 'ERANGE', 'EREMCHG', 'EREMOTE', 'ERESTART', + 'EROFS', 'ESHUTDOWN', 'ESOCKTNOSUPPORT', 'ESPIPE', + 'ESRCH', 'ESRMNT', 'ESTALE', 'ESTRPIPE', 'ETIME', + 'ETIMEDOUT', 'ETOOMANYREFS', 'ETXTBSY', 'EUNATCH', + 'EUSERS', 'EWOULDBLOCK', 'EXDEV', 'EXFULL'] + +# +# This is is a wee bit bogus since the module only conditionally adds +# errno constants if they have been defined by errno.h However, this +# test seems to work on SGI, Sparc & intel Solaris, and linux. +# +for error in errors: + a = getattr(errno, error) + if verbose: + print '%s: %d' % (error, a) diff --git a/Lib/dos-8x3/test_fcn.py b/Lib/dos-8x3/test_fcn.py new file mode 100644 index 0000000..4929fbb --- /dev/null +++ b/Lib/dos-8x3/test_fcn.py @@ -0,0 +1,28 @@ +#! /usr/bin/env python +"""Test program for the fcntl C module. + Roger E. Masse +""" +import struct +import fcntl +import FCNTL +import os +from test_support import verbose + +filename = '/tmp/delete-me' + +# the example from the library docs +f = open(filename,'w') +rv = fcntl.fcntl(f.fileno(), FCNTL.O_NDELAY, 1) +if verbose: + print 'Status from fnctl with O_NDELAY: ', rv + +lockdata = struct.pack('hhllhh', FCNTL.F_WRLCK, 0, 0, 0, 0, 0) +if verbose: + print 'struct.pack: ', lockdata + +rv = fcntl.fcntl(f.fileno(), FCNTL.F_SETLKW, lockdata) +if verbose: + print 'String from fcntl with F_SETLKW: ', rv + +f.close() +os.unlink(filename) diff --git a/Lib/dos-8x3/test_gdb.py b/Lib/dos-8x3/test_gdb.py new file mode 100644 index 0000000..22db6aa --- /dev/null +++ b/Lib/dos-8x3/test_gdb.py @@ -0,0 +1,34 @@ +#! /usr/bin/env python +"""Test script for the gdbm module + Roger E. Masse +""" + +import gdbm +from gdbm import error +from test_support import verbose + +filename= '/tmp/delete_me' + +g = gdbm.open(filename, 'c') +g['a'] = 'b' +g['12345678910'] = '019237410982340912840198242' +a = g.keys() +if verbose: + print 'Test gdbm file keys: ', a + +g.has_key('a') +g.close() +g = gdbm.open(filename, 'r') +g.close() +g = gdbm.open(filename, 'rw') +g.close() +g = gdbm.open(filename, 'w') +g.close() +g = gdbm.open(filename, 'n') +g.close() + +try: + import os + os.unlink(filename) +except: + pass diff --git a/Lib/dos-8x3/test_ima.py b/Lib/dos-8x3/test_ima.py new file mode 100644 index 0000000..fc8dadf --- /dev/null +++ b/Lib/dos-8x3/test_ima.py @@ -0,0 +1,165 @@ +#! /usr/bin/env python +"""Test script for the imageop module. This has the side + effect of partially testing the imgfile module as well. + Roger E. Masse +""" +from test_support import verbose + +import imageop + +def main(use_rgbimg=1): + + if use_rgbimg: + image, width, height = getrgbimage('test.rgb') + else: + image, width, height = getimage('test.rgb') + + # Return the selected part of image, which should by width by height + # in size and consist of pixels of psize bytes. + if verbose: + print 'crop' + newimage = imageop.crop (image, 4, width, height, 0, 0, 1, 1) + + # Return image scaled to size newwidth by newheight. No interpolation + # is done, scaling is done by simple-minded pixel duplication or removal. + # Therefore, computer-generated images or dithered images will + # not look nice after scaling. + if verbose: + print 'scale' + scaleimage = imageop.scale(image, 4, width, height, 1, 1) + + # Run a vertical low-pass filter over an image. It does so by computing + # each destination pixel as the average of two vertically-aligned source + # pixels. The main use of this routine is to forestall excessive flicker + # if the image two vertically-aligned source pixels, hence the name. + if verbose: + print 'tovideo' + videoimage = imageop.tovideo (image, 4, width, height) + + # Convert an rgb image to an 8 bit rgb + if verbose: + print 'rgb2rgb8' + greyimage = imageop.rgb2rgb8(image, width, height) + + # Convert an 8 bit rgb image to a 24 bit rgb image + if verbose: + print 'rgb82rgb' + image = imageop.rgb82rgb(greyimage, width, height) + + # Convert an rgb image to an 8 bit greyscale image + if verbose: + print 'rgb2grey' + greyimage = imageop.rgb2grey(image, width, height) + + # Convert an 8 bit greyscale image to a 24 bit rgb image + if verbose: + print 'grey2rgb' + image = imageop.grey2rgb(greyimage, width, height) + + # Convert a 8-bit deep greyscale image to a 1-bit deep image by + # tresholding all the pixels. The resulting image is tightly packed + # and is probably only useful as an argument to mono2grey. + if verbose: + print 'grey2mono' + monoimage = imageop.grey2mono (greyimage, width, height, 0) + + # monoimage, width, height = getimage('monotest.rgb') + # Convert a 1-bit monochrome image to an 8 bit greyscale or color image. + # All pixels that are zero-valued on input get value p0 on output and + # all one-value input pixels get value p1 on output. To convert a + # monochrome black-and-white image to greyscale pass the values 0 and + # 255 respectively. + if verbose: + print 'mono2grey' + greyimage = imageop.mono2grey (monoimage, width, height, 0, 255) + + # Convert an 8-bit greyscale image to a 1-bit monochrome image using a + # (simple-minded) dithering algorithm. + if verbose: + print 'dither2mono' + monoimage = imageop.dither2mono (greyimage, width, height) + + # Convert an 8-bit greyscale image to a 4-bit greyscale image without + # dithering. + if verbose: + print 'grey2grey4' + grey4image = imageop.grey2grey4 (greyimage, width, height) + + # Convert an 8-bit greyscale image to a 2-bit greyscale image without + # dithering. + if verbose: + print 'grey2grey2' + grey2image = imageop.grey2grey2 (greyimage, width, height) + + # Convert an 8-bit greyscale image to a 2-bit greyscale image with + # dithering. As for dither2mono, the dithering algorithm is currently + # very simple. + if verbose: + print 'dither2grey2' + grey2image = imageop.dither2grey2 (greyimage, width, height) + + # Convert a 4-bit greyscale image to an 8-bit greyscale image. + if verbose: + print 'grey42grey' + greyimage = imageop.grey42grey (grey4image, width, height) + + # Convert a 2-bit greyscale image to an 8-bit greyscale image. + if verbose: + print 'grey22grey' + image = imageop.grey22grey (grey2image, width, height) + +def getrgbimage(name): + """return a tuple consisting of image (in 'imgfile' format but + using rgbimg instead) width and height""" + + import rgbimg + + try: + sizes = rgbimg.sizeofimage(name) + except rgbimg.error: + name = get_qualified_path(name) + sizes = rgbimg.sizeofimage(name) + if verbose: + print 'rgbimg opening test image: %s, sizes: %s' % (name, str(sizes)) + + image = rgbimg.longimagedata(name) + return (image, sizes[0], sizes[1]) + +def getimage(name): + """return a tuple consisting of + image (in 'imgfile' format) width and height + """ + + import imgfile + + try: + sizes = imgfile.getsizes(name) + except imgfile.error: + name = get_qualified_path(name) + sizes = imgfile.getsizes(name) + if verbose: + print 'imgfile opening test image: %s, sizes: %s' % (name, str(sizes)) + + image = imgfile.read(name) + return (image, sizes[0], sizes[1]) + +def get_qualified_path(name): + """ return a more qualified path to name contructed from argv[1]""" + import sys + import os + import string + + # get a more qualified path component of the script... + if __name__ == '__main__': + ourname = sys.argv[0] + else: # ...or the full path of the module + ourname = sys.modules[__name__].__file__ + + parts = string.splitfields(ourname, os.sep) + parts[-1] = name + name = string.joinfields(parts, os.sep) + return name + +# rgbimg (unlike imgfile) is portable to platforms other than SGI. So we prefer to use it. +main(use_rgbimg=1) + diff --git a/Lib/dos-8x3/test_img.py b/Lib/dos-8x3/test_img.py new file mode 100644 index 0000000..8a3b91e --- /dev/null +++ b/Lib/dos-8x3/test_img.py @@ -0,0 +1,110 @@ +#! /usr/bin/env python +"""Simple test script for imgfile.c + Roger E. Masse +""" +from test_support import verbose + +import imgfile + + +def main(): + + # Test a 3 byte color image + testimage('test.rgb') + + # Test a 1 byte greyscale image + testimage('greytest.rgb') + + +def testimage(name): + """Run through the imgfile's battery of possible methods + on the image passed in name. + """ + + import sys + import os + import string + + outputfile = '/tmp/deleteme' + + # try opening the name directly + try: + # This function returns a tuple (x, y, z) where x and y are the size + # of the image in pixels and z is the number of bytes per pixel. Only + # 3 byte RGB pixels and 1 byte greyscale pixels are supported. + sizes = imgfile.getsizes(name) + except imgfile.error: + # get a more qualified path component of the script... + if __name__ == '__main__': + ourname = sys.argv[0] + else: # ...or the full path of the module + ourname = sys.modules[__name__].__file__ + + parts = string.splitfields(ourname, os.sep) + parts[-1] = name + name = string.joinfields(parts, os.sep) + sizes = imgfile.getsizes(name) + if verbose: + print 'Opening test image: %s, sizes: %s' % (name, str(sizes)) + # This function reads and decodes the image on the specified file, + # and returns it as a python string. The string has either 1 byte + # greyscale pixels or 4 byte RGBA pixels. The bottom left pixel + # is the first in the string. This format is suitable to pass + # to gl.lrectwrite, for instance. + image = imgfile.read(name) + + # This function writes the RGB or greyscale data in data to + # image file file. x and y give the size of the image, z is + # 1 for 1 byte greyscale images or 3 for RGB images (which + # are stored as 4 byte values of which only the lower three + # bytes are used). These are the formats returned by gl.lrectread. + if verbose: + print 'Writing output file' + imgfile.write (outputfile, image, sizes[0], sizes[1], sizes[2]) + + + if verbose: + print 'Opening scaled test image: %s, sizes: %s' % (name, str(sizes)) + # This function is identical to read but it returns an image that + # is scaled to the given x and y sizes. If the filter and blur + # parameters are omitted scaling is done by simply dropping + # or duplicating pixels, so the result will be less than perfect, + # especially for computer-generated images. Alternatively, + # you can specify a filter to use to smoothen the image after + # scaling. The filter forms supported are 'impulse', 'box', + # 'triangle', 'quadratic' and 'gaussian'. If a filter is + # specified blur is an optional parameter specifying the + # blurriness of the filter. It defaults to 1.0. readscaled + # makes no attempt to keep the aspect ratio correct, so that + # is the users' responsibility. + if verbose: + print 'Filtering with "impulse"' + simage = imgfile.readscaled (name, sizes[0]/2, sizes[1]/2, 'impulse', 2.0) + + # This function sets a global flag which defines whether the + # scan lines of the image are read or written from bottom to + # top (flag is zero, compatible with SGI GL) or from top to + # bottom(flag is one, compatible with X). The default is zero. + if verbose: + print 'Switching to X compatibility' + imgfile.ttob (1) + + if verbose: + print 'Filtering with "triangle"' + simage = imgfile.readscaled (name, sizes[0]/2, sizes[1]/2, 'triangle', 3.0) + if verbose: + print 'Switching back to SGI compatibility' + imgfile.ttob (0) + + if verbose: print 'Filtering with "quadratic"' + simage = imgfile.readscaled (name, sizes[0]/2, sizes[1]/2, 'quadratic') + if verbose: print 'Filtering with "gaussian"' + simage = imgfile.readscaled (name, sizes[0]/2, sizes[1]/2, 'gaussian', 1.0) + + if verbose: + print 'Writing output file' + imgfile.write (outputfile, simage, sizes[0]/2, sizes[1]/2, sizes[2]) + + os.unlink(outputfile) + +main() diff --git a/Lib/dos-8x3/test_reg.py b/Lib/dos-8x3/test_reg.py new file mode 100644 index 0000000..9d25d92 --- /dev/null +++ b/Lib/dos-8x3/test_reg.py @@ -0,0 +1,62 @@ +from test_support import verbose +import regex +from regex_syntax import * + +re = 'a+b+c+' +print 'no match:', regex.match(re, 'hello aaaabcccc world') +print 'successful search:', regex.search(re, 'hello aaaabcccc world') +try: + cre = regex.compile('\(' + re) +except regex.error: + print 'caught expected exception' +else: + print 'expected regex.error not raised' + +print 'failed awk syntax:', regex.search('(a+)|(b+)', 'cdb') +prev = regex.set_syntax(RE_SYNTAX_AWK) +print 'successful awk syntax:', regex.search('(a+)|(b+)', 'cdb') +regex.set_syntax(prev) +print 'failed awk syntax:', regex.search('(a+)|(b+)', 'cdb') + +re = '\([0-9]+\) *\([0-9]+\)' +print 'matching with group names and compile()' +cre = regex.compile(re) +print cre.match('801 999') +try: + print cre.group('one') +except regex.error: + print 'caught expected exception' +else: + print 'expected regex.error not raised' + +print 'matching with group names and symcomp()' +cre = regex.symcomp(re) +print cre.match('801 999') +print cre.group(0) +print cre.group('one') +print cre.group(1, 2) +print cre.group('one', 'two') +print 'realpat:', cre.realpat +print 'groupindex:', cre.groupindex + +re = 'world' +cre = regex.compile(re) +print 'not case folded search:', cre.search('HELLO WORLD') +cre = regex.compile(re, regex.casefold) +print 'case folded search:', cre.search('HELLO WORLD') + +print '__members__:', cre.__members__ +print 'regs:', cre.regs +print 'last:', cre.last +print 'translate:', `cre.translate` +print 'givenpat:', cre.givenpat + +print 'match with pos:', cre.match('hello world', 7) +print 'search with pos:', cre.search('hello world there world', 7) +print 'bogus group:', cre.group(0, 1, 3) +try: + print 'no name:', cre.group('one') +except regex.error: + print 'caught expected exception' +else: + print 'expected regex.error not raised' diff --git a/Lib/dos-8x3/test_rgb.py b/Lib/dos-8x3/test_rgb.py index cdadc66..52814b4 100755 --- a/Lib/dos-8x3/test_rgb.py +++ b/Lib/dos-8x3/test_rgb.py @@ -23,7 +23,8 @@ def testimg(rgb_file, raw_file): raise error, 'bad image length' raw = open(raw_file, 'r').read() if rgb != raw: - raise error, 'images don\'t match for '+rgb_file+' and '+raw_file + raise error, \ + 'images don\'t match for '+rgb_file+' and '+raw_file for depth in [1, 3, 4]: rgbimg.longstoimage(rgb, width, height, depth, '@.rgb') os.unlink('@.rgb') diff --git a/Lib/dos-8x3/test_rot.py b/Lib/dos-8x3/test_rot.py new file mode 100644 index 0000000..338ea9d --- /dev/null +++ b/Lib/dos-8x3/test_rot.py @@ -0,0 +1,28 @@ +import rotor + +r = rotor.newrotor("you'll never guess this") +r = rotor.newrotor("you'll never guess this", 12) + +A = 'spam and eggs' +B = 'cheese shop' + +a = r.encrypt(A) +print a +b = r.encryptmore(B) +print b + +A1 = r.decrypt(a) +print A1 +if A1 <> A: + print 'decrypt failed' + +B1 = r.decryptmore(b) +print B1 +if B1 <> B: + print 'decryptmore failed' + +try: + r.setkey() +except TypeError: + pass +r.setkey('you guessed it!') diff --git a/Lib/dos-8x3/test_sel.py b/Lib/dos-8x3/test_sel.py index f185308..f7f20f3 100755 --- a/Lib/dos-8x3/test_sel.py +++ b/Lib/dos-8x3/test_sel.py @@ -1,14 +1,44 @@ # Testing select module +import select +import os + +# test some known error conditions +try: + rfd, wfd, xfd = select.select(1, 2, 3) +except TypeError: + pass +else: + print 'expected TypeError exception not raised' + +class Nope: + pass + +class Almost: + def fileno(self): + return 'fileno' + +try: + rfd, wfd, xfd = select.select([Nope()], [], []) +except TypeError: + pass +else: + print 'expected TypeError exception not raised' + +try: + rfd, wfd, xfd = select.select([Almost()], [], []) +except TypeError: + pass +else: + print 'expected TypeError exception not raised' + def test(): - import select - import os - cmd = 'for i in 0 1 2 3 4 5 6 7 8 9; do date; sleep 3; done' + cmd = 'for i in 0 1 2 3 4 5 6 7 8 9; do echo testing...; sleep 1; done' p = os.popen(cmd, 'r') for tout in (0, 1, 2, 4, 8, 16) + (None,)*10: print 'timeout =', tout rfd, wfd, xfd = select.select([p], [], [], tout) - print rfd, wfd, xfd +## print rfd, wfd, xfd if (rfd, wfd, xfd) == ([], [], []): continue if (rfd, wfd, xfd) == ([p], [], []): @@ -19,5 +49,7 @@ def test(): break continue print 'Heh?' + p.close() test() + diff --git a/Lib/dos-8x3/test_sig.py b/Lib/dos-8x3/test_sig.py index bfcf517..3619b96 100755 --- a/Lib/dos-8x3/test_sig.py +++ b/Lib/dos-8x3/test_sig.py @@ -1,31 +1,37 @@ # Test the signal module - +from test_support import verbose import signal import os +if verbose: + x = '-x' +else: + x = '+x' pid = os.getpid() # Shell script that will send us asynchronous signals script = """ -( - set -x + ( + set %(x)s sleep 2 kill -5 %(pid)d sleep 2 kill -2 %(pid)d sleep 2 kill -3 %(pid)d -) & + ) & """ % vars() def handlerA(*args): - print "handlerA", args + if verbose: + print "handlerA", args HandlerBCalled = "HandlerBCalled" # Exception def handlerB(*args): - print "handlerB", args + if verbose: + print "handlerB", args raise HandlerBCalled, args signal.alarm(20) # Entire test lasts at most 20 sec. @@ -40,11 +46,18 @@ print "starting pause() loop..." try: while 1: - print "call pause()..." + if verbose: + print "call pause()..." try: signal.pause() - print "pause() returned" + if verbose: + print "pause() returned" except HandlerBCalled: - print "HandlerBCalled exception caught" + if verbose: + print "HandlerBCalled exception caught" + else: + pass + except KeyboardInterrupt: - print "KeyboardInterrupt (assume the alarm() went off)" + if verbose: + print "KeyboardInterrupt (assume the alarm() went off)" diff --git a/Lib/dos-8x3/test_soc.py b/Lib/dos-8x3/test_soc.py new file mode 100644 index 0000000..1e157b9 --- /dev/null +++ b/Lib/dos-8x3/test_soc.py @@ -0,0 +1,142 @@ +# Not tested: +# socket.fromfd() +# sktobj.getsockopt() +# sktobj.recvfrom() +# sktobj.sendto() +# sktobj.setblocking() +# sktobj.setsockopt() +# sktobj.shutdown() + + +from test_support import verbose +import socket +import os +import time +import string + +def missing_ok(str): + try: + getattr(socket, str) + except AttributeError: + pass + +print socket.error + +print socket.AF_INET + +print socket.SOCK_STREAM +print socket.SOCK_DGRAM +print socket.SOCK_RAW +print socket.SOCK_RDM +print socket.SOCK_SEQPACKET + +for optional in ("AF_UNIX", + + "SO_DEBUG", "SO_ACCEPTCONN", "SO_REUSEADDR", "SO_KEEPALIVE", + "SO_DONTROUTE", "SO_BROADCAST", "SO_USELOOPBACK", "SO_LINGER", + "SO_OOBINLINE", "SO_REUSEPORT", "SO_SNDBUF", "SO_RCVBUF", + "SO_SNDLOWAT", "SO_RCVLOWAT", "SO_SNDTIMEO", "SO_RCVTIMEO", + "SO_ERROR", "SO_TYPE", "SOMAXCONN", + + "MSG_OOB", "MSG_PEEK", "MSG_DONTROUTE", "MSG_EOR", + "MSG_TRUNC", "MSG_CTRUNC", "MSG_WAITALL", "MSG_BTAG", + "MSG_ETAG", + + "SOL_SOCKET", + + "IPPROTO_IP", "IPPROTO_ICMP", "IPPROTO_IGMP", + "IPPROTO_GGP", "IPPROTO_TCP", "IPPROTO_EGP", + "IPPROTO_PUP", "IPPROTO_UDP", "IPPROTO_IDP", + "IPPROTO_HELLO", "IPPROTO_ND", "IPPROTO_TP", + "IPPROTO_XTP", "IPPROTO_EON", "IPPROTO_BIP", + "IPPROTO_RAW", "IPPROTO_MAX", + + "IPPORT_RESERVED", "IPPORT_USERRESERVED", + + "INADDR_ANY", "INADDR_BROADCAST", "INADDR_LOOPBACK", + "INADDR_UNSPEC_GROUP", "INADDR_ALLHOSTS_GROUP", + "INADDR_MAX_LOCAL_GROUP", "INADDR_NONE", + + "IP_OPTIONS", "IP_HDRINCL", "IP_TOS", "IP_TTL", + "IP_RECVOPTS", "IP_RECVRETOPTS", "IP_RECVDSTADDR", + "IP_RETOPTS", "IP_MULTICAST_IF", "IP_MULTICAST_TTL", + "IP_MULTICAST_LOOP", "IP_ADD_MEMBERSHIP", + "IP_DROP_MEMBERSHIP", + ): + missing_ok(optional) + +hostname = socket.gethostname() +ip = socket.gethostbyname(hostname) +hname, aliases, ipaddrs = socket.gethostbyaddr(ip) +all_host_names = [hname] + aliases + +if verbose: + print hostname + print ip + print hname, aliases, ipaddrs + print all_host_names + +for name in all_host_names: + if string.find(name, '.'): + break +else: + print 'FQDN not found' + +print socket.getservbyname('telnet', 'tcp') +try: + socket.getservbyname('telnet', 'udp') +except socket.error: + pass + + +try: + PORT = 50007 + if os.fork(): + # parent is server + s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + s.bind(hostname, PORT) + s.listen(1) + if verbose: + print 'parent accepting' + conn, addr = s.accept() + if verbose: + print 'connected by', addr + # couple of interesting tests while we've got a live socket + f = conn.fileno() + if verbose: + print 'fileno:', f + p = conn.getpeername() + if verbose: + print 'peer:', p + n = conn.getsockname() + if verbose: + print 'sockname:', n + f = conn.makefile() + if verbose: + print 'file obj:', f + while 1: + data = conn.recv(1024) + if not data: + break + if verbose: + print 'received:', data + conn.send(data) + conn.close() + else: + try: + # child is client + time.sleep(1) + s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + if verbose: + print 'child connecting' + s.connect(hostname, PORT) + msg = 'socket test' + s.send(msg) + data = s.recv(1024) + if msg <> data: + print 'parent/client mismatch' + s.close() + finally: + os._exit(1) +except socket.error: + pass diff --git a/Lib/dos-8x3/test_str.py b/Lib/dos-8x3/test_str.py index 424cf52..efc98ff 100644 --- a/Lib/dos-8x3/test_str.py +++ b/Lib/dos-8x3/test_str.py @@ -1,13 +1,21 @@ +from test_support import verbose import strop, sys def test(name, input, output, *args): + if verbose: + print 'string.%s%s =? %s... ' % (name, (input,) + args, output), f = getattr(strop, name) try: value = apply(f, (input,) + args) except: value = sys.exc_type if value != output: + if verbose: + print 'no' print f, `input`, `output`, `value` + else: + if verbose: + print 'yes' test('atoi', " 1 ", 1) test('atoi', " 1x", ValueError) @@ -38,8 +46,19 @@ test('split', 'this is the split function', test('split', 'a|b|c|d', ['a', 'b', 'c', 'd'], '|') test('split', 'a|b|c|d', ['a', 'b', 'c|d'], '|', 2) +# join now works with any sequence type +class Sequence: + def __init__(self): self.seq = 'wxyz' + def __len__(self): return len(self.seq) + def __getitem__(self, i): return self.seq[i] + test('join', ['a', 'b', 'c', 'd'], 'a b c d') -test('join', ['a', 'b', 'c', 'd'], 'abcd', '') +test('join', ('a', 'b', 'c', 'd'), 'abcd', '') +test('join', Sequence(), 'w x y z') + +# try a few long ones +print strop.join(['x' * 100] * 100, ':') +print strop.join(('x' * 100,) * 100, ':') test('strip', ' hello ', 'hello') test('lstrip', ' hello ', 'hello ') diff --git a/Lib/dos-8x3/test_sun.py b/Lib/dos-8x3/test_sun.py new file mode 100644 index 0000000..aa85752 --- /dev/null +++ b/Lib/dos-8x3/test_sun.py @@ -0,0 +1,28 @@ +from test_support import verbose, TestFailed +import sunaudiodev +import os + +def findfile(file): + if os.path.isabs(file): return file + import sys + for dn in sys.path: + fn = os.path.join(dn, file) + if os.path.exists(fn): return fn + return file + +def play_sound_file(path): + fp = open(path, 'r') + data = fp.read() + fp.close() + try: + a = sunaudiodev.open('w') + except sunaudiodev.error, msg: + raise TestFailed, msg + else: + a.write(data) + a.close() + +def test(): + play_sound_file(findfile('audiotest.au')) + +test() diff --git a/Lib/dos-8x3/test_sup.py b/Lib/dos-8x3/test_sup.py index 7a76664..7dc1940 100755 --- a/Lib/dos-8x3/test_sup.py +++ b/Lib/dos-8x3/test_sup.py @@ -2,6 +2,8 @@ TestFailed = 'test_support -- test failed' # Exception +verbose = 1 # Flag set to 0 by regrtest.py + def unload(name): import sys try: diff --git a/Lib/dos-8x3/test_thr.py b/Lib/dos-8x3/test_thr.py index 4e0eb70..8a1f435 100755 --- a/Lib/dos-8x3/test_thr.py +++ b/Lib/dos-8x3/test_thr.py @@ -2,6 +2,7 @@ # Create a bunch of threads, let each do some work, wait until all are done +from test_support import verbose import whrandom import thread import time @@ -19,9 +20,11 @@ def task(ident): whmutex.acquire() delay = whrandom.random() * numtasks whmutex.release() - print 'task', ident, 'will run for', delay, 'sec' + if verbose: + print 'task', ident, 'will run for', delay, 'sec' time.sleep(delay) - print 'task', ident, 'done' + if verbose: + print 'task', ident, 'done' mutex.acquire() running = running - 1 if running == 0: @@ -33,7 +36,8 @@ def newtask(): global next_ident, running mutex.acquire() next_ident = next_ident + 1 - print 'creating task', next_ident + if verbose: + print 'creating task', next_ident thread.start_new_thread(task, (next_ident,)) running = running + 1 mutex.release() @@ -84,11 +88,14 @@ def task2(ident): whmutex.acquire() delay = whrandom.random() * numtasks whmutex.release() - print 'task', ident, 'will run for', delay, 'sec' + if verbose: + print 'task', ident, 'will run for', delay, 'sec' time.sleep(delay) - print 'task', ident, 'entering barrier', i + if verbose: + print 'task', ident, 'entering barrier', i bar.enter() - print 'task', ident, 'leaving barrier', i + if verbose: + print 'task', ident, 'leaving barrier', i mutex.acquire() running = running - 1 if running == 0: diff --git a/Lib/dos-8x3/test_tim.py b/Lib/dos-8x3/test_tim.py index bfc768a..85ea6ee 100644 --- a/Lib/dos-8x3/test_tim.py +++ b/Lib/dos-8x3/test_tim.py @@ -13,8 +13,8 @@ if int(time.mktime(time.localtime(t))) <> int(t): time.sleep(1.2) tt = time.gmtime(t) -for directive in ('a', 'A', 'b', 'B', 'c', 'd', 'E', 'H', 'I', - 'j', 'm', 'M', 'n', 'N', 'o', 'p', 'S', 't', +for directive in ('a', 'A', 'b', 'B', 'c', 'd', 'H', 'I', + 'j', 'm', 'M', 'p', 'S', 'U', 'w', 'W', 'x', 'X', 'y', 'Y', 'Z', '%'): format = '%' + directive time.strftime(format, tt) diff --git a/Lib/dos_8x3/cgihttps.py b/Lib/dos_8x3/cgihttps.py index 837f7c2..85e1721 100755 --- a/Lib/dos_8x3/cgihttps.py +++ b/Lib/dos_8x3/cgihttps.py @@ -191,11 +191,6 @@ def executable(path): def test(HandlerClass = CGIHTTPRequestHandler, ServerClass = BaseHTTPServer.HTTPServer): - import sys - if sys.argv[1:2] == ['-r']: - db = MyArchive() - db.regenindices() - return SimpleHTTPServer.test(HandlerClass, ServerClass) diff --git a/Lib/dos_8x3/formatte.py b/Lib/dos_8x3/formatte.py index 507ed8a..25dbe73 100755 --- a/Lib/dos_8x3/formatte.py +++ b/Lib/dos_8x3/formatte.py @@ -265,9 +265,9 @@ class AbstractFormatter: class NullWriter: - """Minimal writer interface to use in testing. - """ + """Minimal writer interface to use in testing & inheritance.""" def __init__(self): pass + def flush(self): pass def new_alignment(self, align): pass def new_font(self, font): pass def new_margin(self, margin, level): pass diff --git a/Lib/dos_8x3/posixpat.py b/Lib/dos_8x3/posixpat.py index 014dfe2..965184b 100755 --- a/Lib/dos_8x3/posixpat.py +++ b/Lib/dos_8x3/posixpat.py @@ -26,15 +26,20 @@ def isabs(s): return s[:1] == '/' -# Join two pathnames. -# Ignore the first part if the second part is absolute. +# Join pathnames. +# Ignore the previous parts if a part is absolute. # Insert a '/' unless the first part is empty or already ends in '/'. -def join(a, b): - if b[:1] == '/': return b - if a == '' or a[-1:] == '/': return a + b - # Note: join('x', '') returns 'x/'; is this what we want? - return a + '/' + b +def join(a, *p): + path = a + for b in p: + if b[:1] == '/': + path = b + elif path == '' or path[-1:] == '/': + path = path + b + else: + path = path + '/' + b + return path # Split a path in head (everything up to the last '/') and tail (the diff --git a/Lib/dos_8x3/py_compi.py b/Lib/dos_8x3/py_compi.py index fba7b1d..e9e90ff 100755 --- a/Lib/dos_8x3/py_compi.py +++ b/Lib/dos_8x3/py_compi.py @@ -19,7 +19,7 @@ def compile(file, cfile = None): timestamp = long(os.stat(file)[8]) codeobject = __builtin__.compile(codestring, file, 'exec') if not cfile: - cfile = file + 'c' + cfile = file + (__debug__ and 'c' or 'o') fc = open(cfile, 'wb') fc.write(MAGIC) wr_long(fc, timestamp) diff --git a/Lib/dos_8x3/test_arr.py b/Lib/dos_8x3/test_arr.py index 74fcd45..7474a27 100644 --- a/Lib/dos_8x3/test_arr.py +++ b/Lib/dos_8x3/test_arr.py @@ -1,16 +1,26 @@ #! /usr/bin/env python """Test the arraymodule. -Roger E. Masse + Roger E. Masse """ import array +from test_support import verbose + +def main(): + + testtype('c', 'c') + + for type in (['b', 'h', 'i', 'l', 'f', 'd']): + testtype(type, 1) + def testtype(type, example): a = array.array(type) a.append(example) - #print 40*'*' - #print 'array after append: ', a + if verbose: + print 40*'*' + print 'array after append: ', a a.typecode a.itemsize if a.typecode in ('i', 'b', 'h', 'l'): @@ -19,22 +29,24 @@ def testtype(type, example): if a.typecode == 'c': f = open('/etc/passwd', 'r') a.fromfile(f, 10) - #print 'char array with 10 bytes of /etc/passwd appended: ', a + if verbose: + print 'char array with 10 bytes of /etc/passwd appended: ', a a.fromlist(['a', 'b', 'c']) - #print 'char array with list appended: ', a + if verbose: + print 'char array with list appended: ', a a.insert(0, example) - #print 'array of %s after inserting another:' % a.typecode, a + if verbose: + print 'array of %s after inserting another:' % a.typecode, a f = open('/dev/null', 'w') a.tofile(f) a.tolist() a.tostring() - #print 'array of %s converted to a list: ' % a.typecode, a.tolist() - #print 'array of %s converted to a string: ' % a.typecode, a.tostring() - -testtype('c', 'c') - -for type in (['b', 'h', 'i', 'l', 'f', 'd']): - testtype(type, 1) + if verbose: + print 'array of %s converted to a list: ' % a.typecode, a.tolist() + if verbose: + print 'array of %s converted to a string: ' \ + % a.typecode, a.tostring() +main() diff --git a/Lib/dos_8x3/test_aud.py b/Lib/dos_8x3/test_aud.py index 3acf1bf..e966833 100755 --- a/Lib/dos_8x3/test_aud.py +++ b/Lib/dos_8x3/test_aud.py @@ -1,202 +1,263 @@ # Test audioop. import audioop +from test_support import verbose def gendata1(): - return '\0\1\2' + return '\0\1\2' def gendata2(): - if audioop.getsample('\0\1', 2, 0) == 1: - return '\0\0\0\1\0\2' - else: - return '\0\0\1\0\2\0' + if verbose: + print 'getsample' + if audioop.getsample('\0\1', 2, 0) == 1: + return '\0\0\0\1\0\2' + else: + return '\0\0\1\0\2\0' def gendata4(): - if audioop.getsample('\0\0\0\1', 4, 0) == 1: - return '\0\0\0\0\0\0\0\1\0\0\0\2' - else: - return '\0\0\0\0\1\0\0\0\2\0\0\0' + if verbose: + print 'getsample' + if audioop.getsample('\0\0\0\1', 4, 0) == 1: + return '\0\0\0\0\0\0\0\1\0\0\0\2' + else: + return '\0\0\0\0\1\0\0\0\2\0\0\0' def testmax(data): - if audioop.max(data[0], 1) <> 2 or \ - audioop.max(data[1], 2) <> 2 or \ - audioop.max(data[2], 4) <> 2: - return 0 - return 1 + if verbose: + print 'max' + if audioop.max(data[0], 1) <> 2 or \ + audioop.max(data[1], 2) <> 2 or \ + audioop.max(data[2], 4) <> 2: + return 0 + return 1 + +def testminmax(data): + if verbose: + print 'minmax' + if audioop.minmax(data[0], 1) <> (0, 2) or \ + audioop.minmax(data[1], 2) <> (0, 2) or \ + audioop.minmax(data[2], 4) <> (0, 2): + return 0 + return 1 def testmaxpp(data): - if audioop.maxpp(data[0], 1) <> 0 or \ - audioop.maxpp(data[1], 2) <> 0 or \ - audioop.maxpp(data[2], 4) <> 0: - return 0 - return 1 + if verbose: + print 'maxpp' + if audioop.maxpp(data[0], 1) <> 0 or \ + audioop.maxpp(data[1], 2) <> 0 or \ + audioop.maxpp(data[2], 4) <> 0: + return 0 + return 1 def testavg(data): - if audioop.avg(data[0], 1) <> 1 or \ - audioop.avg(data[1], 2) <> 1 or \ - audioop.avg(data[2], 4) <> 1: - return 0 - return 1 + if verbose: + print 'avg' + if audioop.avg(data[0], 1) <> 1 or \ + audioop.avg(data[1], 2) <> 1 or \ + audioop.avg(data[2], 4) <> 1: + return 0 + return 1 def testavgpp(data): - if audioop.avgpp(data[0], 1) <> 0 or \ - audioop.avgpp(data[1], 2) <> 0 or \ - audioop.avgpp(data[2], 4) <> 0: - return 0 - return 1 + if verbose: + print 'avgpp' + if audioop.avgpp(data[0], 1) <> 0 or \ + audioop.avgpp(data[1], 2) <> 0 or \ + audioop.avgpp(data[2], 4) <> 0: + return 0 + return 1 def testrms(data): - if audioop.rms(data[0], 1) <> 1 or \ - audioop.rms(data[1], 2) <> 1 or \ - audioop.rms(data[2], 4) <> 1: - return 0 - return 1 + if audioop.rms(data[0], 1) <> 1 or \ + audioop.rms(data[1], 2) <> 1 or \ + audioop.rms(data[2], 4) <> 1: + return 0 + return 1 def testcross(data): - if audioop.cross(data[0], 1) <> 0 or \ - audioop.cross(data[1], 2) <> 0 or \ - audioop.cross(data[2], 4) <> 0: - return 0 - return 1 + if verbose: + print 'cross' + if audioop.cross(data[0], 1) <> 0 or \ + audioop.cross(data[1], 2) <> 0 or \ + audioop.cross(data[2], 4) <> 0: + return 0 + return 1 def testadd(data): - data2 = [] - for d in data: - str = '' - for s in d: - str = str + chr(ord(s)*2) - data2.append(str) - if audioop.add(data[0], data[0], 1) <> data2[0] or \ - audioop.add(data[1], data[1], 2) <> data2[1] or \ - audioop.add(data[2], data[2], 4) <> data2[2]: - return 0 - return 1 + if verbose: + print 'add' + data2 = [] + for d in data: + str = '' + for s in d: + str = str + chr(ord(s)*2) + data2.append(str) + if audioop.add(data[0], data[0], 1) <> data2[0] or \ + audioop.add(data[1], data[1], 2) <> data2[1] or \ + audioop.add(data[2], data[2], 4) <> data2[2]: + return 0 + return 1 def testbias(data): - # Note: this test assumes that avg() works - d1 = audioop.bias(data[0], 1, 100) - d2 = audioop.bias(data[1], 2, 100) - d4 = audioop.bias(data[2], 4, 100) - if audioop.avg(d1, 1) <> 101 or \ - audioop.avg(d2, 2) <> 101 or \ - audioop.avg(d4, 4) <> 101: - return 0 - return 1 + if verbose: + print 'bias' + # Note: this test assumes that avg() works + d1 = audioop.bias(data[0], 1, 100) + d2 = audioop.bias(data[1], 2, 100) + d4 = audioop.bias(data[2], 4, 100) + if audioop.avg(d1, 1) <> 101 or \ + audioop.avg(d2, 2) <> 101 or \ + audioop.avg(d4, 4) <> 101: + return 0 + return 1 def testlin2lin(data): - # too simple: we test only the size - for d1 in data: - for d2 in data: - got = len(d1)/3 - wtd = len(d2)/3 - if len(audioop.lin2lin(d1, got, wtd)) <> len(d2): - return 0 - return 1 + if verbose: + print 'lin2lin' + # too simple: we test only the size + for d1 in data: + for d2 in data: + got = len(d1)/3 + wtd = len(d2)/3 + if len(audioop.lin2lin(d1, got, wtd)) <> len(d2): + return 0 + return 1 def testadpcm2lin(data): - # Very cursory test - if audioop.adpcm2lin('\0\0', 1, None) <> ('\0\0\0\0', (0,0)): - return 0 - return 1 + # Very cursory test + if audioop.adpcm2lin('\0\0', 1, None) <> ('\0\0\0\0', (0,0)): + return 0 + return 1 def testlin2adpcm(data): - # Very cursory test - if audioop.lin2adpcm('\0\0\0\0', 1, None) <> ('\0\0', (0,0)): - return 0 - return 1 + if verbose: + print 'lin2adpcm' + # Very cursory test + if audioop.lin2adpcm('\0\0\0\0', 1, None) <> ('\0\0', (0,0)): + return 0 + return 1 def testlin2ulaw(data): - if audioop.lin2ulaw(data[0], 1) <> '\377\347\333' or \ - audioop.lin2ulaw(data[1], 2) <> '\377\377\377' or \ - audioop.lin2ulaw(data[2], 4) <> '\377\377\377': - return 0 - return 1 + if verbose: + print 'lin2ulaw' + if audioop.lin2ulaw(data[0], 1) <> '\377\347\333' or \ + audioop.lin2ulaw(data[1], 2) <> '\377\377\377' or \ + audioop.lin2ulaw(data[2], 4) <> '\377\377\377': + return 0 + return 1 def testulaw2lin(data): - # Cursory - d = audioop.lin2ulaw(data[0], 1) - if audioop.ulaw2lin(d, 1) <> data[0]: - return 0 - return 1 + if verbose: + print 'ulaw2lin' + # Cursory + d = audioop.lin2ulaw(data[0], 1) + if audioop.ulaw2lin(d, 1) <> data[0]: + return 0 + return 1 def testmul(data): - data2 = [] - for d in data: - str = '' - for s in d: - str = str + chr(ord(s)*2) - data2.append(str) - if audioop.mul(data[0], 1, 2) <> data2[0] or \ - audioop.mul(data[1],2, 2) <> data2[1] or \ - audioop.mul(data[2], 4, 2) <> data2[2]: - return 0 - return 1 + if verbose: + print 'mul' + data2 = [] + for d in data: + str = '' + for s in d: + str = str + chr(ord(s)*2) + data2.append(str) + if audioop.mul(data[0], 1, 2) <> data2[0] or \ + audioop.mul(data[1],2, 2) <> data2[1] or \ + audioop.mul(data[2], 4, 2) <> data2[2]: + return 0 + return 1 + +def testratecv(data): + if verbose: + print 'ratecv' + state = (-8000, ((256, 512),)) + if audioop.ratecv(data[0], 1, 1, 8000, 16000, state) != \ + ('\001\000\000\001\001\002', state): + return 0 + return 1 def testreverse(data): - if audioop.reverse(data[0], 1) <> '\2\1\0': - return 0 - return 1 + if verbose: + print 'reverse' + if audioop.reverse(data[0], 1) <> '\2\1\0': + return 0 + return 1 def testtomono(data): - data2 = '' - for d in data[0]: - data2 = data2 + d + d - if audioop.tomono(data2, 1, 0.5, 0.5) <> data[0]: - return 0 - return 1 + if verbose: + print 'tomono' + data2 = '' + for d in data[0]: + data2 = data2 + d + d + if audioop.tomono(data2, 1, 0.5, 0.5) <> data[0]: + return 0 + return 1 def testtostereo(data): - data2 = '' - for d in data[0]: - data2 = data2 + d + d - if audioop.tostereo(data[0], 1, 1, 1) <> data2: - return 0 - return 1 + if verbose: + print 'tostereo' + data2 = '' + for d in data[0]: + data2 = data2 + d + d + if audioop.tostereo(data[0], 1, 1, 1) <> data2: + return 0 + return 1 def testfindfactor(data): - if audioop.findfactor(data[1], data[1]) <> 1.0: - return 0 - return 1 + if verbose: + print 'findfactor' + if audioop.findfactor(data[1], data[1]) <> 1.0: + return 0 + return 1 def testfindfit(data): - if audioop.findfit(data[1], data[1]) <> (0, 1.0): - return 0 - return 1 + if verbose: + print 'findfit' + if audioop.findfit(data[1], data[1]) <> (0, 1.0): + return 0 + return 1 def testfindmax(data): - if audioop.findmax(data[1], 1) <> 2: - return 0 - return 1 + if verbose: + print 'findmax' + if audioop.findmax(data[1], 1) <> 2: + return 0 + return 1 def testgetsample(data): - for i in range(3): - if audioop.getsample(data[0], 1, i) <> i or \ - audioop.getsample(data[1], 2, i) <> i or \ - audioop.getsample(data[2], 4, i) <> i: - return 0 - return 1 + if verbose: + print 'getsample' + for i in range(3): + if audioop.getsample(data[0], 1, i) <> i or \ + audioop.getsample(data[1], 2, i) <> i or \ + audioop.getsample(data[2], 4, i) <> i: + return 0 + return 1 def testone(name, data): - try: - func = eval('test'+name) - except NameError: - print 'No test found for audioop.'+name+'()' - return - try: - rv = func(data) - except 'xx': - print 'Test FAILED for audioop.'+name+'() (with an exception)' - return - if not rv: - print 'Test FAILED for audioop.'+name+'()' + try: + func = eval('test'+name) + except NameError: + print 'No test found for audioop.'+name+'()' + return + try: + rv = func(data) + except 'xx': + print 'Test FAILED for audioop.'+name+'() (with an exception)' + return + if not rv: + print 'Test FAILED for audioop.'+name+'()' def testall(): - data = [gendata1(), gendata2(), gendata4()] - names = dir(audioop) - # We know there is a routine 'add' - routines = [] - for n in names: - if type(eval('audioop.'+n)) == type(audioop.add): - routines.append(n) - for n in routines: - testone(n, data) + data = [gendata1(), gendata2(), gendata4()] + names = dir(audioop) + # We know there is a routine 'add' + routines = [] + for n in names: + if type(eval('audioop.'+n)) == type(audioop.add): + routines.append(n) + for n in routines: + testone(n, data) testall() diff --git a/Lib/dos_8x3/test_bin.py b/Lib/dos_8x3/test_bin.py new file mode 100644 index 0000000..aa156d9 --- /dev/null +++ b/Lib/dos_8x3/test_bin.py @@ -0,0 +1,46 @@ +#! /usr/bin/env python +"""Test script for the binascii C module + + Uses the mechanism of the python binhex module + Roger E. Masse +""" +import binhex +import tempfile +from test_support import verbose + +def test(): + + try: + fname1 = tempfile.mktemp() + fname2 = tempfile.mktemp() + f = open(fname1, 'w') + except: + raise ImportError, "Cannot test binascii without a temp file" + + start = 'Jack is my hero' + f.write(start) + f.close() + + binhex.binhex(fname1, fname2) + if verbose: + print 'binhex' + + binhex.hexbin(fname2, fname1) + if verbose: + print 'hexbin' + + f = open(fname1, 'r') + finish = f.readline() + + if start <> finish: + print 'Error: binhex <> hexbin' + elif verbose: + print 'binhex == hexbin' + + try: + import os + os.unlink(fname1) + os.unlink(fname2) + except: + pass +test() diff --git a/Lib/dos_8x3/test_bsd.py b/Lib/dos_8x3/test_bsd.py new file mode 100644 index 0000000..7a95eb9 --- /dev/null +++ b/Lib/dos_8x3/test_bsd.py @@ -0,0 +1,69 @@ +#! /usr/bin/env python +"""Test script for the bsddb C module + Roger E. Masse +""" +import bsddb +import tempfile +from test_support import verbose + +def test(openmethod, what): + + if verbose: + print '\nTesting: ', what + + fname = tempfile.mktemp() + f = openmethod(fname, 'c') + if verbose: + print 'creation...' + f['0'] = '' + f['a'] = 'Guido' + f['b'] = 'van' + f['c'] = 'Rossum' + f['d'] = 'invented' + f['f'] = 'Python' + if verbose: + print '%s %s %s' % (f['a'], f['b'], f['c']) + + if what == 'BTree' : + if verbose: + print 'key ordering...' + f.set_location(f.first()[0]) + while 1: + try: + rec = f.next() + except KeyError: + if rec <> f.last(): + print 'Error, last <> last!' + f.previous() + break + if verbose: + print rec + if not f.has_key('a'): + print 'Error, missing key!' + + f.sync() + f.close() + if verbose: + print 'modification...' + f = openmethod(fname, 'w') + f['d'] = 'discovered' + + if verbose: + print 'access...' + for key in f.keys(): + word = f[key] + if verbose: + print word + + f.close() + +types = [(bsddb.btopen, 'BTree'), + (bsddb.hashopen, 'Hash Table'), + # (bsddb.rnopen,'Record Numbers'), 'put' for RECNO for bsddb 1.85 + # appears broken... at least on + # Solaris Intel - rmasse 1/97 + ] + +for type in types: + test(type[0], type[1]) + diff --git a/Lib/dos_8x3/test_cma.py b/Lib/dos_8x3/test_cma.py index 8c452d7..71e7729 100644 --- a/Lib/dos_8x3/test_cma.py +++ b/Lib/dos_8x3/test_cma.py @@ -1,22 +1,35 @@ #! /usr/bin/env python """ Simple test script for cmathmodule.c -Roger E. Masse + Roger E. Masse """ import cmath +from test_support import verbose -cmath.acos(1.0) -cmath.acosh(1.0) -cmath.asin(1.0) -cmath.asinh(1.0) -cmath.atan(0.2) -cmath.atanh(0.3) -cmath.cos(1.0) -cmath.cosh(1.0) -cmath.exp(1.0) -cmath.log(1.0) -cmath.log10(1.0) -cmath.sin(1.0) -cmath.sinh(1.0) -cmath.sqrt(1.0) -cmath.tan(1.0) -cmath.tanh(1.0) +testdict = {'acos' : 1.0, + 'acosh' : 1.0, + 'asin' : 1.0, + 'asinh' : 1.0, + 'atan' : 0.2, + 'atanh' : 0.2, + 'cos' : 1.0, + 'cosh' : 1.0, + 'exp' : 1.0, + 'log' : 1.0, + 'log10' : 1.0, + 'sin' : 1.0, + 'sinh' : 1.0, + 'sqrt' : 1.0, + 'tan' : 1.0, + 'tanh' : 1.0} + +for func in testdict.keys(): + f = getattr(cmath, func) + r = f(testdict[func]) + if verbose: + print 'Calling %s(%f) = %f' % (func, testdict[func], abs(r)) + +p = cmath.pi +e = cmath.e +if verbose: + print 'PI = ', abs(p) + print 'E = ', abs(e) diff --git a/Lib/dos_8x3/test_cry.py b/Lib/dos_8x3/test_cry.py index 08e6b61..0685c95 100644 --- a/Lib/dos_8x3/test_cry.py +++ b/Lib/dos_8x3/test_cry.py @@ -2,5 +2,10 @@ """Simple test script for cryptmodule.c Roger E. Masse """ + +from test_support import verbose import crypt -print 'Test encryption: ', crypt.crypt('mypassword', 'ab') + +c = crypt.crypt('mypassword', 'ab') +if verbose: + print 'Test encryption: ', c diff --git a/Lib/dos_8x3/test_err.py b/Lib/dos_8x3/test_err.py new file mode 100644 index 0000000..6951255 --- /dev/null +++ b/Lib/dos_8x3/test_err.py @@ -0,0 +1,44 @@ +#! /usr/bin/env python +"""Test the errno module + Roger E. Masse +""" + +import errno +from test_support import verbose + +errors = ['E2BIG', 'EACCES', 'EADDRINUSE', 'EADDRNOTAVAIL', 'EADV', + 'EAFNOSUPPORT', 'EAGAIN', 'EALREADY', 'EBADE', 'EBADF', + 'EBADFD', 'EBADMSG', 'EBADR', 'EBADRQC', 'EBADSLT', + 'EBFONT', 'EBUSY', 'ECHILD', 'ECHRNG', 'ECOMM', + 'ECONNABORTED', 'ECONNREFUSED', 'ECONNRESET', + 'EDEADLK', 'EDEADLOCK', 'EDESTADDRREQ', 'EDOM', + 'EDQUOT', 'EEXIST', 'EFAULT', 'EFBIG', 'EHOSTDOWN', + 'EHOSTUNREACH', 'EIDRM', 'EILSEQ', 'EINPROGRESS', + 'EINTR', 'EINVAL', 'EIO', 'EISCONN', 'EISDIR', + 'EL2HLT', 'EL2NSYNC', 'EL3HLT', 'EL3RST', 'ELIBACC', + 'ELIBBAD', 'ELIBEXEC', 'ELIBMAX', 'ELIBSCN', 'ELNRNG', + 'ELOOP', 'EMFILE', 'EMLINK', 'EMSGSIZE', 'EMULTIHOP', + 'ENAMETOOLONG', 'ENETDOWN', 'ENETRESET', 'ENETUNREACH', + 'ENFILE', 'ENOANO', 'ENOBUFS', 'ENOCSI', 'ENODATA', + 'ENODEV', 'ENOENT', 'ENOEXEC', 'ENOLCK', 'ENOLINK', + 'ENOMEM', 'ENOMSG', 'ENONET', 'ENOPKG', 'ENOPROTOOPT', + 'ENOSPC', 'ENOSR', 'ENOSTR', 'ENOSYS', 'ENOTBLK', + 'ENOTCONN', 'ENOTDIR', 'ENOTEMPTY', 'ENOTSOCK', + 'ENOTTY', 'ENOTUNIQ', 'ENXIO', 'EOPNOTSUPP', + 'EOVERFLOW', 'EPERM', 'EPFNOSUPPORT', 'EPIPE', + 'EPROTO', 'EPROTONOSUPPORT', 'EPROTOTYPE', + 'ERANGE', 'EREMCHG', 'EREMOTE', 'ERESTART', + 'EROFS', 'ESHUTDOWN', 'ESOCKTNOSUPPORT', 'ESPIPE', + 'ESRCH', 'ESRMNT', 'ESTALE', 'ESTRPIPE', 'ETIME', + 'ETIMEDOUT', 'ETOOMANYREFS', 'ETXTBSY', 'EUNATCH', + 'EUSERS', 'EWOULDBLOCK', 'EXDEV', 'EXFULL'] + +# +# This is is a wee bit bogus since the module only conditionally adds +# errno constants if they have been defined by errno.h However, this +# test seems to work on SGI, Sparc & intel Solaris, and linux. +# +for error in errors: + a = getattr(errno, error) + if verbose: + print '%s: %d' % (error, a) diff --git a/Lib/dos_8x3/test_fcn.py b/Lib/dos_8x3/test_fcn.py new file mode 100644 index 0000000..4929fbb --- /dev/null +++ b/Lib/dos_8x3/test_fcn.py @@ -0,0 +1,28 @@ +#! /usr/bin/env python +"""Test program for the fcntl C module. + Roger E. Masse +""" +import struct +import fcntl +import FCNTL +import os +from test_support import verbose + +filename = '/tmp/delete-me' + +# the example from the library docs +f = open(filename,'w') +rv = fcntl.fcntl(f.fileno(), FCNTL.O_NDELAY, 1) +if verbose: + print 'Status from fnctl with O_NDELAY: ', rv + +lockdata = struct.pack('hhllhh', FCNTL.F_WRLCK, 0, 0, 0, 0, 0) +if verbose: + print 'struct.pack: ', lockdata + +rv = fcntl.fcntl(f.fileno(), FCNTL.F_SETLKW, lockdata) +if verbose: + print 'String from fcntl with F_SETLKW: ', rv + +f.close() +os.unlink(filename) diff --git a/Lib/dos_8x3/test_gdb.py b/Lib/dos_8x3/test_gdb.py new file mode 100644 index 0000000..22db6aa --- /dev/null +++ b/Lib/dos_8x3/test_gdb.py @@ -0,0 +1,34 @@ +#! /usr/bin/env python +"""Test script for the gdbm module + Roger E. Masse +""" + +import gdbm +from gdbm import error +from test_support import verbose + +filename= '/tmp/delete_me' + +g = gdbm.open(filename, 'c') +g['a'] = 'b' +g['12345678910'] = '019237410982340912840198242' +a = g.keys() +if verbose: + print 'Test gdbm file keys: ', a + +g.has_key('a') +g.close() +g = gdbm.open(filename, 'r') +g.close() +g = gdbm.open(filename, 'rw') +g.close() +g = gdbm.open(filename, 'w') +g.close() +g = gdbm.open(filename, 'n') +g.close() + +try: + import os + os.unlink(filename) +except: + pass diff --git a/Lib/dos_8x3/test_ima.py b/Lib/dos_8x3/test_ima.py new file mode 100644 index 0000000..fc8dadf --- /dev/null +++ b/Lib/dos_8x3/test_ima.py @@ -0,0 +1,165 @@ +#! /usr/bin/env python +"""Test script for the imageop module. This has the side + effect of partially testing the imgfile module as well. + Roger E. Masse +""" +from test_support import verbose + +import imageop + +def main(use_rgbimg=1): + + if use_rgbimg: + image, width, height = getrgbimage('test.rgb') + else: + image, width, height = getimage('test.rgb') + + # Return the selected part of image, which should by width by height + # in size and consist of pixels of psize bytes. + if verbose: + print 'crop' + newimage = imageop.crop (image, 4, width, height, 0, 0, 1, 1) + + # Return image scaled to size newwidth by newheight. No interpolation + # is done, scaling is done by simple-minded pixel duplication or removal. + # Therefore, computer-generated images or dithered images will + # not look nice after scaling. + if verbose: + print 'scale' + scaleimage = imageop.scale(image, 4, width, height, 1, 1) + + # Run a vertical low-pass filter over an image. It does so by computing + # each destination pixel as the average of two vertically-aligned source + # pixels. The main use of this routine is to forestall excessive flicker + # if the image two vertically-aligned source pixels, hence the name. + if verbose: + print 'tovideo' + videoimage = imageop.tovideo (image, 4, width, height) + + # Convert an rgb image to an 8 bit rgb + if verbose: + print 'rgb2rgb8' + greyimage = imageop.rgb2rgb8(image, width, height) + + # Convert an 8 bit rgb image to a 24 bit rgb image + if verbose: + print 'rgb82rgb' + image = imageop.rgb82rgb(greyimage, width, height) + + # Convert an rgb image to an 8 bit greyscale image + if verbose: + print 'rgb2grey' + greyimage = imageop.rgb2grey(image, width, height) + + # Convert an 8 bit greyscale image to a 24 bit rgb image + if verbose: + print 'grey2rgb' + image = imageop.grey2rgb(greyimage, width, height) + + # Convert a 8-bit deep greyscale image to a 1-bit deep image by + # tresholding all the pixels. The resulting image is tightly packed + # and is probably only useful as an argument to mono2grey. + if verbose: + print 'grey2mono' + monoimage = imageop.grey2mono (greyimage, width, height, 0) + + # monoimage, width, height = getimage('monotest.rgb') + # Convert a 1-bit monochrome image to an 8 bit greyscale or color image. + # All pixels that are zero-valued on input get value p0 on output and + # all one-value input pixels get value p1 on output. To convert a + # monochrome black-and-white image to greyscale pass the values 0 and + # 255 respectively. + if verbose: + print 'mono2grey' + greyimage = imageop.mono2grey (monoimage, width, height, 0, 255) + + # Convert an 8-bit greyscale image to a 1-bit monochrome image using a + # (simple-minded) dithering algorithm. + if verbose: + print 'dither2mono' + monoimage = imageop.dither2mono (greyimage, width, height) + + # Convert an 8-bit greyscale image to a 4-bit greyscale image without + # dithering. + if verbose: + print 'grey2grey4' + grey4image = imageop.grey2grey4 (greyimage, width, height) + + # Convert an 8-bit greyscale image to a 2-bit greyscale image without + # dithering. + if verbose: + print 'grey2grey2' + grey2image = imageop.grey2grey2 (greyimage, width, height) + + # Convert an 8-bit greyscale image to a 2-bit greyscale image with + # dithering. As for dither2mono, the dithering algorithm is currently + # very simple. + if verbose: + print 'dither2grey2' + grey2image = imageop.dither2grey2 (greyimage, width, height) + + # Convert a 4-bit greyscale image to an 8-bit greyscale image. + if verbose: + print 'grey42grey' + greyimage = imageop.grey42grey (grey4image, width, height) + + # Convert a 2-bit greyscale image to an 8-bit greyscale image. + if verbose: + print 'grey22grey' + image = imageop.grey22grey (grey2image, width, height) + +def getrgbimage(name): + """return a tuple consisting of image (in 'imgfile' format but + using rgbimg instead) width and height""" + + import rgbimg + + try: + sizes = rgbimg.sizeofimage(name) + except rgbimg.error: + name = get_qualified_path(name) + sizes = rgbimg.sizeofimage(name) + if verbose: + print 'rgbimg opening test image: %s, sizes: %s' % (name, str(sizes)) + + image = rgbimg.longimagedata(name) + return (image, sizes[0], sizes[1]) + +def getimage(name): + """return a tuple consisting of + image (in 'imgfile' format) width and height + """ + + import imgfile + + try: + sizes = imgfile.getsizes(name) + except imgfile.error: + name = get_qualified_path(name) + sizes = imgfile.getsizes(name) + if verbose: + print 'imgfile opening test image: %s, sizes: %s' % (name, str(sizes)) + + image = imgfile.read(name) + return (image, sizes[0], sizes[1]) + +def get_qualified_path(name): + """ return a more qualified path to name contructed from argv[1]""" + import sys + import os + import string + + # get a more qualified path component of the script... + if __name__ == '__main__': + ourname = sys.argv[0] + else: # ...or the full path of the module + ourname = sys.modules[__name__].__file__ + + parts = string.splitfields(ourname, os.sep) + parts[-1] = name + name = string.joinfields(parts, os.sep) + return name + +# rgbimg (unlike imgfile) is portable to platforms other than SGI. So we prefer to use it. +main(use_rgbimg=1) + diff --git a/Lib/dos_8x3/test_img.py b/Lib/dos_8x3/test_img.py new file mode 100644 index 0000000..8a3b91e --- /dev/null +++ b/Lib/dos_8x3/test_img.py @@ -0,0 +1,110 @@ +#! /usr/bin/env python +"""Simple test script for imgfile.c + Roger E. Masse +""" +from test_support import verbose + +import imgfile + + +def main(): + + # Test a 3 byte color image + testimage('test.rgb') + + # Test a 1 byte greyscale image + testimage('greytest.rgb') + + +def testimage(name): + """Run through the imgfile's battery of possible methods + on the image passed in name. + """ + + import sys + import os + import string + + outputfile = '/tmp/deleteme' + + # try opening the name directly + try: + # This function returns a tuple (x, y, z) where x and y are the size + # of the image in pixels and z is the number of bytes per pixel. Only + # 3 byte RGB pixels and 1 byte greyscale pixels are supported. + sizes = imgfile.getsizes(name) + except imgfile.error: + # get a more qualified path component of the script... + if __name__ == '__main__': + ourname = sys.argv[0] + else: # ...or the full path of the module + ourname = sys.modules[__name__].__file__ + + parts = string.splitfields(ourname, os.sep) + parts[-1] = name + name = string.joinfields(parts, os.sep) + sizes = imgfile.getsizes(name) + if verbose: + print 'Opening test image: %s, sizes: %s' % (name, str(sizes)) + # This function reads and decodes the image on the specified file, + # and returns it as a python string. The string has either 1 byte + # greyscale pixels or 4 byte RGBA pixels. The bottom left pixel + # is the first in the string. This format is suitable to pass + # to gl.lrectwrite, for instance. + image = imgfile.read(name) + + # This function writes the RGB or greyscale data in data to + # image file file. x and y give the size of the image, z is + # 1 for 1 byte greyscale images or 3 for RGB images (which + # are stored as 4 byte values of which only the lower three + # bytes are used). These are the formats returned by gl.lrectread. + if verbose: + print 'Writing output file' + imgfile.write (outputfile, image, sizes[0], sizes[1], sizes[2]) + + + if verbose: + print 'Opening scaled test image: %s, sizes: %s' % (name, str(sizes)) + # This function is identical to read but it returns an image that + # is scaled to the given x and y sizes. If the filter and blur + # parameters are omitted scaling is done by simply dropping + # or duplicating pixels, so the result will be less than perfect, + # especially for computer-generated images. Alternatively, + # you can specify a filter to use to smoothen the image after + # scaling. The filter forms supported are 'impulse', 'box', + # 'triangle', 'quadratic' and 'gaussian'. If a filter is + # specified blur is an optional parameter specifying the + # blurriness of the filter. It defaults to 1.0. readscaled + # makes no attempt to keep the aspect ratio correct, so that + # is the users' responsibility. + if verbose: + print 'Filtering with "impulse"' + simage = imgfile.readscaled (name, sizes[0]/2, sizes[1]/2, 'impulse', 2.0) + + # This function sets a global flag which defines whether the + # scan lines of the image are read or written from bottom to + # top (flag is zero, compatible with SGI GL) or from top to + # bottom(flag is one, compatible with X). The default is zero. + if verbose: + print 'Switching to X compatibility' + imgfile.ttob (1) + + if verbose: + print 'Filtering with "triangle"' + simage = imgfile.readscaled (name, sizes[0]/2, sizes[1]/2, 'triangle', 3.0) + if verbose: + print 'Switching back to SGI compatibility' + imgfile.ttob (0) + + if verbose: print 'Filtering with "quadratic"' + simage = imgfile.readscaled (name, sizes[0]/2, sizes[1]/2, 'quadratic') + if verbose: print 'Filtering with "gaussian"' + simage = imgfile.readscaled (name, sizes[0]/2, sizes[1]/2, 'gaussian', 1.0) + + if verbose: + print 'Writing output file' + imgfile.write (outputfile, simage, sizes[0]/2, sizes[1]/2, sizes[2]) + + os.unlink(outputfile) + +main() diff --git a/Lib/dos_8x3/test_reg.py b/Lib/dos_8x3/test_reg.py new file mode 100644 index 0000000..9d25d92 --- /dev/null +++ b/Lib/dos_8x3/test_reg.py @@ -0,0 +1,62 @@ +from test_support import verbose +import regex +from regex_syntax import * + +re = 'a+b+c+' +print 'no match:', regex.match(re, 'hello aaaabcccc world') +print 'successful search:', regex.search(re, 'hello aaaabcccc world') +try: + cre = regex.compile('\(' + re) +except regex.error: + print 'caught expected exception' +else: + print 'expected regex.error not raised' + +print 'failed awk syntax:', regex.search('(a+)|(b+)', 'cdb') +prev = regex.set_syntax(RE_SYNTAX_AWK) +print 'successful awk syntax:', regex.search('(a+)|(b+)', 'cdb') +regex.set_syntax(prev) +print 'failed awk syntax:', regex.search('(a+)|(b+)', 'cdb') + +re = '\([0-9]+\) *\([0-9]+\)' +print 'matching with group names and compile()' +cre = regex.compile(re) +print cre.match('801 999') +try: + print cre.group('one') +except regex.error: + print 'caught expected exception' +else: + print 'expected regex.error not raised' + +print 'matching with group names and symcomp()' +cre = regex.symcomp(re) +print cre.match('801 999') +print cre.group(0) +print cre.group('one') +print cre.group(1, 2) +print cre.group('one', 'two') +print 'realpat:', cre.realpat +print 'groupindex:', cre.groupindex + +re = 'world' +cre = regex.compile(re) +print 'not case folded search:', cre.search('HELLO WORLD') +cre = regex.compile(re, regex.casefold) +print 'case folded search:', cre.search('HELLO WORLD') + +print '__members__:', cre.__members__ +print 'regs:', cre.regs +print 'last:', cre.last +print 'translate:', `cre.translate` +print 'givenpat:', cre.givenpat + +print 'match with pos:', cre.match('hello world', 7) +print 'search with pos:', cre.search('hello world there world', 7) +print 'bogus group:', cre.group(0, 1, 3) +try: + print 'no name:', cre.group('one') +except regex.error: + print 'caught expected exception' +else: + print 'expected regex.error not raised' diff --git a/Lib/dos_8x3/test_rgb.py b/Lib/dos_8x3/test_rgb.py index cdadc66..52814b4 100755 --- a/Lib/dos_8x3/test_rgb.py +++ b/Lib/dos_8x3/test_rgb.py @@ -23,7 +23,8 @@ def testimg(rgb_file, raw_file): raise error, 'bad image length' raw = open(raw_file, 'r').read() if rgb != raw: - raise error, 'images don\'t match for '+rgb_file+' and '+raw_file + raise error, \ + 'images don\'t match for '+rgb_file+' and '+raw_file for depth in [1, 3, 4]: rgbimg.longstoimage(rgb, width, height, depth, '@.rgb') os.unlink('@.rgb') diff --git a/Lib/dos_8x3/test_rot.py b/Lib/dos_8x3/test_rot.py new file mode 100644 index 0000000..338ea9d --- /dev/null +++ b/Lib/dos_8x3/test_rot.py @@ -0,0 +1,28 @@ +import rotor + +r = rotor.newrotor("you'll never guess this") +r = rotor.newrotor("you'll never guess this", 12) + +A = 'spam and eggs' +B = 'cheese shop' + +a = r.encrypt(A) +print a +b = r.encryptmore(B) +print b + +A1 = r.decrypt(a) +print A1 +if A1 <> A: + print 'decrypt failed' + +B1 = r.decryptmore(b) +print B1 +if B1 <> B: + print 'decryptmore failed' + +try: + r.setkey() +except TypeError: + pass +r.setkey('you guessed it!') diff --git a/Lib/dos_8x3/test_sel.py b/Lib/dos_8x3/test_sel.py index f185308..f7f20f3 100755 --- a/Lib/dos_8x3/test_sel.py +++ b/Lib/dos_8x3/test_sel.py @@ -1,14 +1,44 @@ # Testing select module +import select +import os + +# test some known error conditions +try: + rfd, wfd, xfd = select.select(1, 2, 3) +except TypeError: + pass +else: + print 'expected TypeError exception not raised' + +class Nope: + pass + +class Almost: + def fileno(self): + return 'fileno' + +try: + rfd, wfd, xfd = select.select([Nope()], [], []) +except TypeError: + pass +else: + print 'expected TypeError exception not raised' + +try: + rfd, wfd, xfd = select.select([Almost()], [], []) +except TypeError: + pass +else: + print 'expected TypeError exception not raised' + def test(): - import select - import os - cmd = 'for i in 0 1 2 3 4 5 6 7 8 9; do date; sleep 3; done' + cmd = 'for i in 0 1 2 3 4 5 6 7 8 9; do echo testing...; sleep 1; done' p = os.popen(cmd, 'r') for tout in (0, 1, 2, 4, 8, 16) + (None,)*10: print 'timeout =', tout rfd, wfd, xfd = select.select([p], [], [], tout) - print rfd, wfd, xfd +## print rfd, wfd, xfd if (rfd, wfd, xfd) == ([], [], []): continue if (rfd, wfd, xfd) == ([p], [], []): @@ -19,5 +49,7 @@ def test(): break continue print 'Heh?' + p.close() test() + diff --git a/Lib/dos_8x3/test_sig.py b/Lib/dos_8x3/test_sig.py index bfcf517..3619b96 100755 --- a/Lib/dos_8x3/test_sig.py +++ b/Lib/dos_8x3/test_sig.py @@ -1,31 +1,37 @@ # Test the signal module - +from test_support import verbose import signal import os +if verbose: + x = '-x' +else: + x = '+x' pid = os.getpid() # Shell script that will send us asynchronous signals script = """ -( - set -x + ( + set %(x)s sleep 2 kill -5 %(pid)d sleep 2 kill -2 %(pid)d sleep 2 kill -3 %(pid)d -) & + ) & """ % vars() def handlerA(*args): - print "handlerA", args + if verbose: + print "handlerA", args HandlerBCalled = "HandlerBCalled" # Exception def handlerB(*args): - print "handlerB", args + if verbose: + print "handlerB", args raise HandlerBCalled, args signal.alarm(20) # Entire test lasts at most 20 sec. @@ -40,11 +46,18 @@ print "starting pause() loop..." try: while 1: - print "call pause()..." + if verbose: + print "call pause()..." try: signal.pause() - print "pause() returned" + if verbose: + print "pause() returned" except HandlerBCalled: - print "HandlerBCalled exception caught" + if verbose: + print "HandlerBCalled exception caught" + else: + pass + except KeyboardInterrupt: - print "KeyboardInterrupt (assume the alarm() went off)" + if verbose: + print "KeyboardInterrupt (assume the alarm() went off)" diff --git a/Lib/dos_8x3/test_soc.py b/Lib/dos_8x3/test_soc.py new file mode 100644 index 0000000..1e157b9 --- /dev/null +++ b/Lib/dos_8x3/test_soc.py @@ -0,0 +1,142 @@ +# Not tested: +# socket.fromfd() +# sktobj.getsockopt() +# sktobj.recvfrom() +# sktobj.sendto() +# sktobj.setblocking() +# sktobj.setsockopt() +# sktobj.shutdown() + + +from test_support import verbose +import socket +import os +import time +import string + +def missing_ok(str): + try: + getattr(socket, str) + except AttributeError: + pass + +print socket.error + +print socket.AF_INET + +print socket.SOCK_STREAM +print socket.SOCK_DGRAM +print socket.SOCK_RAW +print socket.SOCK_RDM +print socket.SOCK_SEQPACKET + +for optional in ("AF_UNIX", + + "SO_DEBUG", "SO_ACCEPTCONN", "SO_REUSEADDR", "SO_KEEPALIVE", + "SO_DONTROUTE", "SO_BROADCAST", "SO_USELOOPBACK", "SO_LINGER", + "SO_OOBINLINE", "SO_REUSEPORT", "SO_SNDBUF", "SO_RCVBUF", + "SO_SNDLOWAT", "SO_RCVLOWAT", "SO_SNDTIMEO", "SO_RCVTIMEO", + "SO_ERROR", "SO_TYPE", "SOMAXCONN", + + "MSG_OOB", "MSG_PEEK", "MSG_DONTROUTE", "MSG_EOR", + "MSG_TRUNC", "MSG_CTRUNC", "MSG_WAITALL", "MSG_BTAG", + "MSG_ETAG", + + "SOL_SOCKET", + + "IPPROTO_IP", "IPPROTO_ICMP", "IPPROTO_IGMP", + "IPPROTO_GGP", "IPPROTO_TCP", "IPPROTO_EGP", + "IPPROTO_PUP", "IPPROTO_UDP", "IPPROTO_IDP", + "IPPROTO_HELLO", "IPPROTO_ND", "IPPROTO_TP", + "IPPROTO_XTP", "IPPROTO_EON", "IPPROTO_BIP", + "IPPROTO_RAW", "IPPROTO_MAX", + + "IPPORT_RESERVED", "IPPORT_USERRESERVED", + + "INADDR_ANY", "INADDR_BROADCAST", "INADDR_LOOPBACK", + "INADDR_UNSPEC_GROUP", "INADDR_ALLHOSTS_GROUP", + "INADDR_MAX_LOCAL_GROUP", "INADDR_NONE", + + "IP_OPTIONS", "IP_HDRINCL", "IP_TOS", "IP_TTL", + "IP_RECVOPTS", "IP_RECVRETOPTS", "IP_RECVDSTADDR", + "IP_RETOPTS", "IP_MULTICAST_IF", "IP_MULTICAST_TTL", + "IP_MULTICAST_LOOP", "IP_ADD_MEMBERSHIP", + "IP_DROP_MEMBERSHIP", + ): + missing_ok(optional) + +hostname = socket.gethostname() +ip = socket.gethostbyname(hostname) +hname, aliases, ipaddrs = socket.gethostbyaddr(ip) +all_host_names = [hname] + aliases + +if verbose: + print hostname + print ip + print hname, aliases, ipaddrs + print all_host_names + +for name in all_host_names: + if string.find(name, '.'): + break +else: + print 'FQDN not found' + +print socket.getservbyname('telnet', 'tcp') +try: + socket.getservbyname('telnet', 'udp') +except socket.error: + pass + + +try: + PORT = 50007 + if os.fork(): + # parent is server + s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + s.bind(hostname, PORT) + s.listen(1) + if verbose: + print 'parent accepting' + conn, addr = s.accept() + if verbose: + print 'connected by', addr + # couple of interesting tests while we've got a live socket + f = conn.fileno() + if verbose: + print 'fileno:', f + p = conn.getpeername() + if verbose: + print 'peer:', p + n = conn.getsockname() + if verbose: + print 'sockname:', n + f = conn.makefile() + if verbose: + print 'file obj:', f + while 1: + data = conn.recv(1024) + if not data: + break + if verbose: + print 'received:', data + conn.send(data) + conn.close() + else: + try: + # child is client + time.sleep(1) + s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + if verbose: + print 'child connecting' + s.connect(hostname, PORT) + msg = 'socket test' + s.send(msg) + data = s.recv(1024) + if msg <> data: + print 'parent/client mismatch' + s.close() + finally: + os._exit(1) +except socket.error: + pass diff --git a/Lib/dos_8x3/test_str.py b/Lib/dos_8x3/test_str.py index 424cf52..efc98ff 100644 --- a/Lib/dos_8x3/test_str.py +++ b/Lib/dos_8x3/test_str.py @@ -1,13 +1,21 @@ +from test_support import verbose import strop, sys def test(name, input, output, *args): + if verbose: + print 'string.%s%s =? %s... ' % (name, (input,) + args, output), f = getattr(strop, name) try: value = apply(f, (input,) + args) except: value = sys.exc_type if value != output: + if verbose: + print 'no' print f, `input`, `output`, `value` + else: + if verbose: + print 'yes' test('atoi', " 1 ", 1) test('atoi', " 1x", ValueError) @@ -38,8 +46,19 @@ test('split', 'this is the split function', test('split', 'a|b|c|d', ['a', 'b', 'c', 'd'], '|') test('split', 'a|b|c|d', ['a', 'b', 'c|d'], '|', 2) +# join now works with any sequence type +class Sequence: + def __init__(self): self.seq = 'wxyz' + def __len__(self): return len(self.seq) + def __getitem__(self, i): return self.seq[i] + test('join', ['a', 'b', 'c', 'd'], 'a b c d') -test('join', ['a', 'b', 'c', 'd'], 'abcd', '') +test('join', ('a', 'b', 'c', 'd'), 'abcd', '') +test('join', Sequence(), 'w x y z') + +# try a few long ones +print strop.join(['x' * 100] * 100, ':') +print strop.join(('x' * 100,) * 100, ':') test('strip', ' hello ', 'hello') test('lstrip', ' hello ', 'hello ') diff --git a/Lib/dos_8x3/test_sun.py b/Lib/dos_8x3/test_sun.py new file mode 100644 index 0000000..aa85752 --- /dev/null +++ b/Lib/dos_8x3/test_sun.py @@ -0,0 +1,28 @@ +from test_support import verbose, TestFailed +import sunaudiodev +import os + +def findfile(file): + if os.path.isabs(file): return file + import sys + for dn in sys.path: + fn = os.path.join(dn, file) + if os.path.exists(fn): return fn + return file + +def play_sound_file(path): + fp = open(path, 'r') + data = fp.read() + fp.close() + try: + a = sunaudiodev.open('w') + except sunaudiodev.error, msg: + raise TestFailed, msg + else: + a.write(data) + a.close() + +def test(): + play_sound_file(findfile('audiotest.au')) + +test() diff --git a/Lib/dos_8x3/test_sup.py b/Lib/dos_8x3/test_sup.py index 7a76664..7dc1940 100755 --- a/Lib/dos_8x3/test_sup.py +++ b/Lib/dos_8x3/test_sup.py @@ -2,6 +2,8 @@ TestFailed = 'test_support -- test failed' # Exception +verbose = 1 # Flag set to 0 by regrtest.py + def unload(name): import sys try: diff --git a/Lib/dos_8x3/test_thr.py b/Lib/dos_8x3/test_thr.py index 4e0eb70..8a1f435 100755 --- a/Lib/dos_8x3/test_thr.py +++ b/Lib/dos_8x3/test_thr.py @@ -2,6 +2,7 @@ # Create a bunch of threads, let each do some work, wait until all are done +from test_support import verbose import whrandom import thread import time @@ -19,9 +20,11 @@ def task(ident): whmutex.acquire() delay = whrandom.random() * numtasks whmutex.release() - print 'task', ident, 'will run for', delay, 'sec' + if verbose: + print 'task', ident, 'will run for', delay, 'sec' time.sleep(delay) - print 'task', ident, 'done' + if verbose: + print 'task', ident, 'done' mutex.acquire() running = running - 1 if running == 0: @@ -33,7 +36,8 @@ def newtask(): global next_ident, running mutex.acquire() next_ident = next_ident + 1 - print 'creating task', next_ident + if verbose: + print 'creating task', next_ident thread.start_new_thread(task, (next_ident,)) running = running + 1 mutex.release() @@ -84,11 +88,14 @@ def task2(ident): whmutex.acquire() delay = whrandom.random() * numtasks whmutex.release() - print 'task', ident, 'will run for', delay, 'sec' + if verbose: + print 'task', ident, 'will run for', delay, 'sec' time.sleep(delay) - print 'task', ident, 'entering barrier', i + if verbose: + print 'task', ident, 'entering barrier', i bar.enter() - print 'task', ident, 'leaving barrier', i + if verbose: + print 'task', ident, 'leaving barrier', i mutex.acquire() running = running - 1 if running == 0: diff --git a/Lib/dos_8x3/test_tim.py b/Lib/dos_8x3/test_tim.py index bfc768a..85ea6ee 100644 --- a/Lib/dos_8x3/test_tim.py +++ b/Lib/dos_8x3/test_tim.py @@ -13,8 +13,8 @@ if int(time.mktime(time.localtime(t))) <> int(t): time.sleep(1.2) tt = time.gmtime(t) -for directive in ('a', 'A', 'b', 'B', 'c', 'd', 'E', 'H', 'I', - 'j', 'm', 'M', 'n', 'N', 'o', 'p', 'S', 't', +for directive in ('a', 'A', 'b', 'B', 'c', 'd', 'H', 'I', + 'j', 'm', 'M', 'p', 'S', 'U', 'w', 'W', 'x', 'X', 'y', 'Y', 'Z', '%'): format = '%' + directive time.strftime(format, tt) -- cgit v0.12