Issue #21477: Idle htest: merge and modify run and runall; add many tests.

Patch by Saimadhav Heblikar
This commit is contained in:
Terry Jan Reedy 2014-05-24 18:48:18 -04:00
parent 10cbb1e463
commit 1b392ffe67
18 changed files with 412 additions and 179 deletions

View File

@ -133,37 +133,36 @@ class CallTip:
return bool(self.tipwindow)
def _calltip_window(parent):
root = Tk()
root.title("Test calltips")
width, height, x, y = list(map(int, re.split('[x+]', parent.geometry())))
root.geometry("+%d+%d"%(x, y + 150))
###############################
#
# Test Code
#
class container: # Conceptually an editor_window
def __init__(self):
root = Tk()
text = self.text = Text(root)
text.pack(side=LEFT, fill=BOTH, expand=1)
text.insert("insert", "string.split")
root.update()
self.calltip = CallTip(text)
class MyEditWin: # comparenceptually an editor_window
def __init__(self):
text = self.text = Text(root)
text.pack(side=LEFT, fill=BOTH, expand=1)
text.insert("insert", "string.split")
root.update()
self.calltip = CallTip(text)
text.event_add("<<calltip-show>>", "(")
text.event_add("<<calltip-hide>>", ")")
text.bind("<<calltip-show>>", self.calltip_show)
text.bind("<<calltip-hide>>", self.calltip_hide)
text.event_add("<<calltip-show>>", "(")
text.event_add("<<calltip-hide>>", ")")
text.bind("<<calltip-show>>", self.calltip_show)
text.bind("<<calltip-hide>>", self.calltip_hide)
text.focus_set()
root.mainloop()
text.focus_set()
root.mainloop()
def calltip_show(self, event):
self.calltip.showtip("Hello world")
def calltip_show(self, event):
self.calltip.showtip("Hello world", "insert", "end")
def calltip_hide(self, event):
self.calltip.hidetip()
def calltip_hide(self, event):
self.calltip.hidetip()
def main():
# Test code
c=container()
editwin = MyEditWin()
if __name__=='__main__':
main()
from idlelib.idle_test.htest import run
run(_calltip_window)

View File

@ -13,6 +13,7 @@ XXX TO DO:
import os
import sys
import pyclbr
import re
from idlelib import PyShell
from idlelib.WindowList import ListedToplevel
@ -21,11 +22,15 @@ from idlelib.configHandler import idleConf
class ClassBrowser:
def __init__(self, flist, name, path):
def __init__(self, flist, name, path, _htest=False):
# XXX This API should change, if the file doesn't end in ".py"
# XXX the code here is bogus!
"""
_htest - bool, change box when location running htest.
"""
self.name = name
self.file = os.path.join(path[0], self.name + ".py")
self._htest = _htest
self.init(flist)
def close(self, event=None):
@ -40,6 +45,9 @@ class ClassBrowser:
self.top = top = ListedToplevel(flist.root)
top.protocol("WM_DELETE_WINDOW", self.close)
top.bind("<Escape>", self.close)
if self._htest: # place dialog below parent if running htest
top.geometry("+%d+%d" %
(flist.root.winfo_rootx(), flist.root.winfo_rooty() + 200))
self.settitle()
top.focus_set()
# create scrolled canvas
@ -202,7 +210,7 @@ class MethodBrowserTreeItem(TreeItem):
edit = PyShell.flist.open(self.file)
edit.gotoline(self.cl.methods[self.name])
def main():
def _class_browser(parent): #Wrapper for htest
try:
file = __file__
except NameError:
@ -213,9 +221,9 @@ def main():
file = sys.argv[0]
dir, file = os.path.split(file)
name = os.path.splitext(file)[0]
ClassBrowser(PyShell.flist, name, [dir])
if sys.stdin is sys.__stdin__:
mainloop()
flist = PyShell.PyShellFileList(parent)
ClassBrowser(flist, name, [dir], _htest=True)
if __name__ == "__main__":
main()
from idlelib.idle_test.htest import run
run(_class_browser)

View File

