Lines Matching refs:self

24     def __init__(self, text):
25 self.text = text
26 self.text_frame = self.text.master
27 self.per = Percolator(text)
28 self.undo = Delegator()
29 self.per.insertfilter(self.undo)
31 def setvar(self, name, value):
34 def getlineno(self, index):
35 return int(float(self.text.index(index)))
64 def setUp(self):
65 self.linenumber = idlelib.sidebar.LineNumbers(self.editwin)
67 self.highlight_cfg = {"background": '#abcdef',
72 return self.highlight_cfg
77 self.addCleanup(GetHighlight_patcher.stop)
79 self.font_override = 'TkFixedFont'
81 return self.font_override
85 self.addCleanup(GetFont_patcher.stop)
87 def tearDown(self):
88 self.text.delete('1.0', 'end')
90 def get_selection(self):
91 return tuple(map(str, self.text.tag_ranges('sel')))
93 def get_line_screen_position(self, line):
94 bbox = self.linenumber.sidebar_text.bbox(f'{line}.end -1c')
99 def assert_state_disabled(self):
100 state = self.linenumber.sidebar_text.config()['state']
101 self.assertEqual(state[-1], tk.DISABLED)
103 def get_sidebar_text_contents(self):
104 return self.linenumber.sidebar_text.get('1.0', tk.END)
106 def assert_sidebar_n_lines(self, n_lines):
108 self.assertEqual(self.get_sidebar_text_contents(), expected)
110 def assert_text_equals(self, expected):
111 return self.assertEqual(self.text.get('1.0', 'end'), expected)
113 def test_init_empty(self):
114 self.assert_sidebar_n_lines(1)
116 def test_init_not_empty(self):
117 self.text.insert('insert', 'foo bar\n'*3)
118 self.assert_text_equals('foo bar\n'*3 + '\n')
119 self.assert_sidebar_n_lines(4)
121 def test_toggle_linenumbering(self):
122 self.assertEqual(self.linenumber.is_shown, False)
123 self.linenumber.show_sidebar()
124 self.assertEqual(self.linenumber.is_shown, True)
125 self.linenumber.hide_sidebar()
126 self.assertEqual(self.linenumber.is_shown, False)
127 self.linenumber.hide_sidebar()
128 self.assertEqual(self.linenumber.is_shown, False)
129 self.linenumber.show_sidebar()
130 self.assertEqual(self.linenumber.is_shown, True)
131 self.linenumber.show_sidebar()
132 self.assertEqual(self.linenumber.is_shown, True)
134 def test_insert(self):
135 self.text.insert('insert', 'foobar')
136 self.assert_text_equals('foobar\n')
137 self.assert_sidebar_n_lines(1)
138 self.assert_state_disabled()
140 self.text.insert('insert', '\nfoo')
141 self.assert_text_equals('foobar\nfoo\n')
142 self.assert_sidebar_n_lines(2)
143 self.assert_state_disabled()
145 self.text.insert('insert', 'hello\n'*2)
146 self.assert_text_equals('foobar\nfoohello\nhello\n\n')
147 self.assert_sidebar_n_lines(4)
148 self.assert_state_disabled()
150 self.text.insert('insert', '\nworld')
151 self.assert_text_equals('foobar\nfoohello\nhello\n\nworld\n')
152 self.assert_sidebar_n_lines(5)
153 self.assert_state_disabled()
155 def test_delete(self):
156 self.text.insert('insert', 'foobar')
157 self.assert_text_equals('foobar\n')
158 self.text.delete('1.1', '1.3')
159 self.assert_text_equals('fbar\n')
160 self.assert_sidebar_n_lines(1)
161 self.assert_state_disabled()
163 self.text.insert('insert', 'foo\n'*2)
164 self.assert_text_equals('fbarfoo\nfoo\n\n')
165 self.assert_sidebar_n_lines(3)
166 self.assert_state_disabled()
169 self.text.delete('2.0', '2.end')
170 self.assert_text_equals('fbarfoo\n\n\n')
171 self.assert_sidebar_n_lines(3)
172 self.assert_state_disabled()
174 self.text.delete('1.3', 'end')
175 self.assert_text_equals('fba\n')
176 self.assert_sidebar_n_lines(1)
177 self.assert_state_disabled()
180 self.text.delete('1.0', 'end')
181 self.assert_text_equals('\n')
182 self.assert_sidebar_n_lines(1)
183 self.assert_state_disabled()
185 def test_sidebar_text_width(self):
191 return self.linenumber.sidebar_text.config()['width'][-1]
193 self.assert_sidebar_n_lines(1)
194 self.assertEqual(get_width(), 1)
196 self.text.insert('insert', 'foo')
197 self.assert_sidebar_n_lines(1)
198 self.assertEqual(get_width(), 1)
200 self.text.insert('insert', 'foo\n'*8)
201 self.assert_sidebar_n_lines(9)
202 self.assertEqual(get_width(), 1)
204 self.text.insert('insert', 'foo\n')
205 self.assert_sidebar_n_lines(10)
206 self.assertEqual(get_width(), 2)
208 self.text.insert('insert', 'foo\n')
209 self.assert_sidebar_n_lines(11)
210 self.assertEqual(get_width(), 2)
212 self.text.delete('insert -1l linestart', 'insert linestart')
213 self.assert_sidebar_n_lines(10)
214 self.assertEqual(get_width(), 2)
216 self.text.delete('insert -1l linestart', 'insert linestart')
217 self.assert_sidebar_n_lines(9)
218 self.assertEqual(get_width(), 1)
220 self.text.insert('insert', 'foo\n'*90)
221 self.assert_sidebar_n_lines(99)
222 self.assertEqual(get_width(), 2)
224 self.text.insert('insert', 'foo\n')
225 self.assert_sidebar_n_lines(100)
226 self.assertEqual(get_width(), 3)
228 self.text.insert('insert', 'foo\n')
229 self.assert_sidebar_n_lines(101)
230 self.assertEqual(get_width(), 3)
232 self.text.delete('insert -1l linestart', 'insert linestart')
233 self.assert_sidebar_n_lines(100)
234 self.assertEqual(get_width(), 3)
236 self.text.delete('insert -1l linestart', 'insert linestart')
237 self.assert_sidebar_n_lines(99)
238 self.assertEqual(get_width(), 2)
240 self.text.delete('50.0 -1c', 'end -1c')
241 self.assert_sidebar_n_lines(49)
242 self.assertEqual(get_width(), 2)
244 self.text.delete('5.0 -1c', 'end -1c')
245 self.assert_sidebar_n_lines(4)
246 self.assertEqual(get_width(), 1)
249 self.text.delete('1.0', 'end -1c')
250 self.assert_sidebar_n_lines(1)
251 self.assertEqual(get_width(), 1)
261 def test_click_selection(self):
262 self.linenumber.show_sidebar()
263 self.text.insert('1.0', 'one\ntwo\nthree\nfour\n')
264 self.root.update()
267 x, y = self.get_line_screen_position(2)
268 self.linenumber.sidebar_text.event_generate('<Button-1>', x=x, y=y)
269 self.linenumber.sidebar_text.update()
270 self.root.update()
272 self.assertEqual(self.get_selection(), ('2.0', '3.0'))
274 def simulate_drag(self, start_line, end_line):
275 start_x, start_y = self.get_line_screen_position(start_line)
276 end_x, end_y = self.get_line_screen_position(end_line)
278 self.linenumber.sidebar_text.event_generate('<Button-1>',
280 self.root.update()
292 self.linenumber.sidebar_text.event_generate('<B1-Motion>', x=x, y=y)
293 self.root.update()
295 self.linenumber.sidebar_text.event_generate('<ButtonRelease-1>',
297 self.root.update()
300 def test_drag_selection_down(self):
301 self.linenumber.show_sidebar()
302 self.text.insert('1.0', 'one\ntwo\nthree\nfour\nfive\n')
303 self.root.update()
306 self.simulate_drag(2, 4)
307 self.assertEqual(self.get_selection(), ('2.0', '5.0'))
310 def test_drag_selection_up(self):
311 self.linenumber.show_sidebar()
312 self.text.insert('1.0', 'one\ntwo\nthree\nfour\nfive\n')
313 self.root.update()
316 self.simulate_drag(4, 2)
317 self.assertEqual(self.get_selection(), ('2.0', '5.0'))
319 def test_scroll(self):
320 self.linenumber.show_sidebar()
321 self.text.insert('1.0', 'line\n' * 100)
322 self.root.update()
325 self.text.yview_scroll(10, 'unit')
326 self.root.update()
327 self.assertEqual(self.text.index('@0,0'), '11.0')
328 self.assertEqual(self.linenumber.sidebar_text.index('@0,0'), '11.0')
333 self.linenumber.sidebar_text.event_generate('<MouseWheel>',
336 self.root.update()
337 self.assertNotEqual(self.text.index('@0,0'), '11.0')
338 self.assertNotEqual(self.linenumber.sidebar_text.index('@0,0'), '11.0')
340 def test_font(self):
341 ln = self.linenumber
345 self.assertNotEqual(orig_font, test_font)
350 self.font_override = test_font
356 self.assertEqual(ln.sidebar_text['font'], test_font)
359 self.font_override = orig_font
361 self.assertEqual(ln.sidebar_text['font'], orig_font)
363 def test_highlight_colors(self):
364 ln = self.linenumber
366 orig_colors = dict(self.highlight_cfg)
370 self.assertEqual(ln.sidebar_text['background'], colors['background'])
371 self.assertEqual(ln.sidebar_text['foreground'], colors['foreground'])
376 self.highlight_cfg = test_colors
389 self.highlight_cfg = orig_colors
439 def setUp(self):
444 self._saved_stdout = None
445 if sys.stdout != self.shell.stdout:
446 self._saved_stdout = sys.stdout
447 sys.stdout = self.shell.stdout
449 self.reset_shell()
451 def tearDown(self):
452 if self._saved_stdout is not None:
453 sys.stdout = self._saved_stdout
455 def get_sidebar_lines(self):
456 canvas = self.shell.shell_sidebar.canvas
462 line_y_coords = self.get_shell_line_y_coords()
465 def assert_sidebar_lines_end_with(self, expected_lines):
466 self.shell.shell_sidebar.update_sidebar()
467 self.assertEqual(
468 self.get_sidebar_lines()[-len(expected_lines):],
472 def get_shell_line_y_coords(self):
473 text = self.shell.text
483 def get_sidebar_line_y_coords(self):
484 canvas = self.shell.shell_sidebar.canvas
489 def assert_sidebar_lines_synced(self):
490 self.assertLessEqual(
491 set(self.get_sidebar_line_y_coords()),
492 set(self.get_shell_line_y_coords()),
495 def do_input(self, input):
496 shell = self.shell
503 def test_initial_state(self):
504 sidebar_lines = self.get_sidebar_lines()
505 self.assertEqual(
509 self.assert_sidebar_lines_synced()
512 def test_single_empty_input(self):
513 self.do_input('\n')
515 self.assert_sidebar_lines_end_with(['>>>', '>>>'])
518 def test_single_line_statement(self):
519 self.do_input('1\n')
521 self.assert_sidebar_lines_end_with(['>>>', None, '>>>'])
524 def test_multi_line_statement(self):
526 self.do_input(dedent('''\
532 self.assert_sidebar_lines_end_with([
542 def test_single_long_line_wraps(self):
543 self.do_input('1' * 200 + '\n')
545 self.assert_sidebar_lines_end_with(['>>>', None, '>>>'])
546 self.assert_sidebar_lines_synced()
549 def test_squeeze_multi_line_output(self):
550 shell = self.shell
553 self.do_input('print("a\\nb\\nc")\n')
555 self.assert_sidebar_lines_end_with(['>>>', None, None, None, '>>>'])
560 self.assert_sidebar_lines_end_with(['>>>', None, '>>>'])
561 self.assert_sidebar_lines_synced()
565 self.assert_sidebar_lines_end_with(['>>>', None, None, None, '>>>'])
566 self.assert_sidebar_lines_synced()
569 def test_interrupt_recall_undo_redo(self):
570 text = self.shell.text
572 initial_sidebar_lines = self.get_sidebar_lines()
574 self.do_input(dedent('''\
579 self.assert_sidebar_lines_end_with(['>>>', '...', '...'])
580 with_block_sidebar_lines = self.get_sidebar_lines()
581 self.assertNotEqual(with_block_sidebar_lines, initial_sidebar_lines)
586 self.assert_sidebar_lines_end_with(['>>>', '...', '...', None, '>>>'])
592 self.assert_sidebar_lines_end_with(['>>>', '...', None, '>>>'])
601 self.assert_sidebar_lines_end_with(['>>>'])
605 self.assert_sidebar_lines_end_with(['>>>', '...'])
610 self.assert_sidebar_lines_end_with(
615 def test_very_long_wrapped_line(self):
617 swap_attr(self.shell, 'squeezer', None):
618 self.do_input('x = ' + '1'*10_000 + '\n')
620 self.assertEqual(self.get_sidebar_lines(), ['>>>'])
622 def test_font(self):
623 sidebar = self.shell.shell_sidebar
635 self.addCleanup(cleanup)
641 self.assertEqual(len(fonts), 1)
644 self.assertNotEqual(get_sidebar_font(), test_font)
646 self.assertEqual(get_sidebar_font(), test_font)
648 def test_highlight_colors(self):
649 sidebar = self.shell.shell_sidebar
665 self.addCleanup(cleanup)
671 self.assertEqual(len(fgs), 1)
676 self.assertNotEqual(get_sidebar_colors(), test_colors)
678 self.assertEqual(get_sidebar_colors(), test_colors)
681 def test_mousewheel(self):
682 sidebar = self.shell.shell_sidebar
683 text = self.shell.text
686 self.do_input('x = """' + '\n'*100 + '"""\n')
688 self.assertGreater(get_lineno(text, '@0,0'), 1)
691 self.assertIsNotNone(text.dlineinfo(text.index(f'{last_lineno}.0')))
699 self.assertIsNone(text.dlineinfo(text.index(f'{last_lineno}.0')))
704 self.assertIsNotNone(text.dlineinfo(text.index(f'{last_lineno}.0')))
707 def test_copy(self):
708 sidebar = self.shell.shell_sidebar
709 text = self.shell.text
713 self.do_input(dedent('''\
722 self.assertTrue(selected_text.startswith('if True:\n'))
723 self.assertIn('\n1\n', selected_text)
726 self.addCleanup(text.clipboard_clear)
729 self.assertEqual(copied_text, selected_text)
732 def test_copy_with_prompts(self):
733 sidebar = self.shell.shell_sidebar
734 text = self.shell.text
737 self.do_input(dedent('''\
746 self.assertTrue(selected_text.startswith('True:\n'))
762 self.addCleanup(text.clipboard_clear)
765 self.assertEqual(copied_text, selected_text_with_prompts)