Coverage for idle_test/test_searchbase.py: 23%

112 statements  

« prev     ^ index     » next       coverage.py v7.2.5, created at 2023-05-11 13:22 -0700

1"Test searchbase, coverage 98%." 

2# The only thing not covered is inconsequential -- 

3# testing skipping of suite when self.needwrapbutton is false. 

4 

5import unittest 

6from test.support import requires 

7from tkinter import Text, Tk, Toplevel 

8from tkinter.ttk import Frame 

9from idlelib import searchengine as se 

10from idlelib import searchbase as sdb 

11from idlelib.idle_test.mock_idle import Func 

12## from idlelib.idle_test.mock_tk import Var 

13 

14# The ## imports above & following could help make some tests gui-free. 

15# However, they currently make radiobutton tests fail. 

16##def setUpModule(): 

17## # Replace tk objects used to initialize se.SearchEngine. 

18## se.BooleanVar = Var 

19## se.StringVar = Var 

20## 

21##def tearDownModule(): 

22## se.BooleanVar = BooleanVar 

23## se.StringVar = StringVar 

24 

25 

26class SearchDialogBaseTest(unittest.TestCase): 

27 

28 @classmethod 

29 def setUpClass(cls): 

30 requires('gui') 

31 cls.root = Tk() 

32 

33 @classmethod 

34 def tearDownClass(cls): 

35 cls.root.update_idletasks() 

36 cls.root.destroy() 

37 del cls.root 

38 

39 def setUp(self): 

40 self.engine = se.SearchEngine(self.root) # None also seems to work 

41 self.dialog = sdb.SearchDialogBase(root=self.root, engine=self.engine) 

42 

43 def tearDown(self): 

44 self.dialog.close() 

45 

46 def test_open_and_close(self): 

47 # open calls create_widgets, which needs default_command 

48 self.dialog.default_command = None 

49 

50 toplevel = Toplevel(self.root) 

51 text = Text(toplevel) 

52 self.dialog.open(text) 

53 self.assertEqual(self.dialog.top.state(), 'normal') 

54 self.dialog.close() 

55 self.assertEqual(self.dialog.top.state(), 'withdrawn') 

56 

57 self.dialog.open(text, searchphrase="hello") 

58 self.assertEqual(self.dialog.ent.get(), 'hello') 

59 toplevel.update_idletasks() 

60 toplevel.destroy() 

61 

62 def test_create_widgets(self): 

63 self.dialog.create_entries = Func() 

64 self.dialog.create_option_buttons = Func() 

65 self.dialog.create_other_buttons = Func() 

66 self.dialog.create_command_buttons = Func() 

67 

68 self.dialog.default_command = None 

69 self.dialog.create_widgets() 

70 

71 self.assertTrue(self.dialog.create_entries.called) 

72 self.assertTrue(self.dialog.create_option_buttons.called) 

73 self.assertTrue(self.dialog.create_other_buttons.called) 

74 self.assertTrue(self.dialog.create_command_buttons.called) 

75 

76 def test_make_entry(self): 

77 equal = self.assertEqual 

78 self.dialog.row = 0 

79 self.dialog.frame = Frame(self.root) 

80 entry, label = self.dialog.make_entry("Test:", 'hello') 

81 equal(label['text'], 'Test:') 

82 

83 self.assertIn(entry.get(), 'hello') 

84 egi = entry.grid_info() 

85 equal(int(egi['row']), 0) 

86 equal(int(egi['column']), 1) 

87 equal(int(egi['rowspan']), 1) 

88 equal(int(egi['columnspan']), 1) 

89 equal(self.dialog.row, 1) 

90 

91 def test_create_entries(self): 

92 self.dialog.frame = Frame(self.root) 

93 self.dialog.row = 0 

94 self.engine.setpat('hello') 

95 self.dialog.create_entries() 

96 self.assertIn(self.dialog.ent.get(), 'hello') 

97 

98 def test_make_frame(self): 

99 self.dialog.row = 0 

100 self.dialog.frame = Frame(self.root) 

101 frame, label = self.dialog.make_frame() 

102 self.assertEqual(label, '') 

103 self.assertEqual(str(type(frame)), "<class 'tkinter.ttk.Frame'>") 

104 # self.assertIsInstance(frame, Frame) fails when test is run by 

105 # test_idle not run from IDLE editor. See issue 33987 PR. 

106 

107 frame, label = self.dialog.make_frame('testlabel') 

108 self.assertEqual(label['text'], 'testlabel') 

109 

110 def btn_test_setup(self, meth): 

111 self.dialog.frame = Frame(self.root) 

112 self.dialog.row = 0 

113 return meth() 

114 

115 def test_create_option_buttons(self): 

116 e = self.engine 

117 for state in (0, 1): 

118 for var in (e.revar, e.casevar, e.wordvar, e.wrapvar): 

119 var.set(state) 

120 frame, options = self.btn_test_setup( 

121 self.dialog.create_option_buttons) 

122 for spec, button in zip (options, frame.pack_slaves()): 

123 var, label = spec 

124 self.assertEqual(button['text'], label) 

125 self.assertEqual(var.get(), state) 

126 

127 def test_create_other_buttons(self): 

128 for state in (False, True): 

129 var = self.engine.backvar 

130 var.set(state) 

131 frame, others = self.btn_test_setup( 

132 self.dialog.create_other_buttons) 

133 buttons = frame.pack_slaves() 

134 for spec, button in zip(others, buttons): 

135 val, label = spec 

136 self.assertEqual(button['text'], label) 

137 if val == state: 

138 # hit other button, then this one 

139 # indexes depend on button order 

140 self.assertEqual(var.get(), state) 

141 

142 def test_make_button(self): 

143 self.dialog.frame = Frame(self.root) 

144 self.dialog.buttonframe = Frame(self.dialog.frame) 

145 btn = self.dialog.make_button('Test', self.dialog.close) 

146 self.assertEqual(btn['text'], 'Test') 

147 

148 def test_create_command_buttons(self): 

149 self.dialog.frame = Frame(self.root) 

150 self.dialog.create_command_buttons() 

151 # Look for close button command in buttonframe 

152 closebuttoncommand = '' 

153 for child in self.dialog.buttonframe.winfo_children(): 

154 if child['text'] == 'Close': 

155 closebuttoncommand = child['command'] 

156 self.assertIn('close', closebuttoncommand) 

157 

158 

159if __name__ == '__main__': 159 ↛ 160line 159 didn't jump to line 160, because the condition on line 159 was never true

160 unittest.main(verbosity=2, exit=2)