@ -253,17 +253,23 @@ class ColorDelegator(Delegator):
for tag in self.tagdefs:
self.tag_remove(tag, "1.0", "end")
def main():
def _color_delegator(parent):
from idlelib.Percolator import Percolator
root = Tk()
root.wm_protocol("WM_DELETE_WINDOW", root.quit)
text = Text(background="white")
root.title("Test ColorDelegator")
width, height, x, y = list(map(int, re.split('[x+]', parent.geometry())))
root.geometry("+%d+%d"%(x, y + 150))
with open(__file__, 'r') as f:
source = f.read()
text = Text(root, background="white")
# insert only a sample portion
text.insert("insert", source[:690])
text.pack(expand=1, fill="both")
text.focus_set()
p = Percolator(text)
d = ColorDelegator()
p.insertfilter(d)
root.mainloop()
if __name__ == "__main__":
main()
from idlelib.idle_test.htest import run
run(_color_delegator)

View File

@ -525,16 +525,17 @@ class IOBinding:
if self.editwin.flist:
self.editwin.update_recent_files_list(filename)
def test():
def _io_binding(parent):
root = Tk()
root.title("Test IOBinding")
width, height, x, y = list(map(int, re.split('[x+]', parent.geometry())))
root.geometry("+%d+%d"%(x, y + 150))
class MyEditWin:
def __init__(self, text):
self.text = text
self.flist = None
self.text.bind("<Control-o>", self.open)
self.text.bind("<Control-s>", self.save)
self.text.bind("<Alt-s>", self.save_as)
self.text.bind("<Alt-z>", self.save_a_copy)
def get_saved(self): return 0
def set_saved(self, flag): pass
def reset_undo(self): pass
@ -542,16 +543,13 @@ def test():
self.text.event_generate("<<open-window-from-file>>")
def save(self, event):
self.text.event_generate("<<save-window>>")
def save_as(self, event):
self.text.event_generate("<<save-window-as-file>>")
def save_a_copy(self, event):
self.text.event_generate("<<save-copy-of-window-as-file>>")
text = Text(root)
text.pack()
text.focus_set()
editwin = MyEditWin(text)
io = IOBinding(editwin)
root.mainloop()
if __name__ == "__main__":
test()
from idlelib.idle_test.htest import run
run(_io_binding)

View File

@ -420,9 +420,12 @@ def MultiCallCreator(widget):
_multicall_dict[widget] = MultiCall
return MultiCall
if __name__ == "__main__":
# Test
def _multi_call(parent):
root = tkinter.Tk()
root.title("Test MultiCall")
width, height, x, y = list(map(int, re.split('[x+]', parent.geometry())))
root.geometry("+%d+%d"%(x, y + 150))
text = MultiCallCreator(tkinter.Text)(root)
text.pack()
def bindseq(seq, n=[0]):
@ -438,8 +441,13 @@ if __name__ == "__main__":
bindseq("<Alt-Control-Key-a>")
bindseq("<Key-b>")
bindseq("<Control-Button-1>")
bindseq("<Button-2>")
bindseq("<Alt-Button-1>")
bindseq("<FocusOut>")
bindseq("<Enter>")
bindseq("<Leave>")
root.mainloop()
if __name__ == "__main__":
from idlelib.idle_test.htest import run
run(_multi_call)

View File

@ -17,16 +17,29 @@ class MultiStatusBar(Frame):
label = self.labels[name]
label.config(text=text)
def _test():
b = Frame()
c = Text(b)
c.pack(side=TOP)
a = MultiStatusBar(b)
a.set_label("one", "hello")
a.set_label("two", "world")
a.pack(side=BOTTOM, fill=X)
b.pack()
b.mainloop()
def _multistatus_bar(parent):
root = Tk()
width, height, x, y = list(map(int, re.split('[x+]', parent.geometry())))
root.geometry("+%d+%d" %(x, y + 150))
root.title("Test multistatus bar")
frame = Frame(root)
text = Text(frame)
text.pack()
msb = MultiStatusBar(frame)
msb.set_label("one", "hello")
msb.set_label("two", "world")
msb.pack(side=BOTTOM, fill=X)
def change():
msb.set_label("one", "foo")
msb.set_label("two", "bar")
button = Button(root, text="Update status", command=change)
button.pack(side=BOTTOM)
frame.pack()
frame.mainloop()
root.mainloop()
if __name__ == '__main__':
_test()
from idlelib.idle_test.htest import run
run(_multistatus_bar)

