diff -r 383f4eede628 Lib/idlelib/configHelpSourceEdit.py --- a/Lib/idlelib/configHelpSourceEdit.py Sat Feb 15 17:11:06 2014 -0500 +++ b/Lib/idlelib/configHelpSourceEdit.py Sun Feb 16 19:43:04 2014 +0530 @@ -159,11 +159,16 @@ self.destroy() if __name__ == '__main__': - #test the dialog + import unittest + unittest.main( + 'idlelib.idle_test.test_config_helpsource', verbosity=2, exit=False) + + # test the dialog root = Tk() def run(): keySeq = '' dlg = GetHelpSourceDialog(root, 'Get Help Source') print(dlg.result) - Button(root,text='Dialog', command=run).pack() + Button(root, text='Dialog', command=run).pack() root.mainloop() + diff -r 383f4eede628 Lib/idlelib/idle_test/test_config_helpsource.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Lib/idlelib/idle_test/test_config_helpsource.py Sun Feb 16 19:43:04 2014 +0530 @@ -0,0 +1,100 @@ +"""Unit test for idlelib.configHelpSourceEdit""" +import unittest +from idlelib.idle_test.mock_tk import Var, Mbox +from idlelib import configHelpSourceEdit as helpsource_dialog_module + +helpsource_dialog = helpsource_dialog_module.GetHelpSourceDialog + + +class dummy_helpsource_dialog: + # Mock for testing the following methods + MenuOk = helpsource_dialog.MenuOk + PathOk = helpsource_dialog.PathOk + Cancel = helpsource_dialog.Cancel + Ok = helpsource_dialog.Ok + # Attributes, constant or variable required for tests. + menu = Var() + path = Var() + result = None + destroyed = False + + def destroy(self): + self.destroyed = True +# menu_ok calls Mbox.showerror if menu is not ok +orig_mbox = helpsource_dialog_module.tkMessageBox +showerror = Mbox.showerror + + +class ConfigHelpSourceDialog(unittest.TestCase): + dialog = dummy_helpsource_dialog() + + @classmethod + def setUpClass(cls): + helpsource_dialog_module.tkMessageBox = Mbox + + @classmethod + def tearDownClass(cls): + helpsource_dialog_module.tkMessageBox = orig_mbox + + def test_blank_menu(self): + self.dialog.menu.set('') + self.assertEqual(self.dialog.MenuOk(), False) + self.assertEqual(showerror.title, 'Menu Item Error') + self.assertIn('No', showerror.message) + + def test_long_menu(self): + self.dialog.menu.set('foobar' * 8) + self.assertEqual(self.dialog.MenuOk(), False) + self.assertEqual(showerror.title, 'Menu Item Error') + self.assertIn('too long', showerror.message) + + def test_good_menu(self): + self.dialog.menu.set(' this name is good') + self.assertEqual(self.dialog.MenuOk(), True) + + def test_blank_path(self): + self.dialog.path.set('') + self.assertEqual(self.dialog.PathOk(), False) + self.assertEqual(showerror.title, 'File Path Error') + self.assertIn('No', showerror.message) + + def test_invalid_paths(self): + # Test for invalid url path + self.dialog.path.set('ww.python.org') + self.assertEqual(self.dialog.PathOk(), False) + self.assertEqual(showerror.title, 'File Path Error') + self.assertIn('not', showerror.message) + + # Test for invalid file path + self.dialog.path.set('testfile' * 8) + self.assertEqual(self.dialog.PathOk(), False) + self.assertEqual(showerror.title, 'File Path Error') + self.assertIn('not', showerror.message) + + def test_good_path(self): + # Test for valid url path + self.dialog.path.set('www.python.org') + self.assertEqual(self.dialog.PathOk(), True) + + # Test for valid file path + self.dialog.path.set('/') + self.assertEqual(self.dialog.PathOk(), True) + + def test_ok(self): + self.dialog.destroyed = False + self.dialog.menu.set('good') + self.dialog.path.set('www.python.org') + self.dialog.Ok() + self.assertEqual(self.dialog.result, ('good', 'www.python.org')) + self.assertTrue(self.dialog.destroyed) + + def test_cancel(self): + self.dialog.destroyed = False + self.dialog.menu.set('good') + self.dialog.path.set('www.python.org') + self.dialog.Cancel() + self.assertEqual(self.dialog.result, None) + self.assertTrue(self.dialog.destroyed) + +if __name__ == '__main__': + unittest.main(verbosity=2, exit=False)