| 
									
										
										
										
											2018-06-18 04:47:59 -04:00
										 |  |  | """Test help_about, coverage 100%.
 | 
					
						
							|  |  |  | help_about.build_bits branches on sys.platform='darwin'. | 
					
						
							|  |  |  | '100% combines coverage on Mac and others. | 
					
						
							|  |  |  | """
 | 
					
						
							| 
									
										
										
										
											2016-06-22 04:17:28 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-18 04:47:59 -04:00
										 |  |  | from idlelib import help_about | 
					
						
							|  |  |  | import unittest | 
					
						
							| 
									
										
										
										
											2017-05-22 06:19:35 +08:00
										 |  |  | from test.support import requires, findfile | 
					
						
							| 
									
										
										
										
											2017-05-28 01:10:51 -04:00
										 |  |  | from tkinter import Tk, TclError | 
					
						
							|  |  |  | from idlelib.idle_test.mock_idle import Func | 
					
						
							|  |  |  | from idlelib.idle_test.mock_tk import Mbox_func | 
					
						
							|  |  |  | from idlelib import textview | 
					
						
							| 
									
										
										
										
											2017-06-23 12:00:29 -04:00
										 |  |  | import os.path | 
					
						
							| 
									
										
										
										
											2018-06-18 04:47:59 -04:00
										 |  |  | from platform import python_version | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | About = help_about.AboutDialog | 
					
						
							| 
									
										
										
										
											2017-06-26 22:28:58 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-22 04:17:28 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-28 01:10:51 -04:00
										 |  |  | class LiveDialogTest(unittest.TestCase): | 
					
						
							|  |  |  |     """Simulate user clicking buttons other than [Close].
 | 
					
						
							| 
									
										
										
										
											2017-05-22 06:19:35 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-28 01:10:51 -04:00
										 |  |  |     Test that invoked textview has text from source. | 
					
						
							|  |  |  |     """
 | 
					
						
							| 
									
										
										
										
											2017-05-22 06:19:35 +08:00
										 |  |  |     @classmethod | 
					
						
							|  |  |  |     def setUpClass(cls): | 
					
						
							| 
									
										
										
										
											2017-05-28 01:10:51 -04:00
										 |  |  |         requires('gui') | 
					
						
							| 
									
										
										
										
											2017-05-22 06:19:35 +08:00
										 |  |  |         cls.root = Tk() | 
					
						
							|  |  |  |         cls.root.withdraw() | 
					
						
							|  |  |  |         cls.dialog = About(cls.root, 'About IDLE', _utest=True) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @classmethod | 
					
						
							|  |  |  |     def tearDownClass(cls): | 
					
						
							|  |  |  |         del cls.dialog | 
					
						
							|  |  |  |         cls.root.update_idletasks() | 
					
						
							|  |  |  |         cls.root.destroy() | 
					
						
							|  |  |  |         del cls.root | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-26 22:28:58 -04:00
										 |  |  |     def test_build_bits(self): | 
					
						
							|  |  |  |         self.assertIn(help_about.build_bits(), ('32', '64')) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-22 06:19:35 +08:00
										 |  |  |     def test_dialog_title(self): | 
					
						
							| 
									
										
										
										
											2017-05-28 01:10:51 -04:00
										 |  |  |         """Test about dialog title""" | 
					
						
							| 
									
										
										
										
											2017-05-22 06:19:35 +08:00
										 |  |  |         self.assertEqual(self.dialog.title(), 'About IDLE') | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-23 12:00:29 -04:00
										 |  |  |     def test_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') | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-28 01:10:51 -04:00
										 |  |  |     def test_printer_buttons(self): | 
					
						
							|  |  |  |         """Test buttons whose commands use printer function.""" | 
					
						
							|  |  |  |         dialog = self.dialog | 
					
						
							| 
									
										
										
										
											2018-02-12 14:58:26 -05:00
										 |  |  |         button_sources = [(dialog.py_license, license, 'license'), | 
					
						
							|  |  |  |                           (dialog.py_copyright, copyright, 'copyright'), | 
					
						
							|  |  |  |                           (dialog.py_credits, credits, 'credits')] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         for button, printer, name in button_sources: | 
					
						
							|  |  |  |             with self.subTest(name=name): | 
					
						
							|  |  |  |                 printer._Printer__setup() | 
					
						
							|  |  |  |                 button.invoke() | 
					
						
							|  |  |  |                 get = dialog._current_textview.viewframe.textframe.text.get | 
					
						
							|  |  |  |                 lines = printer._Printer__lines | 
					
						
							| 
									
										
										
										
											2019-01-22 10:49:52 -08:00
										 |  |  |                 if len(lines) < 2: | 
					
						
							|  |  |  |                     self.fail(name + ' full text was not found') | 
					
						
							| 
									
										
										
										
											2018-02-12 14:58:26 -05:00
										 |  |  |                 self.assertEqual(lines[0], get('1.0', '1.end')) | 
					
						
							|  |  |  |                 self.assertEqual(lines[1], get('2.0', '2.end')) | 
					
						
							|  |  |  |                 dialog._current_textview.destroy() | 
					
						
							| 
									
										
										
										
											2017-05-22 06:19:35 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-28 01:10:51 -04:00
										 |  |  |     def test_file_buttons(self): | 
					
						
							|  |  |  |         """Test buttons that display files.""" | 
					
						
							|  |  |  |         dialog = self.dialog | 
					
						
							| 
									
										
										
										
											2018-02-12 14:58:26 -05:00
										 |  |  |         button_sources = [(self.dialog.readme, 'README.txt', 'readme'), | 
					
						
							|  |  |  |                           (self.dialog.idle_news, 'NEWS.txt', 'news'), | 
					
						
							|  |  |  |                           (self.dialog.idle_credits, 'CREDITS.txt', 'credits')] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         for button, filename, name in button_sources: | 
					
						
							|  |  |  |             with  self.subTest(name=name): | 
					
						
							|  |  |  |                 button.invoke() | 
					
						
							|  |  |  |                 fn = findfile(filename, subdir='idlelib') | 
					
						
							|  |  |  |                 get = dialog._current_textview.viewframe.textframe.text.get | 
					
						
							|  |  |  |                 with open(fn, encoding='utf-8') as f: | 
					
						
							|  |  |  |                     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() | 
					
						
							| 
									
										
										
										
											2016-06-22 04:17:28 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-23 20:00:58 -04:00
										 |  |  | class DefaultTitleTest(unittest.TestCase): | 
					
						
							|  |  |  |     "Test default title." | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @classmethod | 
					
						
							|  |  |  |     def setUpClass(cls): | 
					
						
							|  |  |  |         requires('gui') | 
					
						
							|  |  |  |         cls.root = Tk() | 
					
						
							|  |  |  |         cls.root.withdraw() | 
					
						
							|  |  |  |         cls.dialog = About(cls.root, _utest=True) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @classmethod | 
					
						
							|  |  |  |     def tearDownClass(cls): | 
					
						
							|  |  |  |         del cls.dialog | 
					
						
							|  |  |  |         cls.root.update_idletasks() | 
					
						
							|  |  |  |         cls.root.destroy() | 
					
						
							|  |  |  |         del cls.root | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_dialog_title(self): | 
					
						
							|  |  |  |         """Test about dialog title""" | 
					
						
							| 
									
										
										
										
											2017-06-26 22:28:58 -04:00
										 |  |  |         self.assertEqual(self.dialog.title(), | 
					
						
							|  |  |  |                          f'About IDLE {python_version()}' | 
					
						
							|  |  |  |                          f' ({help_about.build_bits()} bit)') | 
					
						
							| 
									
										
										
										
											2017-06-23 20:00:58 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-28 01:10:51 -04:00
										 |  |  | class CloseTest(unittest.TestCase): | 
					
						
							|  |  |  |     """Simulate user clicking [Close] button""" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @classmethod | 
					
						
							|  |  |  |     def setUpClass(cls): | 
					
						
							|  |  |  |         requires('gui') | 
					
						
							|  |  |  |         cls.root = Tk() | 
					
						
							|  |  |  |         cls.root.withdraw() | 
					
						
							|  |  |  |         cls.dialog = About(cls.root, 'About IDLE', _utest=True) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @classmethod | 
					
						
							|  |  |  |     def tearDownClass(cls): | 
					
						
							|  |  |  |         del cls.dialog | 
					
						
							|  |  |  |         cls.root.update_idletasks() | 
					
						
							|  |  |  |         cls.root.destroy() | 
					
						
							|  |  |  |         del cls.root | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_close(self): | 
					
						
							|  |  |  |         self.assertEqual(self.dialog.winfo_class(), 'Toplevel') | 
					
						
							|  |  |  |         self.dialog.button_ok.invoke() | 
					
						
							|  |  |  |         with self.assertRaises(TclError): | 
					
						
							|  |  |  |             self.dialog.winfo_class() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class Dummy_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 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-22 04:17:28 -04:00
										 |  |  | class DisplayFileTest(unittest.TestCase): | 
					
						
							| 
									
										
										
										
											2017-05-28 01:10:51 -04:00
										 |  |  |     """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. | 
					
						
							|  |  |  |     """
 | 
					
						
							| 
									
										
										
										
											2016-06-22 04:17:28 -04:00
										 |  |  |     dialog = Dummy_about_dialog() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @classmethod | 
					
						
							|  |  |  |     def setUpClass(cls): | 
					
						
							| 
									
										
										
										
											2016-06-22 05:49:15 -04:00
										 |  |  |         cls.orig_error = textview.showerror | 
					
						
							| 
									
										
										
										
											2016-06-22 04:17:28 -04:00
										 |  |  |         cls.orig_view = textview.view_text | 
					
						
							| 
									
										
										
										
											2016-06-22 05:49:15 -04:00
										 |  |  |         cls.error = Mbox_func() | 
					
						
							| 
									
										
										
										
											2016-06-22 04:17:28 -04:00
										 |  |  |         cls.view = Func() | 
					
						
							| 
									
										
										
										
											2016-06-22 05:49:15 -04:00
										 |  |  |         textview.showerror = cls.error | 
					
						
							| 
									
										
										
										
											2016-06-22 04:17:28 -04:00
										 |  |  |         textview.view_text = cls.view | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @classmethod | 
					
						
							|  |  |  |     def tearDownClass(cls): | 
					
						
							| 
									
										
										
										
											2016-06-22 05:49:15 -04:00
										 |  |  |         textview.showerror = cls.orig_error | 
					
						
							| 
									
										
										
										
											2016-06-22 04:17:28 -04:00
										 |  |  |         textview.view_text = cls.orig_view | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-28 01:10:51 -04:00
										 |  |  |     def test_file_display(self): | 
					
						
							| 
									
										
										
										
											2016-06-22 04:17:28 -04:00
										 |  |  |         for handler in (self.dialog.idle_credits, | 
					
						
							|  |  |  |                         self.dialog.idle_readme, | 
					
						
							|  |  |  |                         self.dialog.idle_news): | 
					
						
							| 
									
										
										
										
											2016-06-22 05:49:15 -04:00
										 |  |  |             self.error.message = '' | 
					
						
							| 
									
										
										
										
											2016-06-22 04:17:28 -04:00
										 |  |  |             self.view.called = False | 
					
						
							| 
									
										
										
										
											2016-06-22 05:49:15 -04:00
										 |  |  |             with self.subTest(handler=handler): | 
					
						
							|  |  |  |                 handler() | 
					
						
							|  |  |  |                 self.assertEqual(self.error.message, '') | 
					
						
							|  |  |  |                 self.assertEqual(self.view.called, True) | 
					
						
							| 
									
										
										
										
											2016-06-22 04:17:28 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if __name__ == '__main__': | 
					
						
							|  |  |  |     unittest.main(verbosity=2) |