def test_autocomplete_event(self): Equal = self.assertEqual autocomplete = self.autocomplete # Test that the autocomplete event is ignored if user is pressing a # modifier key in addition to the tab key ev = Event(mc_state=True) self.assertIsNone(autocomplete.autocomplete_event(ev)) del ev.mc_state # Test that tab after whitespace is ignored. self.text.insert('1.0', ' """Docstring.\n ') self.assertIsNone(autocomplete.autocomplete_event(ev)) self.text.delete('1.0', 'end') # If autocomplete window is open, complete() method is called self.text.insert('1.0', 're.') # This must call autocomplete._make_autocomplete_window() Equal(self.autocomplete.autocomplete_event(ev), 'break') # If autocomplete window is not active or does not exist, # open_completions is called. Return depends on its return. autocomplete._remove_autocomplete_window() o_cs = Func() # .result = None autocomplete.open_completions = o_cs Equal(self.autocomplete.autocomplete_event(ev), None) Equal(o_cs.args, (False, True, True)) o_cs.result = True Equal(self.autocomplete.autocomplete_event(ev), 'break') Equal(o_cs.args, (False, True, True))
def test_close(self): mb = self.mb mb.top.destroy = Func() mb.node.destroy = Func() mb.close() self.assertTrue(mb.top.destroy.called) self.assertTrue(mb.node.destroy.called) del mb.top.destroy, mb.node.destroy
def test_close(self): pb = self.pb pb.top.destroy = Func() pb.node.destroy = Func() pb.close() self.assertTrue(pb.top.destroy.called) self.assertTrue(pb.node.destroy.called) del pb.top.destroy, pb.node.destroy
def setUpClass(cls): page = cls.page = dialog.highpage dialog.note.select(page) page.set_theme_type = Func() page.paint_theme_sample = Func() page.set_highlight_target = Func() page.set_color_sample = Func() page.update()
def test_listchildren(self): save_rex = browser.pyclbr.readmodule_ex save_tc = browser.transform_children browser.pyclbr.readmodule_ex = Func(result=mock_pyclbr_tree) browser.transform_children = Func(result=[f0, C0]) try: self.assertEqual(self.mbt.listchildren(), [f0, C0]) finally: browser.pyclbr.readmodule_ex = save_rex browser.transform_children = save_tc
def test_create_widgets(self): self.dialog.create_entries = Func() self.dialog.create_option_buttons = Func() self.dialog.create_other_buttons = Func() self.dialog.create_command_buttons = Func() self.dialog.default_command = None self.dialog.create_widgets() self.assertTrue(self.dialog.create_entries.called) self.assertTrue(self.dialog.create_option_buttons.called) self.assertTrue(self.dialog.create_other_buttons.called) self.assertTrue(self.dialog.create_command_buttons.called)
def test_get_color(self): eq = self.assertEqual d = self.page orig_chooser = configdialog.tkColorChooser.askcolor chooser = configdialog.tkColorChooser.askcolor = Func() gntn = d.get_new_theme_name = Func() d.highlight_target.set('Editor Breakpoint') d.color.set('#ffffff') # Nothing selected. chooser.result = (None, None) d.button_set_color.invoke() eq(d.color.get(), '#ffffff') # Selection same as previous color. chooser.result = ('', d.style.lookup(d.frame_color_set['style'], 'background')) d.button_set_color.invoke() eq(d.color.get(), '#ffffff') # Select different color. chooser.result = ((222.8671875, 0.0, 0.0), '#de0000') # Default theme. d.color.set('#ffffff') d.theme_source.set(True) # No theme name selected therefore color not saved. gntn.result = '' d.button_set_color.invoke() eq(gntn.called, 1) eq(d.color.get(), '#ffffff') # Theme name selected. gntn.result = 'My New Theme' d.button_set_color.invoke() eq(d.custom_name.get(), gntn.result) eq(d.color.get(), '#de0000') # Custom theme. d.color.set('#ffffff') d.theme_source.set(False) d.button_set_color.invoke() eq(d.color.get(), '#de0000') del d.get_new_theme_name configdialog.tkColorChooser.askcolor = orig_chooser
def test_helplist_item_add(self): # Call without and twice with HelpSource result. # Double call enables check on order. eq = self.assertEqual orig_helpsource = configdialog.HelpSource hs = configdialog.HelpSource = Func(return_self=True) d = self.page d.helplist.delete(0, 'end') d.user_helplist.clear() d.set.called = d.upc.called = 0 hs.result = '' d.helplist_item_add() self.assertTrue( list(d.helplist.get(0, 'end')) == d.user_helplist == []) self.assertFalse(d.upc.called) hs.result = ('name1', 'file1') d.helplist_item_add() hs.result = ('name2', 'file2') d.helplist_item_add() eq(d.helplist.get(0, 'end'), ('name1', 'name2')) eq(d.user_helplist, [('name1', 'file1'), ('name2', 'file2')]) eq(d.upc.called, 2) self.assertFalse(d.set.called) configdialog.HelpSource = orig_helpsource
def test_ok(self): view = VW(root, 'Title', 'test text', modal=False) view.destroy = Func() view.ok() self.assertTrue(view.destroy.called) del view.destroy # Unmask real function. view.destroy()
def test_goto_file_line(self): eq = self.assertEqual w = self.window text = self.text w.flist = mock.Mock() gfl = w.flist.gotofileline = Func() showerror = w.showerror = Mbox_func() # No file/line number. w.write('Not a file line') self.assertIsNone(w.goto_file_line()) eq(gfl.called, 0) eq(showerror.title, 'No special line') # Current file/line number. w.write(f'{str(__file__)}: 42: spam\n') w.write(f'{str(__file__)}: 21: spam') self.assertIsNone(w.goto_file_line()) eq(gfl.args, (str(__file__), 21)) # Previous line has file/line number. text.delete('1.0', 'end') w.write(f'{str(__file__)}: 42: spam\n') w.write('Not a file line') self.assertIsNone(w.goto_file_line()) eq(gfl.args, (str(__file__), 42)) del w.flist.gotofileline, w.showerror
def setUpClass(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
def test_helplist_item_edit(self): # Call without and with HelpSource change. eq = self.assertEqual orig_helpsource = configdialog.HelpSource hs = configdialog.HelpSource = Func(return_self=True) d = self.page d.helplist.delete(0, 'end') d.helplist.insert(0, 'name1') d.helplist.selection_set(0) d.helplist.selection_anchor(0) d.user_helplist.clear() d.user_helplist.append(('name1', 'file1')) d.set.called = d.upc.called = 0 hs.result = '' d.helplist_item_edit() hs.result = ('name1', 'file1') d.helplist_item_edit() eq(d.helplist.get(0, 'end'), ('name1', )) eq(d.user_helplist, [('name1', 'file1')]) self.assertFalse(d.upc.called) hs.result = ('name2', 'file2') d.helplist_item_edit() eq(d.helplist.get(0, 'end'), ('name2', )) eq(d.user_helplist, [('name2', 'file2')]) self.assertTrue(d.upc.called == d.set.called == 1) configdialog.HelpSource = orig_helpsource
def test_color(self): d = self.page d.on_new_color_set = Func() # self.color is only set in get_color through ColorChooser. d.color.set('green') self.assertEqual(d.on_new_color_set.called, 1) del d.on_new_color_set
def test_get_new_keys(self): eq = self.assertEqual d = self.page orig_getkeysdialog = configdialog.GetKeysDialog gkd = configdialog.GetKeysDialog = Func(return_self=True) gnkn = d.get_new_keys_name = Func() d.button_new_keys.state(('!disabled', )) d.bindingslist.delete(0, 'end') d.bindingslist.insert(0, 'copy - <Control-Shift-Key-C>') d.bindingslist.selection_set(0) d.bindingslist.selection_anchor(0) d.keybinding.set('Key-a') d.keyset_source.set(True) # Default keyset. # Default keyset; no change to binding. gkd.result = '' d.button_new_keys.invoke() eq(d.bindingslist.get('anchor'), 'copy - <Control-Shift-Key-C>') # Keybinding isn't changed when there isn't a change entered. eq(d.keybinding.get(), 'Key-a') # Default keyset; binding changed. gkd.result = '<Key-F11>' # No keyset name selected therefore binding not saved. gnkn.result = '' d.button_new_keys.invoke() eq(gnkn.called, 1) eq(d.bindingslist.get('anchor'), 'copy - <Control-Shift-Key-C>') # Keyset name selected. gnkn.result = 'My New Key Set' d.button_new_keys.invoke() eq(d.custom_name.get(), gnkn.result) eq(d.bindingslist.get('anchor'), 'copy - <Key-F11>') eq(d.keybinding.get(), '<Key-F11>') # User keyset; binding changed. d.keyset_source.set(False) # Custom keyset. gnkn.called = 0 gkd.result = '<Key-p>' d.button_new_keys.invoke() eq(gnkn.called, 0) eq(d.bindingslist.get('anchor'), 'copy - <Key-p>') eq(d.keybinding.get(), '<Key-p>') del d.get_new_keys_name configdialog.GetKeysDialog = orig_getkeysdialog
def test_get_new_keys_name(self): orig_sectionname = configdialog.SectionName sn = configdialog.SectionName = Func(return_self=True) d = self.page sn.result = 'New Keys' self.assertEqual(d.get_new_keys_name(''), 'New Keys') configdialog.SectionName = orig_sectionname
def test_getsublist(self): mbt = self.mbt mbt.listchildren = Func(result=[f0, C0]) sub0, sub1 = mbt.GetSubList() del mbt.listchildren self.assertIsInstance(sub0, browser.ChildBrowserTreeItem) self.assertIsInstance(sub1, browser.ChildBrowserTreeItem) self.assertEqual(sub0.name, 'f0') self.assertEqual(sub1.name, 'C0(base)')
def test_load_keys_list(self): eq = self.assertEqual d = self.page gks = editConf.GetKeySet = Func() del d.load_keys_list b = d.bindingslist b.delete(0, 'end') b.insert(0, '<<find>>') b.insert(1, '<<help>>') gks.result = { '<<copy>>': ['<Control-Key-c>', '<Control-Key-C>'], '<<force-open-completions>>': ['<Control-Key-space>'], '<<spam>>': ['<Key-F11>'] } changes.add_option('keys', 'my keys', 'spam', '<Shift-Key-a>') expected = ('copy - <Control-Key-c> <Control-Key-C>', 'force-open-completions - <Control-Key-space>', 'spam - <Shift-Key-a>') # No current selection. d.load_keys_list('my keys') eq(b.get(0, 'end'), expected) eq(b.get('anchor'), '') eq(b.curselection(), ()) # Check selection. b.selection_set(1) b.selection_anchor(1) d.load_keys_list('my keys') eq(b.get(0, 'end'), expected) eq(b.get('anchor'), 'force-open-completions - <Control-Key-space>') eq(b.curselection(), (1, )) # Change selection. b.selection_set(2) b.selection_anchor(2) d.load_keys_list('my keys') eq(b.get(0, 'end'), expected) eq(b.get('anchor'), 'spam - <Shift-Key-a>') eq(b.curselection(), (2, )) d.load_keys_list = Func() del editConf.GetKeySet
def test_set_color_sample(self): d = self.page del d.set_color_sample d.highlight_target.set('Selected Text') d.fg_bg_toggle.set(True) d.set_color_sample() self.assertEqual( d.style.lookup(d.frame_color_set['style'], 'background'), d.highlight_sample.tag_cget('hilite', 'foreground')) d.set_color_sample = Func()
def test_keyset_source(self): eq = self.assertEqual d = self.page # Test these separately. d.var_changed_builtin_name = Func() d.var_changed_custom_name = Func() # Builtin selected. d.builtin_keyset_on.invoke() eq(mainpage, {'Keys': {'default': 'True'}}) eq(d.var_changed_builtin_name.called, 1) eq(d.var_changed_custom_name.called, 0) changes.clear() # Custom selected. d.custom_keyset_on.state(('!disabled', )) d.custom_keyset_on.invoke() self.assertEqual(mainpage, {'Keys': {'default': 'False'}}) eq(d.var_changed_builtin_name.called, 1) eq(d.var_changed_custom_name.called, 1) del d.var_changed_builtin_name, d.var_changed_custom_name
class Validator(gkd): def __init__(self, *args, **kwargs): config_key.GetKeysDialog.__init__(self, *args, **kwargs) class list_keys_final: get = Func() self.list_keys_final = list_keys_final get_modifiers = Func() showerror = Mbox_func()
def test_delete_custom_keys(self): eq = self.assertEqual d = self.page d.button_delete_custom_keys.state(('!disabled', )) yesno = d.askyesno = Func() dialog.deactivate_current_config = Func() dialog.activate_config_changes = Func() keyset_name = 'spam key set' editConf.userCfg['keys'].SetOption(keyset_name, 'name', 'value') keyspage[keyset_name] = {'option': 'True'} # Force custom keyset. d.keyset_source.set(False) d.custom_name.set(keyset_name) # Cancel deletion. yesno.result = False d.button_delete_custom_keys.invoke() eq(yesno.called, 1) eq(keyspage[keyset_name], {'option': 'True'}) eq(editConf.GetSectionList('user', 'keys'), ['spam key set']) eq(dialog.deactivate_current_config.called, 0) eq(dialog.activate_config_changes.called, 0) eq(d.set_keys_type.called, 0) # Confirm deletion. yesno.result = True d.button_delete_custom_keys.invoke() eq(yesno.called, 2) self.assertNotIn(keyset_name, keyspage) eq(editConf.GetSectionList('user', 'keys'), []) eq(d.custom_keyset_on.state(), ('disabled', )) eq(d.custom_name.get(), '- no custom keys -') eq(dialog.deactivate_current_config.called, 1) eq(dialog.activate_config_changes.called, 1) eq(d.set_keys_type.called, 1) del dialog.activate_config_changes, dialog.deactivate_current_config del d.askyesno
def test_delete_custom(self): eq = self.assertEqual d = self.page d.button_delete_custom.state(('!disabled', )) yesno = d.askyesno = Func() dialog.deactivate_current_config = Func() dialog.activate_config_changes = Func() theme_name = 'spam theme' editConf.userCfg['highlight'].SetOption(theme_name, 'name', 'value') highpage[theme_name] = {'option': 'True'} # Force custom theme. d.theme_source.set(False) d.custom_name.set(theme_name) # Cancel deletion. yesno.result = False d.button_delete_custom.invoke() eq(yesno.called, 1) eq(highpage[theme_name], {'option': 'True'}) eq(editConf.GetSectionList('user', 'highlight'), ['spam theme']) eq(dialog.deactivate_current_config.called, 0) eq(dialog.activate_config_changes.called, 0) eq(d.set_theme_type.called, 0) # Confirm deletion. yesno.result = True d.button_delete_custom.invoke() eq(yesno.called, 2) self.assertNotIn(theme_name, highpage) eq(editConf.GetSectionList('user', 'highlight'), []) eq(d.custom_theme_on.state(), ('disabled', )) eq(d.custom_name.get(), '- no custom themes -') eq(dialog.deactivate_current_config.called, 1) eq(dialog.activate_config_changes.called, 1) eq(d.set_theme_type.called, 1) del dialog.activate_config_changes, dialog.deactivate_current_config del d.askyesno
def test_maybesave(self): w = self.window eq = self.assertEqual w.get_saved = Func() w.get_saved.result = False eq(w.maybesave(), 'no') eq(w.get_saved.called, 1) w.get_saved.result = True eq(w.maybesave(), 'yes') eq(w.get_saved.called, 2) del w.get_saved
def test_update_help_changes(self): d = self.page del d.update_help_changes d.user_helplist.clear() d.user_helplist.append(('name1', 'file1')) d.user_helplist.append(('name2', 'file2')) d.update_help_changes() self.assertEqual(mainpage['HelpFiles'], { '1': 'name1;file1', '2': 'name2;file2' }) d.update_help_changes = Func()
def setUpClass(cls): cls.config_string = {} conf = config.editConf(_utest=True) if __name__ != '__main__': edit_dir = os.path.dirname(__file__) else: edit_dir = os.path.abspath(sys.path[0]) for ctype in conf.config_types: config_path = os.path.join(edit_dir, '../config-%s.def' % ctype) with open(config_path, 'r') as f: cls.config_string[ctype] = f.read() cls.orig_warn = config._warn config._warn = Func()
def test_set_samples(self): d = self.page del d.set_samples # Unmask method for test orig_samples = d.font_sample, d.highlight_sample d.font_sample, d.highlight_sample = {}, {} d.font_name.set('test') d.font_size.set('5') d.font_bold.set(1) expected = {'font': ('test', '5', 'bold')} # Test set_samples. d.set_samples() self.assertTrue(d.font_sample == d.highlight_sample == expected) d.font_sample, d.highlight_sample = orig_samples d.set_samples = Func() # Re-mask for other tests.
def test_save_as_new_key_set(self): d = self.page gnkn = d.get_new_keys_name = Func() d.keyset_source.set(True) # No name entered. gnkn.result = '' d.button_save_custom_keys.invoke() # Name entered. gnkn.result = 'my new key set' gnkn.called = 0 self.assertNotIn(gnkn.result, editConf.userCfg['keys']) d.button_save_custom_keys.invoke() self.assertIn(gnkn.result, editConf.userCfg['keys']) del d.get_new_keys_name
def test_save_as_new_theme(self): d = self.page gntn = d.get_new_theme_name = Func() d.theme_source.set(True) # No name entered. gntn.result = '' d.button_save_custom.invoke() self.assertNotIn(gntn.result, editConf.userCfg['highlight']) # Name entered. gntn.result = 'my new theme' gntn.called = 0 self.assertNotIn(gntn.result, editConf.userCfg['highlight']) d.button_save_custom.invoke() self.assertIn(gntn.result, editConf.userCfg['highlight']) del d.get_new_theme_name
def test_set_highlight_target(self): eq = self.assertEqual d = self.page del d.set_highlight_target # Target is cursor. d.highlight_target.set('Cursor') eq(d.fg_on.state(), ('disabled', 'selected')) eq(d.bg_on.state(), ('disabled', )) self.assertTrue(d.fg_bg_toggle) eq(d.set_color_sample.called, 1) # Target is not cursor. d.highlight_target.set('Comment') eq(d.fg_on.state(), ('selected', )) eq(d.bg_on.state(), ()) self.assertTrue(d.fg_bg_toggle) eq(d.set_color_sample.called, 2) d.set_highlight_target = Func()
def test_set_keys_type(self): eq = self.assertEqual d = self.page del d.set_keys_type # Builtin keyset selected. d.keyset_source.set(True) d.set_keys_type() eq(d.builtinlist['state'], NORMAL) eq(d.customlist['state'], DISABLED) eq(d.button_delete_custom_keys.state(), ('disabled', )) # Custom keyset selected. d.keyset_source.set(False) d.set_keys_type() eq(d.builtinlist['state'], DISABLED) eq(d.custom_keyset_on.state(), ('selected', )) eq(d.customlist['state'], NORMAL) eq(d.button_delete_custom_keys.state(), ()) d.set_keys_type = Func()