View File

@ -9,6 +9,8 @@
# XXX TO DO:
# - for classes/modules, add "open source" to object browser
import re
from idlelib.TreeWidget import TreeItem, TreeNode, ScrolledCanvas
from reprlib import Repr
@ -119,12 +121,13 @@ def make_objecttreeitem(labeltext, object, setfunction=None):
c = ObjectTreeItem
return c(labeltext, object, setfunction)
# Test script
def _test():
def _object_browser(parent):
import sys
from tkinter import Tk
root = Tk()
width, height, x, y = list(map(int, re.split('[x+]', parent.geometry())))
root.geometry("+%d+%d"%(x, y + 100))
root.configure(bd=0, bg="yellow")
root.focus_set()
sc = ScrolledCanvas(root, bg="white", highlightthickness=0, takefocus=1)
@ -135,4 +138,5 @@ def _test():
root.mainloop()
if __name__ == '__main__':
_test()
from idlelib.idle_test.htest import run
run(_object_browser)

View File

@ -1,13 +1,20 @@
import os
import sys
import re
import importlib.machinery
from idlelib.TreeWidget import TreeItem
from idlelib.ClassBrowser import ClassBrowser, ModuleBrowserTreeItem
from idlelib.PyShell import PyShellFileList
class PathBrowser(ClassBrowser):
def __init__(self, flist):
def __init__(self, flist, _htest=False):
"""
_htest - bool, change box location when running htest
"""
self._htest = _htest
self.init(flist)
def settitle(self):
@ -87,12 +94,13 @@ class DirBrowserTreeItem(TreeItem):
sorted.sort()
return sorted
def main():
from idlelib import PyShell
PathBrowser(PyShell.flist)
if sys.stdin is sys.__stdin__:
mainloop()
def _path_browser(parent):
flist = PyShellFileList(parent)
PathBrowser(flist, _htest=True)
if __name__ == "__main__":
from unittest import main
main('idlelib.idle_test.test_pathbrowser', verbosity=2, exit=False)
from idlelib.idle_test.htest import run
run(_path_browser)

View File

@ -119,21 +119,22 @@ class ScrolledList:
pass
def test():
def _scrolled_list(parent):
root = Tk()
root.protocol("WM_DELETE_WINDOW", root.destroy)
root.title("Test ScrolledList")
width, height, x, y = list(map(int, re.split('[x+]', parent.geometry())))
root.geometry("+%d+%d"%(x, y + 150))
class MyScrolledList(ScrolledList):
def fill_menu(self): self.menu.add_command(label="pass")
def fill_menu(self): self.menu.add_command(label="right click")
def on_select(self, index): print("select", self.get(index))
def on_double(self, index): print("double", self.get(index))
s = MyScrolledList(root)
for i in range(30):
s.append("item %02d" % i)
return root
def main():
root = test()
scrolled_list = MyScrolledList(root)
for i in range(30):
scrolled_list.append("Item %02d" % i)
root.mainloop()
if __name__ == '__main__':
main()
from idlelib.idle_test.htest import run
run(_scrolled_list)

View File

@ -76,14 +76,21 @@ class ListboxToolTip(ToolTipBase):
for item in self.items:
listbox.insert(END, item)
def main():
# Test code
def _tooltip(parent):
root = Tk()
b = Button(root, text="Hello", command=root.destroy)
b.pack()
root.update()
tip = ListboxToolTip(b, ["Hello", "world"])
root.title("Test tooltip")
width, height, x, y = list(map(int, re.split('[x+]', parent.geometry())))
root.geometry("+%d+%d"%(x, y + 150))
label = Label(root, text="Place your mouse over buttons")
label.pack()
button1 = Button(root, text="Button 1")
button2 = Button(root, text="Button 2")
button1.pack()
button2.pack()
ToolTip(button1, "This is calltip text for button1.")
ListboxToolTip(button2, ["This is","calltip text","for button2"])
root.mainloop()
if __name__ == '__main__':
main()
from idlelib.idle_test.htest import run
run(_tooltip)

