summaryrefslogtreecommitdiffstats
path: root/Lib/idlelib/idle_test/mock_tk.py
diff options
context:
space:
mode:
authorTerry Jan Reedy <tjreedy@udel.edu>2013-06-05 18:22:26 (GMT)
committerTerry Jan Reedy <tjreedy@udel.edu>2013-06-05 18:22:26 (GMT)
commit247bd5ea3042caf14ef60b334a2185658bfd1d09 (patch)
treee4dcf2f889f39c72ccb6362bf65c97f259642721 /Lib/idlelib/idle_test/mock_tk.py
parenta534fc4b3bd4b731be9304be626bc161f53d7bfb (diff)
downloadcpython-247bd5ea3042caf14ef60b334a2185658bfd1d09.zip
cpython-247bd5ea3042caf14ef60b334a2185658bfd1d09.tar.gz
cpython-247bd5ea3042caf14ef60b334a2185658bfd1d09.tar.bz2
Issue18130: Test class idlelib.configSectionNameDialog.GetCfgSectionNameDialog.
Fix bug in existing human test and add instructions; fix two bugs in tested code; remove redundancies, add spaces, and change two internal method names. Add mock_tk with mocks for tkinter.Variable subclasses and tkinter.messagebox. Use mocks in test_config_name to unittest methods that are otherwise gui-free.
Diffstat (limited to 'Lib/idlelib/idle_test/mock_tk.py')
-rw-r--r--Lib/idlelib/idle_test/mock_tk.py63
1 files changed, 63 insertions, 0 deletions
diff --git a/Lib/idlelib/idle_test/mock_tk.py b/Lib/idlelib/idle_test/mock_tk.py
new file mode 100644
index 0000000..ef18c33
--- /dev/null
+++ b/Lib/idlelib/idle_test/mock_tk.py
@@ -0,0 +1,63 @@
+"""Classes that replace tkinter gui objects used by an object being tested.
+A gui object is anything with a master or parent paramenter, which is typically
+required in spite of what the doc strings say.
+"""
+
+class Var:
+ "Use for String/Int/BooleanVar: incomplete"
+ def __init__(self, master=None, value=None, name=None):
+ self.master = master
+ self.value = value
+ self.name = name
+ def set(self, value):
+ self.value = value
+ def get(self):
+ return self.value
+
+class Mbox_func:
+ """Generic mock for messagebox functions. All have same call signature.
+ Mbox instantiates once for each function. Tester uses attributes.
+ """
+ def __init__(self):
+ self.result = None # The return for all show funcs
+ def __call__(self, title, message, *args, **kwds):
+ # Save all args for possible examination by tester
+ self.title = title
+ self.message = message
+ self.args = args
+ self.kwds = kwds
+ return self.result # Set by tester for ask functions
+
+class Mbox:
+ """Mock for tkinter.messagebox with an Mbox_func for each function.
+ This module was 'tkMessageBox' in 2.x; hence the 'import as' in 3.x.
+ Example usage in test_module.py for testing functios in module.py:
+ ---
+from idlelib.idle_test.mock_tk import Mbox
+import module
+
+orig_mbox = module.tkMessageBox
+showerror = Mbox.showerror # example, for attribute access in test methods
+
+class Test(unittest.TestCase):
+
+ @classmethod
+ def setUpClass(cls):
+ module.tkMessageBox = Mbox
+
+ @classmethod
+ def tearDownClass(cls):
+ module.tkMessageBox = orig_mbox
+ ---
+ When tkMessageBox functions are the only gui making calls in a method,
+ this replacement makes the method gui-free and unit-testable.
+ For 'ask' functions, set func.result return before calling method.
+ """
+ askokcancel = Mbox_func() # True or False
+ askquestion = Mbox_func() # 'yes' or 'no'
+ askretrycancel = Mbox_func() # True or False
+ askyesno = Mbox_func() # True or False
+ askyesnocancel = Mbox_func() # True, False, or None
+ showerror = Mbox_func() # None
+ showinfo = Mbox_func() # None
+ showwarning = Mbox_func() # None