Current Path: > > opt > alt > python36 > lib64 > python3.6 > idlelib > > idle_test >
Operation : Linux premium131.web-hosting.com 4.18.0-553.44.1.lve.el8.x86_64 #1 SMP Thu Mar 13 14:29:12 UTC 2025 x86_64 Software : Apache Server IP : 162.0.232.56 | Your IP: 216.73.216.111 Domains : 1034 Domain(s) Permission : [ 0755 ]
Name | Type | Size | Last Modified | Actions |
---|---|---|---|---|
__pycache__ | Directory | - | - | |
README.txt | File | 8729 bytes | September 04 2021 03:49:41. | |
__init__.py | File | 712 bytes | April 17 2024 17:19:35. | |
htest.py | File | 13997 bytes | April 17 2024 17:19:35. | |
mock_idle.py | File | 1870 bytes | April 17 2024 17:19:35. | |
mock_tk.py | File | 11627 bytes | April 17 2024 17:19:35. | |
template.py | File | 642 bytes | April 17 2024 17:19:35. | |
test_autocomplete.py | File | 5107 bytes | April 17 2024 17:19:35. | |
test_autocomplete_w.py | File | 709 bytes | April 17 2024 17:19:35. | |
test_autoexpand.py | File | 4640 bytes | April 17 2024 17:19:35. | |
test_browser.py | File | 7986 bytes | April 17 2024 17:19:35. | |
test_calltip.py | File | 7785 bytes | April 17 2024 17:19:35. | |
test_calltip_w.py | File | 686 bytes | April 17 2024 17:19:35. | |
test_codecontext.py | File | 14494 bytes | April 17 2024 17:19:35. | |
test_colorizer.py | File | 1058 bytes | April 17 2024 17:19:35. | |
test_config.py | File | 32805 bytes | April 17 2024 17:19:35. | |
test_config_key.py | File | 3700 bytes | April 17 2024 17:19:35. | |
test_configdialog.py | File | 49767 bytes | April 17 2024 17:19:35. | |
test_debugger.py | File | 571 bytes | April 17 2024 17:19:35. | |
test_debugger_r.py | File | 631 bytes | April 17 2024 17:19:35. | |
test_debugobj.py | File | 1561 bytes | April 17 2024 17:19:35. | |
test_debugobj_r.py | File | 545 bytes | April 17 2024 17:19:35. | |
test_delegator.py | File | 1567 bytes | April 17 2024 17:19:35. | |
test_editmenu.py | File | 2564 bytes | April 17 2024 17:19:35. | |
test_editor.py | File | 1141 bytes | April 17 2024 17:19:35. | |
test_filelist.py | File | 795 bytes | April 17 2024 17:19:35. | |
test_grep.py | File | 2660 bytes | April 17 2024 17:19:35. | |
test_help.py | File | 849 bytes | April 17 2024 17:19:35. | |
test_help_about.py | File | 5821 bytes | April 17 2024 17:19:35. | |
test_history.py | File | 5517 bytes | April 17 2024 17:19:35. | |
test_hyperparser.py | File | 9080 bytes | April 17 2024 17:19:35. | |
test_iomenu.py | File | 870 bytes | April 17 2024 17:19:35. | |
test_macosx.py | File | 3309 bytes | April 17 2024 17:19:35. | |
test_mainmenu.py | File | 594 bytes | April 17 2024 17:19:35. | |
test_multicall.py | File | 1042 bytes | April 17 2024 17:19:35. | |
test_outwin.py | File | 5545 bytes | April 17 2024 17:19:35. | |
test_paragraph.py | File | 14352 bytes | April 17 2024 17:19:35. | |
test_parenmatch.py | File | 3512 bytes | April 17 2024 17:19:35. | |
test_pathbrowser.py | File | 2422 bytes | April 17 2024 17:19:35. | |
test_percolator.py | File | 4065 bytes | April 17 2024 17:19:35. | |
test_pyparse.py | File | 18588 bytes | April 17 2024 17:19:35. | |
test_pyshell.py | File | 1307 bytes | April 17 2024 17:19:35. | |
test_query.py | File | 11768 bytes | April 17 2024 17:19:35. | |
test_redirector.py | File | 4176 bytes | April 17 2024 17:19:35. | |
test_replace.py | File | 8305 bytes | April 17 2024 17:19:35. | |
test_rpc.py | File | 805 bytes | April 17 2024 17:19:35. | |
test_rstrip.py | File | 1605 bytes | April 17 2024 17:19:35. | |
test_run.py | File | 9414 bytes | April 17 2024 17:19:35. | |
test_runscript.py | File | 777 bytes | April 17 2024 17:19:35. | |
test_scrolledlist.py | File | 496 bytes | April 17 2024 17:19:35. | |
test_search.py | File | 2459 bytes | April 17 2024 17:19:35. | |
test_searchbase.py | File | 5479 bytes | April 17 2024 17:19:35. | |
test_searchengine.py | File | 11543 bytes | April 17 2024 17:19:35. | |
test_squeezer.py | File | 21861 bytes | April 17 2024 17:19:35. | |
test_stackviewer.py | File | 1206 bytes | April 17 2024 17:19:35. | |
test_statusbar.py | File | 1133 bytes | April 17 2024 17:19:35. | |
test_text.py | File | 6978 bytes | April 17 2024 17:19:35. | |
test_textview.py | File | 5634 bytes | April 17 2024 17:19:35. | |
test_tooltip.py | File | 5130 bytes | April 17 2024 17:19:35. | |
test_tree.py | File | 792 bytes | April 17 2024 17:19:35. | |
test_undo.py | File | 4228 bytes | April 17 2024 17:19:35. | |
test_warning.py | File | 2740 bytes | April 17 2024 17:19:35. | |
test_window.py | File | 1075 bytes | April 17 2024 17:19:35. | |
test_zoomheight.py | File | 999 bytes | April 17 2024 17:19:35. |
"Test codecontext, coverage 100%" from idlelib import codecontext import unittest from test.support import requires from tkinter import Tk, Frame, Text, TclError from unittest import mock import re from idlelib import config usercfg = codecontext.idleConf.userCfg testcfg = { 'main': config.IdleUserConfParser(''), 'highlight': config.IdleUserConfParser(''), 'keys': config.IdleUserConfParser(''), 'extensions': config.IdleUserConfParser(''), } code_sample = """\ class C1(): # Class comment. def __init__(self, a, b): self.a = a self.b = b def compare(self): if a > b: return a elif a < b: return b else: return None """ class DummyEditwin: def __init__(self, root, frame, text): self.root = root self.top = root self.text_frame = frame self.text = text class CodeContextTest(unittest.TestCase): @classmethod def setUpClass(cls): requires('gui') root = cls.root = Tk() root.withdraw() frame = cls.frame = Frame(root) text = cls.text = Text(frame) text.insert('1.0', code_sample) # Need to pack for creation of code context text widget. frame.pack(side='left', fill='both', expand=1) text.pack(side='top', fill='both', expand=1) cls.editor = DummyEditwin(root, frame, text) codecontext.idleConf.userCfg = testcfg @classmethod def tearDownClass(cls): codecontext.idleConf.userCfg = usercfg cls.editor.text.delete('1.0', 'end') del cls.editor, cls.frame, cls.text cls.root.update_idletasks() cls.root.destroy() del cls.root def setUp(self): self.text.yview(0) self.cc = codecontext.CodeContext(self.editor) def tearDown(self): if self.cc.context: self.cc.context.destroy() # Explicitly call __del__ to remove scheduled scripts. self.cc.__del__() del self.cc.context, self.cc def test_init(self): eq = self.assertEqual ed = self.editor cc = self.cc eq(cc.editwin, ed) eq(cc.text, ed.text) eq(cc.textfont, ed.text['font']) self.assertIsNone(cc.context) eq(cc.info, [(0, -1, '', False)]) eq(cc.topvisible, 1) eq(self.root.tk.call('after', 'info', self.cc.t1)[1], 'timer') eq(self.root.tk.call('after', 'info', self.cc.t2)[1], 'timer') def test_del(self): self.cc.__del__() with self.assertRaises(TclError) as msg: self.root.tk.call('after', 'info', self.cc.t1) self.assertIn("doesn't exist", msg) with self.assertRaises(TclError) as msg: self.root.tk.call('after', 'info', self.cc.t2) self.assertIn("doesn't exist", msg) # For coverage on the except. Have to delete because the # above Tcl error is caught by after_cancel. del self.cc.t1, self.cc.t2 self.cc.__del__() def test_reload(self): codecontext.CodeContext.reload() self.assertEqual(self.cc.colors, {'background': 'lightgray', 'foreground': '#000000'}) self.assertEqual(self.cc.context_depth, 15) def test_toggle_code_context_event(self): eq = self.assertEqual cc = self.cc toggle = cc.toggle_code_context_event # Make sure code context is off. if cc.context: toggle() # Toggle on. eq(toggle(), 'break') self.assertIsNotNone(cc.context) eq(cc.context['font'], cc.textfont) eq(cc.context['fg'], cc.colors['foreground']) eq(cc.context['bg'], cc.colors['background']) eq(cc.context.get('1.0', 'end-1c'), '') # Toggle off. eq(toggle(), 'break') self.assertIsNone(cc.context) def test_get_context(self): eq = self.assertEqual gc = self.cc.get_context # stopline must be greater than 0. with self.assertRaises(AssertionError): gc(1, stopline=0) eq(gc(3), ([(2, 0, 'class C1():', 'class')], 0)) # Don't return comment. eq(gc(4), ([(2, 0, 'class C1():', 'class')], 0)) # Two indentation levels and no comment. eq(gc(5), ([(2, 0, 'class C1():', 'class'), (4, 4, ' def __init__(self, a, b):', 'def')], 0)) # Only one 'def' is returned, not both at the same indent level. eq(gc(10), ([(2, 0, 'class C1():', 'class'), (7, 4, ' def compare(self):', 'def'), (8, 8, ' if a > b:', 'if')], 0)) # With 'elif', also show the 'if' even though it's at the same level. eq(gc(11), ([(2, 0, 'class C1():', 'class'), (7, 4, ' def compare(self):', 'def'), (8, 8, ' if a > b:', 'if'), (10, 8, ' elif a < b:', 'elif')], 0)) # Set stop_line to not go back to first line in source code. # Return includes stop_line. eq(gc(11, stopline=2), ([(2, 0, 'class C1():', 'class'), (7, 4, ' def compare(self):', 'def'), (8, 8, ' if a > b:', 'if'), (10, 8, ' elif a < b:', 'elif')], 0)) eq(gc(11, stopline=3), ([(7, 4, ' def compare(self):', 'def'), (8, 8, ' if a > b:', 'if'), (10, 8, ' elif a < b:', 'elif')], 4)) eq(gc(11, stopline=8), ([(8, 8, ' if a > b:', 'if'), (10, 8, ' elif a < b:', 'elif')], 8)) # Set stop_indent to test indent level to stop at. eq(gc(11, stopindent=4), ([(7, 4, ' def compare(self):', 'def'), (8, 8, ' if a > b:', 'if'), (10, 8, ' elif a < b:', 'elif')], 4)) # Check that the 'if' is included. eq(gc(11, stopindent=8), ([(8, 8, ' if a > b:', 'if'), (10, 8, ' elif a < b:', 'elif')], 8)) def test_update_code_context(self): eq = self.assertEqual cc = self.cc # Ensure code context is active. if not cc.context: cc.toggle_code_context_event() # Invoke update_code_context without scrolling - nothing happens. self.assertIsNone(cc.update_code_context()) eq(cc.info, [(0, -1, '', False)]) eq(cc.topvisible, 1) # Scroll down to line 1. cc.text.yview(1) cc.update_code_context() eq(cc.info, [(0, -1, '', False)]) eq(cc.topvisible, 2) eq(cc.context.get('1.0', 'end-1c'), '') # Scroll down to line 2. cc.text.yview(2) cc.update_code_context() eq(cc.info, [(0, -1, '', False), (2, 0, 'class C1():', 'class')]) eq(cc.topvisible, 3) eq(cc.context.get('1.0', 'end-1c'), 'class C1():') # Scroll down to line 3. Since it's a comment, nothing changes. cc.text.yview(3) cc.update_code_context() eq(cc.info, [(0, -1, '', False), (2, 0, 'class C1():', 'class')]) eq(cc.topvisible, 4) eq(cc.context.get('1.0', 'end-1c'), 'class C1():') # Scroll down to line 4. cc.text.yview(4) cc.update_code_context() eq(cc.info, [(0, -1, '', False), (2, 0, 'class C1():', 'class'), (4, 4, ' def __init__(self, a, b):', 'def')]) eq(cc.topvisible, 5) eq(cc.context.get('1.0', 'end-1c'), 'class C1():\n' ' def __init__(self, a, b):') # Scroll down to line 11. Last 'def' is removed. cc.text.yview(11) cc.update_code_context() eq(cc.info, [(0, -1, '', False), (2, 0, 'class C1():', 'class'), (7, 4, ' def compare(self):', 'def'), (8, 8, ' if a > b:', 'if'), (10, 8, ' elif a < b:', 'elif')]) eq(cc.topvisible, 12) eq(cc.context.get('1.0', 'end-1c'), 'class C1():\n' ' def compare(self):\n' ' if a > b:\n' ' elif a < b:') # No scroll. No update, even though context_depth changed. cc.update_code_context() cc.context_depth = 1 eq(cc.info, [(0, -1, '', False), (2, 0, 'class C1():', 'class'), (7, 4, ' def compare(self):', 'def'), (8, 8, ' if a > b:', 'if'), (10, 8, ' elif a < b:', 'elif')]) eq(cc.topvisible, 12) eq(cc.context.get('1.0', 'end-1c'), 'class C1():\n' ' def compare(self):\n' ' if a > b:\n' ' elif a < b:') # Scroll up. cc.text.yview(5) cc.update_code_context() eq(cc.info, [(0, -1, '', False), (2, 0, 'class C1():', 'class'), (4, 4, ' def __init__(self, a, b):', 'def')]) eq(cc.topvisible, 6) # context_depth is 1. eq(cc.context.get('1.0', 'end-1c'), ' def __init__(self, a, b):') def test_jumptoline(self): eq = self.assertEqual cc = self.cc jump = cc.jumptoline if not cc.context: cc.toggle_code_context_event() # Empty context. cc.text.yview(f'{2}.0') cc.update_code_context() eq(cc.topvisible, 2) cc.context.mark_set('insert', '1.5') jump() eq(cc.topvisible, 1) # 4 lines of context showing. cc.text.yview(f'{12}.0') cc.update_code_context() eq(cc.topvisible, 12) cc.context.mark_set('insert', '3.0') jump() eq(cc.topvisible, 8) # More context lines than limit. cc.context_depth = 2 cc.text.yview(f'{12}.0') cc.update_code_context() eq(cc.topvisible, 12) cc.context.mark_set('insert', '1.0') jump() eq(cc.topvisible, 8) @mock.patch.object(codecontext.CodeContext, 'update_code_context') def test_timer_event(self, mock_update): # Ensure code context is not active. if self.cc.context: self.cc.toggle_code_context_event() self.cc.timer_event() mock_update.assert_not_called() # Activate code context. self.cc.toggle_code_context_event() self.cc.timer_event() mock_update.assert_called() def test_config_timer_event(self): eq = self.assertEqual cc = self.cc save_font = cc.text['font'] save_colors = codecontext.CodeContext.colors test_font = 'FakeFont' test_colors = {'background': '#222222', 'foreground': '#ffff00'} # Ensure code context is not active. if cc.context: cc.toggle_code_context_event() # Nothing updates on inactive code context. cc.text['font'] = test_font codecontext.CodeContext.colors = test_colors cc.config_timer_event() eq(cc.textfont, save_font) eq(cc.contextcolors, save_colors) # Activate code context, but no change to font or color. cc.toggle_code_context_event() cc.text['font'] = save_font codecontext.CodeContext.colors = save_colors cc.config_timer_event() eq(cc.textfont, save_font) eq(cc.contextcolors, save_colors) eq(cc.context['font'], save_font) eq(cc.context['background'], save_colors['background']) eq(cc.context['foreground'], save_colors['foreground']) # Active code context, change font. cc.text['font'] = test_font cc.config_timer_event() eq(cc.textfont, test_font) eq(cc.contextcolors, save_colors) eq(cc.context['font'], test_font) eq(cc.context['background'], save_colors['background']) eq(cc.context['foreground'], save_colors['foreground']) # Active code context, change color. cc.text['font'] = save_font codecontext.CodeContext.colors = test_colors cc.config_timer_event() eq(cc.textfont, save_font) eq(cc.contextcolors, test_colors) eq(cc.context['font'], save_font) eq(cc.context['background'], test_colors['background']) eq(cc.context['foreground'], test_colors['foreground']) codecontext.CodeContext.colors = save_colors cc.config_timer_event() class HelperFunctionText(unittest.TestCase): def test_get_spaces_firstword(self): get = codecontext.get_spaces_firstword test_lines = ( (' first word', (' ', 'first')), ('\tfirst word', ('\t', 'first')), (' \u19D4\u19D2: ', (' ', '\u19D4\u19D2')), ('no spaces', ('', 'no')), ('', ('', '')), ('# TEST COMMENT', ('', '')), (' (continuation)', (' ', '')) ) for line, expected_output in test_lines: self.assertEqual(get(line), expected_output) # Send the pattern in the call. self.assertEqual(get(' (continuation)', c=re.compile(r'^(\s*)([^\s]*)')), (' ', '(continuation)')) def test_get_line_info(self): eq = self.assertEqual gli = codecontext.get_line_info lines = code_sample.splitlines() # Line 1 is not a BLOCKOPENER. eq(gli(lines[0]), (codecontext.INFINITY, '', False)) # Line 2 is a BLOCKOPENER without an indent. eq(gli(lines[1]), (0, 'class C1():', 'class')) # Line 3 is not a BLOCKOPENER and does not return the indent level. eq(gli(lines[2]), (codecontext.INFINITY, ' # Class comment.', False)) # Line 4 is a BLOCKOPENER and is indented. eq(gli(lines[3]), (4, ' def __init__(self, a, b):', 'def')) # Line 8 is a different BLOCKOPENER and is indented. eq(gli(lines[7]), (8, ' if a > b:', 'if')) # Test tab. eq(gli('\tif a == b:'), (1, '\tif a == b:', 'if')) if __name__ == '__main__': unittest.main(verbosity=2)
SILENT KILLER Tool