- Notifications
You must be signed in to change notification settings - Fork 31.8k
/
Copy pathtest_help_about.py
182 lines (149 loc) · 5.77 KB
/
test_help_about.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
"""Test help_about, coverage 100%.
help_about.build_bits branches on sys.platform='darwin'.
'100% combines coverage on Mac and others.
"""
fromidlelibimporthelp_about
importunittest
fromtest.supportimportrequires, findfile
fromtkinterimportTk, TclError
fromidlelib.idle_test.mock_idleimportFunc
fromidlelib.idle_test.mock_tkimportMbox_func
fromidlelibimporttextview
importos.path
fromplatformimportpython_version
About=help_about.AboutDialog
classLiveDialogTest(unittest.TestCase):
"""Simulate user clicking buttons other than [Close].
Test that invoked textview has text from source.
"""
@classmethod
defsetUpClass(cls):
requires('gui')
cls.root=Tk()
cls.root.withdraw()
cls.dialog=About(cls.root, 'About IDLE', _utest=True)
@classmethod
deftearDownClass(cls):
delcls.dialog
cls.root.update_idletasks()
cls.root.destroy()
delcls.root
deftest_build_bits(self):
self.assertIn(help_about.bits, ('32', '64'))
deftest_dialog_title(self):
"""Test about dialog title"""
self.assertEqual(self.dialog.title(), 'About IDLE')
deftest_dialog_logo(self):
"""Test about dialog logo."""
path, file=os.path.split(self.dialog.icon_image['file'])
fn, ext=os.path.splitext(file)
self.assertEqual(fn, 'idle_48')
deftest_printer_buttons(self):
"""Test buttons whose commands use printer function."""
dialog=self.dialog
button_sources= [(dialog.py_license, license, 'license'),
(dialog.py_copyright, copyright, 'copyright'),
(dialog.py_credits, credits, 'credits')]
forbutton, printer, nameinbutton_sources:
withself.subTest(name=name):
printer._Printer__setup()
button.invoke()
get=dialog._current_textview.viewframe.textframe.text.get
lines=printer._Printer__lines
iflen(lines) <2:
self.fail(name+' full text was not found')
self.assertEqual(lines[0], get('1.0', '1.end'))
self.assertEqual(lines[1], get('2.0', '2.end'))
dialog._current_textview.destroy()
deftest_file_buttons(self):
"""Test buttons that display files."""
dialog=self.dialog
button_sources= [(self.dialog.readme, 'README.txt', 'readme'),
(self.dialog.idle_news, 'News3.txt', 'news'),
(self.dialog.idle_credits, 'CREDITS.txt', 'credits')]
forbutton, filename, nameinbutton_sources:
withself.subTest(name=name):
button.invoke()
fn=findfile(filename, subdir='idlelib')
get=dialog._current_textview.viewframe.textframe.text.get
withopen(fn, encoding='utf-8') asf:
self.assertEqual(f.readline().strip(), get('1.0', '1.end'))
f.readline()
self.assertEqual(f.readline().strip(), get('3.0', '3.end'))
dialog._current_textview.destroy()
classDefaultTitleTest(unittest.TestCase):
"Test default title."
@classmethod
defsetUpClass(cls):
requires('gui')
cls.root=Tk()
cls.root.withdraw()
cls.dialog=About(cls.root, _utest=True)
@classmethod
deftearDownClass(cls):
delcls.dialog
cls.root.update_idletasks()
cls.root.destroy()
delcls.root
deftest_dialog_title(self):
"""Test about dialog title"""
self.assertEqual(self.dialog.title(),
f'About IDLE {python_version()}'
f' ({help_about.bits} bit)')
classCloseTest(unittest.TestCase):
"""Simulate user clicking [Close] button"""
@classmethod
defsetUpClass(cls):
requires('gui')
cls.root=Tk()
cls.root.withdraw()
cls.dialog=About(cls.root, 'About IDLE', _utest=True)
@classmethod
deftearDownClass(cls):
delcls.dialog
cls.root.update_idletasks()
cls.root.destroy()
delcls.root
deftest_close(self):
self.assertEqual(self.dialog.winfo_class(), 'Toplevel')
self.dialog.button_ok.invoke()
withself.assertRaises(TclError):
self.dialog.winfo_class()
classDummy_about_dialog:
# Dummy class for testing file display functions.
idle_credits=About.show_idle_credits
idle_readme=About.show_readme
idle_news=About.show_idle_news
# Called by the above
display_file_text=About.display_file_text
_utest=True
classDisplayFileTest(unittest.TestCase):
"""Test functions that display files.
While somewhat redundant with gui-based test_file_dialog,
these unit tests run on all buildbots, not just a few.
"""
dialog=Dummy_about_dialog()
@classmethod
defsetUpClass(cls):
cls.orig_error=textview.showerror
cls.orig_view=textview.view_text
cls.error=Mbox_func()
cls.view=Func()
textview.showerror=cls.error
textview.view_text=cls.view
@classmethod
deftearDownClass(cls):
textview.showerror=cls.orig_error
textview.view_text=cls.orig_view
deftest_file_display(self):
forhandlerin (self.dialog.idle_credits,
self.dialog.idle_readme,
self.dialog.idle_news):
self.error.message=''
self.view.called=False
withself.subTest(handler=handler):
handler()
self.assertEqual(self.error.message, '')
self.assertEqual(self.view.called, True)
if__name__=='__main__':
unittest.main(verbosity=2)