View File

@ -448,29 +448,27 @@ class ScrolledCanvas:
return "break"
# Testing functions
def test():
from idlelib import PyShell
root = Toplevel(PyShell.root)
root.configure(bd=0, bg="yellow")
root.focus_set()
def _tree_widget(parent):
root = Tk()
root.title("Test TreeWidget")
width, height, x, y = list(map(int, re.split('[x+]', parent.geometry())))
root.geometry("+%d+%d"%(x, y + 150))
# test with scrollable canvas
sc = ScrolledCanvas(root, bg="white", highlightthickness=0, takefocus=1)
sc.frame.pack(expand=1, fill="both")
item = FileTreeItem("C:/windows/desktop")
sc.frame.pack(expand=1, fill="both", side=LEFT)
item = FileTreeItem(os.getcwd())
node = TreeNode(sc.canvas, None, item)
node.expand()
def test2():
# test w/o scrolling canvas
root = Tk()
root.configure(bd=0)
# test without scrollable canvas
canvas = Canvas(root, bg="white", highlightthickness=0)
canvas.pack(expand=1, fill="both")
item = FileTreeItem(os.curdir)
canvas.pack(expand=0, fill="both", side=RIGHT)
item = FileTreeItem(os.getcwd())
node = TreeNode(canvas, None, item)
node.update()
canvas.focus_set()
root.mainloop()
if __name__ == '__main__':
test()
from idlelib.idle_test.htest import run
run(_tree_widget)

View File

@ -104,10 +104,12 @@ class OriginalCommand:
return self.tk_call(self.orig_and_operation + args)
def main():
def _widget_redirector(parent):
root = Tk()
root.wm_protocol("WM_DELETE_WINDOW", root.quit)
text = Text()
root.title("Test WidgetRedirector")
width, height, x, y = list(map(int, re.split('[x+]', parent.geometry())))
root.geometry("+%d+%d"%(x, y + 150))
text = Text(root)
text.pack()
text.focus_set()
redir = WidgetRedirector(text)
@ -117,10 +119,7 @@ def main():
previous_tcl_fcn(*args)
previous_tcl_fcn = redir.register("insert", my_insert)
root.mainloop()
redir.unregister("insert") # runs after first 'close window'
redir.close()
root.mainloop()
root.destroy()
if __name__ == "__main__":
main()
from idlelib.idle_test.htest import run
run(_widget_redirector)

View File

@ -12,11 +12,16 @@ class AboutDialog(Toplevel):
"""Modal about dialog for idle
"""
def __init__(self, parent, title):
def __init__(self, parent, title, _htest=False):
"""
_htest - bool, change box location when running htest
"""
Toplevel.__init__(self, parent)
self.configure(borderwidth=5)
self.geometry("+%d+%d" % (parent.winfo_rootx()+30,
parent.winfo_rooty()+30))
# place dialog below parent if running htest
self.geometry("+%d+%d" % (
parent.winfo_rootx()+30,
parent.winfo_rooty()+(30 if not _htest else 100)))
self.bg = "#707070"
self.fg = "#ffffff"
self.CreateWidgets()

View File

