1"""Unit tests for idlelib.configSectionNameDialog"""
2import unittest
3from idlelib.idle_test.mock_tk import Var, Mbox
4from idlelib import configSectionNameDialog as name_dialog_module
5
6name_dialog = name_dialog_module.GetCfgSectionNameDialog
7
8class Dummy_name_dialog(object):
9    # Mock for testing the following methods of name_dialog
10    name_ok = name_dialog.name_ok.im_func
11    Ok = name_dialog.Ok.im_func
12    Cancel = name_dialog.Cancel.im_func
13    # Attributes, constant or variable, needed for tests
14    used_names = ['used']
15    name = Var()
16    result = None
17    destroyed = False
18    def destroy(self):
19        self.destroyed = True
20
21# name_ok calls Mbox.showerror if name is not ok
22orig_mbox = name_dialog_module.tkMessageBox
23showerror = Mbox.showerror
24
25class ConfigNameTest(unittest.TestCase):
26    dialog = Dummy_name_dialog()
27
28    @classmethod
29    def setUpClass(cls):
30        name_dialog_module.tkMessageBox = Mbox
31
32    @classmethod
33    def tearDownClass(cls):
34        name_dialog_module.tkMessageBox = orig_mbox
35
36    def test_blank_name(self):
37        self.dialog.name.set(' ')
38        self.assertEqual(self.dialog.name_ok(), '')
39        self.assertEqual(showerror.title, 'Name Error')
40        self.assertIn('No', showerror.message)
41
42    def test_used_name(self):
43        self.dialog.name.set('used')
44        self.assertEqual(self.dialog.name_ok(), '')
45        self.assertEqual(showerror.title, 'Name Error')
46        self.assertIn('use', showerror.message)
47
48    def test_long_name(self):
49        self.dialog.name.set('good'*8)
50        self.assertEqual(self.dialog.name_ok(), '')
51        self.assertEqual(showerror.title, 'Name Error')
52        self.assertIn('too long', showerror.message)
53
54    def test_good_name(self):
55        self.dialog.name.set('  good ')
56        showerror.title = 'No Error'  # should not be called
57        self.assertEqual(self.dialog.name_ok(), 'good')
58        self.assertEqual(showerror.title, 'No Error')
59
60    def test_ok(self):
61        self.dialog.destroyed = False
62        self.dialog.name.set('good')
63        self.dialog.Ok()
64        self.assertEqual(self.dialog.result, 'good')
65        self.assertTrue(self.dialog.destroyed)
66
67    def test_cancel(self):
68        self.dialog.destroyed = False
69        self.dialog.Cancel()
70        self.assertEqual(self.dialog.result, '')
71        self.assertTrue(self.dialog.destroyed)
72
73
74if __name__ == '__main__':
75    unittest.main(verbosity=2, exit=False)
76