2018-06-19 20:12:52 -03:00
|
|
|
"Test searchbase, coverage 98%."
|
|
|
|
# The only thing not covered is inconsequential --
|
|
|
|
# testing skipping of suite when self.needwrapbutton is false.
|
2014-06-30 21:00:03 -03:00
|
|
|
|
|
|
|
import unittest
|
|
|
|
from test.support import requires
|
2019-01-02 23:04:06 -04:00
|
|
|
from tkinter import Tk
|
|
|
|
from tkinter.ttk import Frame
|
2016-05-28 14:22:31 -03:00
|
|
|
from idlelib import searchengine as se
|
|
|
|
from idlelib import searchbase as sdb
|
2014-06-30 21:00:03 -03:00
|
|
|
from idlelib.idle_test.mock_idle import Func
|
2015-05-16 00:55:21 -03:00
|
|
|
## from idlelib.idle_test.mock_tk import Var
|
2014-06-30 21:00:03 -03:00
|
|
|
|
2015-05-16 00:55:21 -03:00
|
|
|
# The ## imports above & following could help make some tests gui-free.
|
2014-06-30 21:00:03 -03:00
|
|
|
# However, they currently make radiobutton tests fail.
|
|
|
|
##def setUpModule():
|
|
|
|
## # Replace tk objects used to initialize se.SearchEngine.
|
|
|
|
## se.BooleanVar = Var
|
|
|
|
## se.StringVar = Var
|
|
|
|
##
|
|
|
|
##def tearDownModule():
|
|
|
|
## se.BooleanVar = BooleanVar
|
|
|
|
## se.StringVar = StringVar
|
|
|
|
|
2018-06-19 20:12:52 -03:00
|
|
|
|
2014-06-30 21:00:03 -03:00
|
|
|
class SearchDialogBaseTest(unittest.TestCase):
|
|
|
|
|
|
|
|
@classmethod
|
|
|
|
def setUpClass(cls):
|
|
|
|
requires('gui')
|
|
|
|
cls.root = Tk()
|
|
|
|
|
|
|
|
@classmethod
|
|
|
|
def tearDownClass(cls):
|
2019-05-31 05:26:35 -03:00
|
|
|
cls.root.update_idletasks()
|
2014-06-30 21:00:03 -03:00
|
|
|
cls.root.destroy()
|
|
|
|
del cls.root
|
|
|
|
|
|
|
|
def setUp(self):
|
|
|
|
self.engine = se.SearchEngine(self.root) # None also seems to work
|
|
|
|
self.dialog = sdb.SearchDialogBase(root=self.root, engine=self.engine)
|
|
|
|
|
|
|
|
def tearDown(self):
|
|
|
|
self.dialog.close()
|
|
|
|
|
|
|
|
def test_open_and_close(self):
|
|
|
|
# open calls create_widgets, which needs default_command
|
|
|
|
self.dialog.default_command = None
|
|
|
|
|
|
|
|
# Since text parameter of .open is not used in base class,
|
|
|
|
# pass dummy 'text' instead of tk.Text().
|
|
|
|
self.dialog.open('text')
|
|
|
|
self.assertEqual(self.dialog.top.state(), 'normal')
|
|
|
|
self.dialog.close()
|
|
|
|
self.assertEqual(self.dialog.top.state(), 'withdrawn')
|
|
|
|
|
|
|
|
self.dialog.open('text', searchphrase="hello")
|
|
|
|
self.assertEqual(self.dialog.ent.get(), 'hello')
|
|
|
|
self.dialog.close()
|
|
|
|
|
|
|
|
def test_create_widgets(self):
|
|
|
|
self.dialog.create_entries = Func()
|
|
|
|
self.dialog.create_option_buttons = Func()
|
|
|
|
self.dialog.create_other_buttons = Func()
|
|
|
|
self.dialog.create_command_buttons = Func()
|
|
|
|
|
|
|
|
self.dialog.default_command = None
|
|
|
|
self.dialog.create_widgets()
|
|
|
|
|
|
|
|
self.assertTrue(self.dialog.create_entries.called)
|
|
|
|
self.assertTrue(self.dialog.create_option_buttons.called)
|
|
|
|
self.assertTrue(self.dialog.create_other_buttons.called)
|
|
|
|
self.assertTrue(self.dialog.create_command_buttons.called)
|
|
|
|
|
|
|
|
def test_make_entry(self):
|
|
|
|
equal = self.assertEqual
|
|
|
|
self.dialog.row = 0
|
2016-06-21 19:41:38 -03:00
|
|
|
self.dialog.top = self.root
|
2014-07-13 18:27:26 -03:00
|
|
|
entry, label = self.dialog.make_entry("Test:", 'hello')
|
2014-07-01 00:52:20 -03:00
|
|
|
equal(label['text'], 'Test:')
|
2014-06-30 21:00:03 -03:00
|
|
|
|
|
|
|
self.assertIn(entry.get(), 'hello')
|
|
|
|
egi = entry.grid_info()
|
2014-07-11 01:37:14 -03:00
|
|
|
equal(int(egi['row']), 0)
|
|
|
|
equal(int(egi['column']), 1)
|
|
|
|
equal(int(egi['rowspan']), 1)
|
|
|
|
equal(int(egi['columnspan']), 1)
|
2014-06-30 21:00:03 -03:00
|
|
|
equal(self.dialog.row, 1)
|
|
|
|
|
|
|
|
def test_create_entries(self):
|
2016-06-21 19:41:38 -03:00
|
|
|
self.dialog.top = self.root
|
2014-06-30 21:00:03 -03:00
|
|
|
self.dialog.row = 0
|
|
|
|
self.engine.setpat('hello')
|
|
|
|
self.dialog.create_entries()
|
|
|
|
self.assertIn(self.dialog.ent.get(), 'hello')
|
|
|
|
|
|
|
|
def test_make_frame(self):
|
|
|
|
self.dialog.row = 0
|
2016-06-21 19:41:38 -03:00
|
|
|
self.dialog.top = self.root
|
2014-07-01 00:52:20 -03:00
|
|
|
frame, label = self.dialog.make_frame()
|
2014-06-30 21:00:03 -03:00
|
|
|
self.assertEqual(label, '')
|
2019-01-02 23:04:06 -04:00
|
|
|
self.assertEqual(str(type(frame)), "<class 'tkinter.ttk.Frame'>")
|
|
|
|
# self.assertIsInstance(frame, Frame) fails when test is run by
|
|
|
|
# test_idle not run from IDLE editor. See issue 33987 PR.
|
2014-06-30 21:00:03 -03:00
|
|
|
|
2014-07-01 00:52:20 -03:00
|
|
|
frame, label = self.dialog.make_frame('testlabel')
|
|
|
|
self.assertEqual(label['text'], 'testlabel')
|
2014-06-30 21:00:03 -03:00
|
|
|
|
2014-07-01 00:52:20 -03:00
|
|
|
def btn_test_setup(self, meth):
|
2016-06-21 19:41:38 -03:00
|
|
|
self.dialog.top = self.root
|
2014-07-01 00:52:20 -03:00
|
|
|
self.dialog.row = 0
|
|
|
|
return meth()
|
2014-06-30 21:00:03 -03:00
|
|
|
|
|
|
|
def test_create_option_buttons(self):
|
2014-07-01 00:52:20 -03:00
|
|
|
e = self.engine
|
|
|
|
for state in (0, 1):
|
|
|
|
for var in (e.revar, e.casevar, e.wordvar, e.wrapvar):
|
|
|
|
var.set(state)
|
|
|
|
frame, options = self.btn_test_setup(
|
|
|
|
self.dialog.create_option_buttons)
|
|
|
|
for spec, button in zip (options, frame.pack_slaves()):
|
|
|
|
var, label = spec
|
|
|
|
self.assertEqual(button['text'], label)
|
|
|
|
self.assertEqual(var.get(), state)
|
2014-06-30 21:00:03 -03:00
|
|
|
|
|
|
|
def test_create_other_buttons(self):
|
2014-07-01 00:52:20 -03:00
|
|
|
for state in (False, True):
|
|
|
|
var = self.engine.backvar
|
|
|
|
var.set(state)
|
|
|
|
frame, others = self.btn_test_setup(
|
|
|
|
self.dialog.create_other_buttons)
|
|
|
|
buttons = frame.pack_slaves()
|
|
|
|
for spec, button in zip(others, buttons):
|
|
|
|
val, label = spec
|
|
|
|
self.assertEqual(button['text'], label)
|
|
|
|
if val == state:
|
|
|
|
# hit other button, then this one
|
|
|
|
# indexes depend on button order
|
|
|
|
self.assertEqual(var.get(), state)
|
2014-06-30 21:00:03 -03:00
|
|
|
|
|
|
|
def test_make_button(self):
|
2016-06-21 19:41:38 -03:00
|
|
|
self.dialog.top = self.root
|
2014-06-30 21:00:03 -03:00
|
|
|
self.dialog.buttonframe = Frame(self.dialog.top)
|
|
|
|
btn = self.dialog.make_button('Test', self.dialog.close)
|
2014-07-01 00:52:20 -03:00
|
|
|
self.assertEqual(btn['text'], 'Test')
|
2014-06-30 21:00:03 -03:00
|
|
|
|
|
|
|
def test_create_command_buttons(self):
|
2016-06-21 19:41:38 -03:00
|
|
|
self.dialog.top = self.root
|
2014-06-30 21:00:03 -03:00
|
|
|
self.dialog.create_command_buttons()
|
|
|
|
# Look for close button command in buttonframe
|
|
|
|
closebuttoncommand = ''
|
|
|
|
for child in self.dialog.buttonframe.winfo_children():
|
2019-05-31 05:26:35 -03:00
|
|
|
if child['text'] == 'Close':
|
2014-07-01 00:52:20 -03:00
|
|
|
closebuttoncommand = child['command']
|
2014-06-30 21:00:03 -03:00
|
|
|
self.assertIn('close', closebuttoncommand)
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
unittest.main(verbosity=2, exit=2)
|