@ -8,13 +8,14 @@ import tkinter.messagebox as tkMessageBox
import tkinter.filedialog as tkFileDialog
class GetHelpSourceDialog(Toplevel):
def __init__(self, parent, title, menuItem='', filePath=''):
def __init__(self, parent, title, menuItem='', filePath='', _htest=False):
"""Get menu entry and url/ local file location for Additional Help
User selects a name for the Help resource and provides a web url
or a local file as its source. The user can enter a url or browse
for the file.
_htest - bool, change box location when running htest
"""
Toplevel.__init__(self, parent)
self.configure(borderwidth=5)
@ -31,12 +32,14 @@ class GetHelpSourceDialog(Toplevel):
self.withdraw() #hide while setting geometry
#needs to be done here so that the winfo_reqwidth is valid
self.update_idletasks()
#centre dialog over parent:
self.geometry("+%d+%d" %
((parent.winfo_rootx() + ((parent.winfo_width()/2)
-(self.winfo_reqwidth()/2)),
parent.winfo_rooty() + ((parent.winfo_height()/2)
-(self.winfo_reqheight()/2)))))
#centre dialog over parent. below parent if running htest.
self.geometry(
"+%d+%d" % (
parent.winfo_rootx() +
(parent.winfo_width()/2 - self.winfo_reqwidth()/2),
parent.winfo_rooty() +
((parent.winfo_height()/2 - self.winfo_reqheight()/2)
if not _htest else 150)))
self.deiconify() #geometry set, unhide
self.bind('<Return>', self.Ok)
self.wait_window()
@ -159,11 +162,5 @@ class GetHelpSourceDialog(Toplevel):
self.destroy()
if __name__ == '__main__':
#test the dialog
root = Tk()
def run():
keySeq = ''
dlg = GetHelpSourceDialog(root, 'Get Help Source')
print(dlg.result)
Button(root,text='Dialog', command=run).pack()
root.mainloop()
from idlelib.idle_test.htest import run
run(GetHelpSourceDialog)

View File

@ -2,9 +2,10 @@
OptionMenu widget modified to allow dynamic menu reconfiguration
and setting of highlightthickness
"""
from tkinter import OptionMenu
from tkinter import _setit
from tkinter import OptionMenu, _setit, Tk, StringVar, Button
import copy
import re
class DynOptionMenu(OptionMenu):
"""
@ -33,3 +34,24 @@ class DynOptionMenu(OptionMenu):
command=_setit(self.variable,item,self.command))
if value:
self.variable.set(value)
def _dyn_option_menu(parent):
root = Tk()
root.title("Tets dynamic option menu")
var = StringVar(root)
width, height, x, y = list(map(int, re.split('[x+]', parent.geometry())))
root.geometry("+%d+%d"%(x, y + 150))
var.set("Old option set") #Set the default value
dyn = DynOptionMenu(root,var, "old1","old2","old3","old4")
dyn.pack()
def update():
dyn.SetMenu(["new1","new2","new3","new4"],value="new option set")
button = Button(root, text="Change option set", command=update)
button.pack()
root.mainloop()
if __name__ == '__main__':
from idlelib.idle_test.htest import run
run(_dyn_option_menu)

View File

