File 1-extra-test.patch of Package python-pmw
diff -ruN Pmw.1.3.2.orig/src/Pmw/Pmw_1_3/tests/Test.py.~1.5.~ Pmw.1.3.2/src/Pmw/Pmw_1_3/tests/Test.py.~1.5.~
--- Pmw/Pmw_1_3/tests/Test.py.~1.5.~ 2007-08-06 02:23:16.000000000 +0200
+++ Pmw/Pmw_1_3/tests/Test.py.~1.5.~ 1970-01-01 01:00:00.000000000 +0100
@@ -1,521 +0,0 @@
-# Functions used by widget tests.
-
-import imp
-import os
-import re
-import string
-import sys
-import traceback
-import types
-import Tkinter
-import _tkinter
-
-if Tkinter.TkVersion >= 8.4:
- refcountafterdestroy = 7
-else:
- refcountafterdestroy = 6
-
-script_name = imp.find_module(__name__)[1]
-if not os.path.isabs(script_name):
- script_name = os.path.join(os.getcwd(), script_name)
-
-while 1:
- script_dir = os.path.dirname(script_name)
- if not os.path.islink(script_name):
- break
- script_name = os.path.join(script_dir, os.readlink(script_name))
-script_dir = os.path.join(os.getcwd(), script_dir)
-script_dir = os.path.normpath(script_dir)
-
-# Add the '../../..' directory to the path.
-package_dir = os.path.dirname(script_dir)
-package_dir = os.path.dirname(package_dir)
-package_dir = os.path.dirname(package_dir)
-sys.path[:0] = [package_dir]
-
-import Pmw
-# Need to import TestVersion, rather than do its work here, since
-# __name__ will be known there.
-import TestVersion
-
-# Set this to 1 to generate tracebacks on exceptions, rather than
-# catching them and continuing with the tests.
-# This is useful for debugging the test scripts.
-dont_even_try = 0
-
-_delay = 1
-_verbose = 0
-_printTraceback = 0
-_initialised = 0
-
-##############################################################################
-# Public functions:
-
-rand = 12345
-def random():
- global rand
- rand = (rand * 125) % 2796203
- return rand
-
-def initialise():
- global _initialised, font, flagup, earthris, emptyimage, \
- stringvar, floatvar, root, reliefs
- if not _initialised:
- root = Tkinter.Tk(className = 'PmwTest')
- root.withdraw()
- if os.name == 'nt':
- size = 16
- else:
- size = 12
- Pmw.initialise(root, size = size, fontScheme = 'pmw2')
- font = {}
- font['small'] = '6x13'
- font['large'] = '10x20'
- font['variable'] = '-Adobe-Helvetica-Bold-R-Normal--*-120-*-*-*-*-*-*'
- flagup = Tkinter.BitmapImage(file = 'flagup.bmp')
- earthris = Tkinter.PhotoImage(file = 'earthris.gif')
- emptyimage = Tkinter.PhotoImage()
- stringvar = Tkinter.StringVar()
- stringvar.set('this is some text')
- floatvar = Tkinter.DoubleVar()
- floatvar.set(50.0)
- if haveBlt():
- global vectorSize, vector_x, vector_y
- vector_x = Pmw.Blt.Vector()
- vector_y = []
- for y in range(3):
- vector_y.append(Pmw.Blt.Vector())
- vectorSize = 50
- for index in range(vectorSize):
- vector_x.append(index)
- vector_y[0].append(random() % 100)
- vector_y[1].append(random() % 200)
- vector_y[2].append(random() % 100 + 300)
-
- # "solid" relief type was added to 8.0
- if Tkinter.TkVersion >= 8.0:
- reliefs = 'flat, groove, raised, ridge, solid, or sunken'
- else:
- reliefs = 'flat, groove, raised, ridge, or sunken'
-
- _initialised = 1
-
-def haveBlt():
- return Pmw.Blt.haveblt(root)
-
-def bell():
- root.bell()
-
-def setdelay(newdelay):
- global _delay
- _delay = newdelay
-
-def setverbose(newverbose):
- global _verbose
- _verbose = newverbose
-
-def printtraceback(newprintTraceback = 1):
- global _printTraceback
- _printTraceback = newprintTraceback
-
-def num_options(widget):
- return len(widget.configure())
-
-def callback():
- return 1
-
-def callback1(dummy):
- # Callback taking 1 argument
- return dummy
-
-def callback2(dummy1, dummy2):
- # Callback taking 2 arguments
- return (dummy1, dummy2)
-
-def callbackN(*args):
- # Callback taking zero or more arguments
- return args
-
-def actioncallback():
- w = currentWidget()
- w.action('button press')
-
-def currentWidget():
- return _currentWidget
-
-def delay():
- return _delay
-
-def set_geom(width, height):
- _currentToplevel.geometry(str(width) + 'x' + str(height))
-
-def runTests(allTestData):
- root.after(_delay, _runTest, None, None, allTestData, 0, -1, -1)
- root.mainloop()
-
-_pattern = None
-
-##############################################################################
-# Private functions:
-
-def _print_results(result, expected, description):
- if type(expected) == types.ClassType:
- if hasattr(result, '__class__'):
- ok = (result.__class__ == expected)
- else:
- ok = 0
- else:
- ok = (result == expected)
-
- # Megawidgets return a value of the correct type. Tk widgets
- # always return a string, so convert the string and check again.
- if not ok:
- if type(expected) == types.InstanceType:
- if result == str(expected) and (
- expected is earthris or expected is stringvar or
- expected is floatvar or expected is flagup):
- ok = 1
- elif hasattr(_tkinter, 'Tcl_Obj') and \
- type(result) == _tkinter.Tcl_Obj:
- ok = (str(stringvar) == result.string)
- elif type(expected) == types.IntType:
- if type(result) is types.StringType:
- try:
- ok = (string.atoi(result) == expected)
- except ValueError:
- pass
- elif hasattr(_tkinter, 'Tcl_Obj') and \
- type(result) == _tkinter.Tcl_Obj:
- ok = (string.atoi(str(result)) == expected)
- elif type(expected) == types.FloatType:
- if type(result) is types.StringType:
- try:
- ok = (string.atof(result) == expected)
- except ValueError:
- pass
- elif expected == callback:
- ok = re.search('^[0-9]*callback$', str(result)) is not None
- elif expected == callback1:
- ok = re.search('^[0-9]*callback1$', str(result)) is not None
- elif expected == callback2:
- ok = re.search('^[0-9]*callback2$', str(result)) is not None
- elif expected == actioncallback:
- ok = re.search('^[0-9]*actioncallback$',str(result)) is not None
-
- if not ok or _verbose > 0:
- print '====', description
- if not ok or _verbose > 1:
- print '==== result was:'
- print result, type(result)
- if ok:
- if _verbose > 1:
- print '++++ PASSED'
- else:
- print '---- result should have been:'
- print expected, type(expected)
- if _printTraceback:
- traceback.print_exc()
- print '---- FAILED'
- print
-
-def _destroyToplevel(top, title):
- if _verbose > 0:
- print '==== destruction of Toplevel for', title
- top.destroy()
-
-def _Toplevel(title):
- if _verbose > 0:
- print '==== construction of Toplevel for', title
- top = Tkinter.Toplevel()
- top.geometry('+100+100')
- top.title(title)
- return top
-
-def _constructor(isWidget, top, classCmd, kw):
- if _verbose > 0:
- print '====', classCmd.__name__, 'construction'
- if isWidget:
- if dont_even_try:
- w = apply(classCmd, (top,), kw)
- else:
- try:
- w = apply(classCmd, (top,), kw)
- except:
- print 'Could not construct', classCmd.__name__
- traceback.print_exc()
- print 'Can not continue'
- print 'Bye'
- return None
-
- isMegaWidget = hasattr(classCmd, 'defineoptions')
- # Check the option types:
- options = w.configure()
- option_list = options.keys()
- option_list.sort()
- for option in option_list:
- # Some of the options (like bd, bg and fg) have only two parts
- # and are just abbreviations. Only check 'real' options.
- if len(options[option]) == 5:
- initoption = isMegaWidget and w.isinitoption(option)
- if dont_even_try:
- value = w.cget(option)
- if option not in ('class', 'container') and not initoption:
- apply(w.configure, (), {option : value})
- newvalue = w.cget(option)
- if newvalue != value:
- print '====', classCmd.__name__, 'widget', \
- '\'' + option + '\'', 'option'
- print '---- setting option returns different value'
- print '==== new value was:'
- print newvalue, type(newvalue)
- print '---- set value was:'
- print value, type(value)
- print '---- FAILED'
- print
- else:
- try:
- value = w.cget(option)
- if option not in ('class', 'container') and not initoption:
- try:
- apply(w.configure, (), {option : value})
- newvalue = w.cget(option)
- if hasattr(_tkinter, 'Tcl_Obj') and \
- (
- (type(newvalue) == _tkinter.Tcl_Obj
- and str(newvalue) != str(value))
- or
- (type(newvalue) != _tkinter.Tcl_Obj
- and newvalue != value)
- ) or \
- (
- not hasattr(_tkinter, 'Tcl_Obj') and
- newvalue != value
- ):
- print '====', classCmd.__name__, 'widget', \
- '\'' + option + '\'', 'option'
- print '---- setting option returns different value'
- print '==== new value was:'
- print `newvalue`, type(newvalue)
- print '---- set value was:'
- print `value`, type(value)
- print '---- FAILED'
- print
- except:
- print '====', classCmd.__name__, 'widget', \
- '\'' + option + '\'', 'option'
- print '---- could not set option'
- print '---- FAILED'
- print
- except KeyError:
- print '====', classCmd.__name__, 'widget', \
- '\'' + option + '\'', 'option'
- print '---- unknown option'
- print '---- FAILED'
- print
-
- if hasattr(classCmd, 'geometry'):
- w.geometry('+100+100')
- w.title(classCmd.__name__)
- else:
- w = apply(classCmd, (), kw)
- return w
-
-def _destructor(widget, isWidget):
- if _verbose > 0:
- print '====', widget.__class__.__name__, 'destruction'
- if isWidget:
- if dont_even_try:
- widget.destroy()
- else:
- try:
- widget.destroy()
- ref = sys.getrefcount(widget)
- if ref != refcountafterdestroy:
- print '====', widget.__class__.__name__, 'destructor'
- print '---- refcount', ref, 'not zero after destruction'
- print '---- FAILED'
- print
- except:
- print 'Could not destroy', widget.__class__.__name__
- traceback.print_exc()
- print 'Can not continue'
- print 'Bye'
- return None
- return 1
-
-# Structure of allTestData:
-# (
-# (
-# 'ButtonBox',
-# (
-# (
-# Pmw.ButtonBox,
-# {},
-# (
-# (c.pack, ()),
-# (c.pack, ()),
-# (c.pack, ()),
-# ...
-# )
-# ),
-# (
-# Pmw.ButtonBox,
-# {},
-# (
-# (c.pack, ()),
-# (c.pack, ()),
-# (c.pack, ()),
-# ...
-# )
-# ),
-# ...
-# )
-# ),
-# (
-# 'ButtonBox',
-# (
-# (
-# Pmw.ButtonBox,
-# {},
-# (
-# (c.pack, ()),
-# (c.pack, ()),
-# (c.pack, ()),
-# ...
-# )
-# ),
-# (
-# Pmw.ButtonBox,
-# {},
-# (
-# (c.pack, ()),
-# (c.pack, ()),
-# (c.pack, ()),
-# ...
-# )
-# ),
-# ...
-# )
-# ),
-# ...
-# )
-
-def _runTest(top, w, allTestData, index0, index1, index2):
- if index0 >= len(allTestData):
- root.quit()
- return
- classCmd, fileTests = allTestData[index0]
- if classCmd == Tkinter.Menu:
- isToplevel = 1
- else:
- isToplevel = hasattr(classCmd, 'userdeletefunc')
- isWidget = hasattr(classCmd, 'cget')
- title = classCmd.__name__
-
- if index1 == -1:
- if isToplevel:
- top = None
- else:
- top = _Toplevel(title)
- global _currentToplevel
- _currentToplevel = top
- index1 = 0
- elif index1 >= len(fileTests):
- if not isToplevel:
- _destroyToplevel(top, title)
- index1 = -1
- index0 = index0 + 1
- else:
- methodTests, kw = fileTests[index1]
- if index2 == -1:
- w = _constructor(isWidget, top, classCmd, kw)
- if w is None:
- root.quit()
- return
- global _currentWidget
- _currentWidget = w
- index2 = 0
- elif index2 >= len(methodTests):
- if _destructor(w, isWidget) is None:
- root.quit()
- return
- index2 = -1
- index1 = index1 + 1
- else:
- methodTestData = methodTests[index2]
- if type(methodTestData[0]) == types.StringType:
- _configureTest(w, methodTestData)
- else:
- _methodTest(w, methodTestData)
- index2 = index2 + 1
- root.update()
- root.after(_delay, _runTest, top, w, allTestData, index0, index1, index2)
-
-def _configureTest(w, testData):
- option = testData[0]
- value = testData[1]
- if dont_even_try:
- apply(w.configure, (), {option: value})
- result = w.cget(option)
- else:
- try:
- apply(w.configure, (), {option: value})
- result = w.cget(option)
- except:
- result = _getErrorValue()
- if len(testData) > 2:
- expected = testData[2]
- else:
- expected = value
- _print_results(result, expected, \
- w.__class__.__name__ + ' option ' + str(testData))
-
-def _getErrorValue():
- exc_type, exc_value, exc_traceback = sys.exc_info()
- if type(exc_type) == types.ClassType:
- # Handle python 1.5 class exceptions.
- exc_type = exc_type.__name__
- if type(exc_value) == types.StringType:
- return exc_type + ': ' + exc_value
- else:
- exc_value_str = str(exc_value)
- if exc_value_str[:1] == "'" and exc_value_str[-1:] == "'":
- exc_value_str = exc_value_str[1:-1]
- return exc_type + ': ' + exc_value_str
-
-def _methodTest(w, testData):
- func = testData[0]
- args = testData[1]
- kw = {}
- expected = None
- if len(testData) == 3:
- if type(testData[2]) == types.DictionaryType:
- kw = testData[2]
- else:
- expected = testData[2]
- elif len(testData) > 3:
- kw = testData[2]
- expected = testData[3]
- if type(args) != types.TupleType:
- args = (args,)
- if func is num_options:
- args = (w,) + args
- origArgs = args
- if type(func) == types.MethodType and func.im_self is None:
- args = (w,) + args
- if dont_even_try:
- result = apply(func, args, kw)
- else:
- try:
- result = apply(func, args, kw)
- except:
- result = _getErrorValue()
- if hasattr(func, 'im_func'):
- name = w.__class__.__name__ + ' method ' + \
- func.im_func.func_code.co_name
- else:
- name = 'function ' + func.__name__
- name = name + ' ' + str(origArgs)
- if kw:
- name = name + ' ' + str(kw)
- _print_results(result, expected, name)