| 
									
										
										
										
											2016-06-22 04:17:28 -04:00
										 |  |  | '''Test idlelib.help_about.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-28 01:10:51 -04:00
										 |  |  | Coverage: 100% | 
					
						
							| 
									
										
										
										
											2016-06-22 04:17:28 -04:00
										 |  |  | '''
 | 
					
						
							| 
									
										
										
										
											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 | 
					
						
							| 
									
										
										
										
											2016-06-22 04:17:28 -04:00
										 |  |  | import unittest | 
					
						
							| 
									
										
										
										
											2017-05-28 01:10:51 -04:00
										 |  |  | from idlelib.idle_test.mock_idle import Func | 
					
						
							|  |  |  | from idlelib.idle_test.mock_tk import Mbox_func | 
					
						
							|  |  |  | from idlelib.help_about import AboutDialog as About | 
					
						
							|  |  |  | from idlelib import textview | 
					
						
							| 
									
										
										
										
											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 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     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-05-28 01:10:51 -04:00
										 |  |  |     def test_printer_buttons(self): | 
					
						
							|  |  |  |         """Test buttons whose commands use printer function.""" | 
					
						
							|  |  |  |         dialog = self.dialog | 
					
						
							|  |  |  |         button_sources = [(self.dialog.py_license, license), | 
					
						
							|  |  |  |                           (self.dialog.py_copyright, copyright), | 
					
						
							|  |  |  |                           (self.dialog.py_credits, credits)] | 
					
						
							| 
									
										
										
										
											2017-05-22 06:19:35 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-28 01:10:51 -04:00
										 |  |  |         for button, printer in button_sources: | 
					
						
							| 
									
										
										
										
											2017-05-22 06:19:35 +08:00
										 |  |  |             printer._Printer__setup() | 
					
						
							|  |  |  |             button.invoke() | 
					
						
							| 
									
										
										
										
											2017-05-28 01:10:51 -04:00
										 |  |  |             self.assertEqual( | 
					
						
							|  |  |  |                     printer._Printer__lines[0], | 
					
						
							| 
									
										
										
										
											2017-05-28 06:50:55 -04:00
										 |  |  |                     dialog._current_textview.text.get('1.0', '1.end')) | 
					
						
							| 
									
										
										
										
											2017-05-28 01:10:51 -04:00
										 |  |  |             self.assertEqual( | 
					
						
							|  |  |  |                     printer._Printer__lines[1], | 
					
						
							| 
									
										
										
										
											2017-05-28 06:50:55 -04:00
										 |  |  |                     dialog._current_textview.text.get('2.0', '2.end')) | 
					
						
							| 
									
										
										
										
											2017-05-22 06:19:35 +08:00
										 |  |  |             dialog._current_textview.destroy() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-28 01:10:51 -04:00
										 |  |  |     def test_file_buttons(self): | 
					
						
							|  |  |  |         """Test buttons that display files.""" | 
					
						
							|  |  |  |         dialog = self.dialog | 
					
						
							|  |  |  |         button_sources = [(self.dialog.readme, 'README.txt'), | 
					
						
							|  |  |  |                           (self.dialog.idle_news, 'NEWS.txt'), | 
					
						
							|  |  |  |                           (self.dialog.idle_credits, 'CREDITS.txt')] | 
					
						
							| 
									
										
										
										
											2017-05-22 06:19:35 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-28 01:10:51 -04:00
										 |  |  |         for button, filename in button_sources: | 
					
						
							| 
									
										
										
										
											2017-05-22 06:19:35 +08:00
										 |  |  |             button.invoke() | 
					
						
							|  |  |  |             fn = findfile(filename, subdir='idlelib') | 
					
						
							|  |  |  |             with open(fn) as f: | 
					
						
							| 
									
										
										
										
											2017-05-28 01:10:51 -04:00
										 |  |  |                 self.assertEqual( | 
					
						
							|  |  |  |                         f.readline().strip(), | 
					
						
							| 
									
										
										
										
											2017-05-28 06:50:55 -04:00
										 |  |  |                         dialog._current_textview.text.get('1.0', '1.end')) | 
					
						
							| 
									
										
										
										
											2017-05-22 06:19:35 +08:00
										 |  |  |                 f.readline() | 
					
						
							| 
									
										
										
										
											2017-05-28 06:50:55 -04:00
										 |  |  |                 self.assertEqual( | 
					
						
							|  |  |  |                     f.readline().strip(), | 
					
						
							|  |  |  |                     dialog._current_textview.text.get('3.0', '3.end')) | 
					
						
							| 
									
										
										
										
											2017-05-22 06:19:35 +08:00
										 |  |  |             dialog._current_textview.destroy() | 
					
						
							| 
									
										
										
										
											2016-06-22 04:17:28 -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) |