@ -35,17 +35,51 @@ import tkinter as tk
AboutDialog_spec = {
'file': 'aboutDialog',
'kwds': {'title': 'About test'},
'msg': "Try each button"
}
'kwds': {'title': 'aboutDialog test',
'_htest': True,
},
'msg': "Test every button. Ensure Python, TK and IDLE versions "
"are correctly displayed.\n [Close] to exit.",
}
_editor_window_spec = {
'file': 'EditorWindow',
_calltip_window_spec = {
'file': 'CallTipWindow',
'kwds': {},
'msg': "Test editor functions of interest"
'msg': "Typing '(' should display a calltip.\n"
"Typing ') should hide the calltip.\n"
}
_class_browser_spec = {
'file': 'ClassBrowser',
'kwds': {},
'msg': "Inspect names of module, class(with superclass if "
"applicable), methods and functions.\nToggle nested items."
"\nN.S: Double click on items does not work",
}
_color_delegator_spec = {
'file': 'ColorDelegator',
'kwds': {},
'msg': "The text is sample Python code.\n"
"Ensure components like comments, keywords, builtins,\n"
"string, definitions, and break are correctly colored.\n"
"The default color scheme is in idlelib/config-highlight.def"
}
_dyn_option_menu_spec = {
'file': 'dynOptionMenuWidget',
'kwds': {},
'msg': "Select one of the many options in the 'old option set'.\n"
"Click the button to change the option set.\n"
"Select one of the many options in the 'new option set'."
}
#_editor_window_spec = {
# 'file': 'EditorWindow',
# 'kwds': {},
# 'msg': "Test editor functions of interest"
# }
GetCfgSectionNameDialog_spec = {
'file': 'configSectionNameDialog',
'kwds': {'title':'Get Name',
@ -54,7 +88,19 @@ GetCfgSectionNameDialog_spec = {
'_htest': True},
'msg': "After the text entered with [Ok] is stripped, <nothing>, "
"'abc', or more that 30 chars are errors.\n"
"Close 'Get Name' with a valid entry (printed to Shell), [Cancel], or [X]",
"Close 'Get Name' with a valid entry (printed to Shell), "
"[Cancel], or [X]",
}
GetHelpSourceDialog_spec = {
'file': 'configHelpSourceEdit',
'kwds': {'title': 'Get helpsource',
'_htest': True},
'msg': "Enter menu item name and help file path\n "
"<nothing> and more than 30 chars are invalid menu item names.\n"
"<nothing>, file does not exist are invalid path items.\n"
"Test for incomplete web address for help file path.\n"
"A valid entry will be printed to shell with [0k].\n"
"[Cancel] will print None to shell",
}
_help_dialog_spec = {
@ -63,30 +109,152 @@ _help_dialog_spec = {
'msg': "If the help text displays, this works"
}
def run(test):
"Display a widget with callable *test* using a _spec dict"
_io_binding_spec = {
'file': 'IOBinding',
'kwds': {},
'msg': "Test the following bindings\n"
"<Control-o> to display open window from file dialog.\n"
"<Control-s> to save the file\n"
}
_multi_call_spec = {
'file': 'MultiCall',
'kwds': {},
'msg': "The following actions should trigger a print to console.\n"
"Entering and leaving the text area, key entry, <Control-Key>,\n"
"<Alt-Key-a>, <Control-Key-a>, <Alt-Control-Key-a>, \n"
"<Control-Button-1>, <Alt-Button-1> and focussing out of the window\n"
"are sequences to be tested."
}
_multistatus_bar_spec = {
'file': 'MultiStatusBar',
'kwds': {},
'msg': "Ensure presence of multi-status bar below text area.\n"
"Click 'Update Status' to change the multi-status text"
}
_object_browser_spec = {
'file': 'ObjectBrowser',
'kwds': {},
'msg': "Double click on items upto the lowest level.\n"
"Attributes of the objects and related information "
"will be displayed side-by-side at each level."
}
_path_browser_spec = {
'file': 'PathBrowser',
'kwds': {},
'msg': "Test for correct display of all paths in sys.path."
"\nToggle nested items upto the lowest level."
"\nN.S: Double click on items does not work."
}
_scrolled_list_spec = {
'file': 'ScrolledList',
'kwds': {},
'msg': "You should see a scrollable list of items\n"
"Selecting an item will print it to console.\n"
"Double clicking an item will print it to console\n"
"Right click on an item will display a popup."
}
_tabbed_pages_spec = {
'file': 'tabbedpages',
'kwds': {},
'msg': "Toggle between the two tabs 'foo' and 'bar'\n"
"Add a tab by entering a suitable name for it.\n"
"Remove an existing tab by entering its name.\n"
"Remove all existing tabs.\n"
"<nothing> is an invalid add page and remove page name.\n"
}
TextViewer_spec = {
'file': 'textView',
'kwds': {'title': 'Test textView',
'text':'The quick brown fox jumps over the lazy dog.\n'*35,
'_htest': True},
'msg': "Test for read-only property of text.\n"
"Text is selectable. Window is scrollable.",
}
_tooltip_spec = {
'file': 'ToolTip',
'kwds': {},
'msg': "Place mouse cursor over both the buttons\n"
"A tooltip should appear with some text."
}
_tree_widget_spec = {
'file': 'TreeWidget',
'kwds': {},
'msg': "You should see two canvas' side-by-side.\n"
"The left canvas is scrollable.\n"
"The right canvas is not scrollable.\n"
"Click on folders upto to the lowest level."
}
_widget_redirector_spec = {
'file': 'WidgetRedirector',
'kwds': {},
'msg': "Every text insert should be printed to console."
}
def run(test=None):
root = tk.Tk()
test_spec = globals()[test.__name__ + '_spec']
test_kwds = test_spec['kwds']
test_kwds['parent'] = root
test_list = [] # List of tuples of the form (spec, kwds, callable widget)
if test:
test_spec = globals()[test.__name__ + '_spec']
test_spec['name'] = test.__name__
test_kwds = test_spec['kwds']
test_kwds['parent'] = root
test_list.append((test_spec, test_kwds, test))
else:
for k, d in globals().items():
if k.endswith('_spec'):
test_name = k[:-5]
test_spec = d
test_spec['name'] = test_name
test_kwds = test_spec['kwds']
test_kwds['parent'] = root
mod = import_module('idlelib.' + test_spec['file'])
test = getattr(mod, test_name)
test_list.append((test_spec, test_kwds, test))
help_string = tk.StringVar('')
test_name = tk.StringVar('')
callable_object = None
test_kwds = None
def next():
nonlocal help_string, test_name, callable_object, test_kwds
if len(test_list) == 1:
next_button.pack_forget()
test_spec, test_kwds, test = test_list.pop()
help_string.set(test_spec['msg'])
test_name.set('test ' + test_spec['name'])
callable_object = test
def run_test():
widget = test(**test_kwds)
widget = callable_object(**test_kwds)
try:
print(widget.result)
except AttributeError:
pass
tk.Label(root, text=test_spec['msg'], justify='left').pack()
tk.Button(root, text='Test ' + test.__name__, command=run_test).pack()
label = tk.Label(root, textvariable=help_string, justify='left')
label.pack()
button = tk.Button(root, textvariable=test_name, command=run_test)
button.pack()
next_button = tk.Button(root, text="Next", command=next)
next_button.pack()
next()
root.mainloop()
def runall():
"Run all tests. Quick and dirty version."
for k, d in globals().items():
if k.endswith('_spec'):
mod = import_module('idlelib.' + d['file'])
test = getattr(mod, k[:-5])
run(test)
if __name__ == '__main__':
runall()
run()

View File

@ -467,9 +467,12 @@ class TabbedPageSet(Frame):
self._tab_set.set_selected_tab(page_name)
if __name__ == '__main__':
def _tabbed_pages(parent):
# test dialog
root=Tk()
width, height, x, y = list(map(int, re.split('[x+]', parent.geometry())))
root.geometry("+%d+%d"%(x, y + 175))
root.title("Test tabbed pages")
tabPage=TabbedPageSet(root, page_names=['Foobar','Baz'], n_rows=0,
expand_tabs=False,
)
@ -488,3 +491,8 @@ if __name__ == '__main__':
labelPgName.pack(padx=5)
entryPgName.pack(padx=5)
root.mainloop()
if __name__ == '__main__':
from idlelib.idle_test.htest import run
run(_tabbed_pages)

View File

@ -9,15 +9,17 @@ class TextViewer(Toplevel):
"""A simple text viewer dialog for IDLE
"""
def __init__(self, parent, title, text, modal=True):
def __init__(self, parent, title, text, modal=True, _htest=False):
"""Show the given text in a scrollable window with a 'close' button
_htest - bool, change box location when running htest
"""
Toplevel.__init__(self, parent)
self.configure(borderwidth=5)
# place dialog below parent if running htest
self.geometry("=%dx%d+%d+%d" % (625, 500,
parent.winfo_rootx() + 10,
parent.winfo_rooty() + 10))
parent.winfo_rootx() + 10,
parent.winfo_rooty() + (10 if not _htest else 100)))
#elguavas - config placeholders til config stuff completed
self.bg = '#ffffff'
self.fg = '#000000'
@ -74,24 +76,6 @@ def view_file(parent, title, filename, encoding=None, modal=True):
else:
return view_text(parent, title, contents, modal)
if __name__ == '__main__':
#test the dialog
root=Tk()
root.title('textView test')
filename = './textView.py'
with open(filename, 'r') as f:
text = f.read()
btn1 = Button(root, text='view_text',
command=lambda:view_text(root, 'view_text', text))
btn1.pack(side=LEFT)
btn2 = Button(root, text='view_file',
command=lambda:view_file(root, 'view_file', filename))
btn2.pack(side=LEFT)
btn3 = Button(root, text='nonmodal view_text',
command=lambda:view_text(root, 'nonmodal view_text', text,
modal=False))
btn3.pack(side=LEFT)
close = Button(root, text='Close', command=root.destroy)
close.pack(side=RIGHT)
root.mainloop()
from idlelib.idle_test.htest import run
run(TextViewer)