def test_copy_with_prompts(self): sidebar = self.shell.shell_sidebar text = self.shell.text first_line = get_end_linenumber(text) self.do_input(dedent('''\ if True: print(1) ''')) yield text.tag_add('sel', f'{first_line}.3', 'end-1c') selected_text = text.get('sel.first', 'sel.last') self.assertTrue(selected_text.startswith('True:\n')) selected_lines_text = text.get('sel.first linestart', 'sel.last') selected_lines = selected_lines_text.split('\n') # Expect a block of input, a single output line, and a new prompt expected_prompts = \ ['>>>'] + ['...'] * (len(selected_lines) - 3) + [None, '>>>'] selected_text_with_prompts = '\n'.join( line if prompt is None else prompt + ' ' + line for prompt, line in zip(expected_prompts, selected_lines, strict=True) ) + '\n' text.event_generate('<<copy-with-prompts>>') self.addCleanup(text.clipboard_clear) copied_text = text.clipboard_get() self.assertEqual(copied_text, selected_text_with_prompts)
def test_copy(self): sidebar = self.shell.shell_sidebar text = self.shell.text first_line = get_end_linenumber(text) self.do_input(dedent('''\ if True: print(1) ''')) yield text.tag_add('sel', f'{first_line}.0', 'end-1c') selected_text = text.get('sel.first', 'sel.last') self.assertTrue(selected_text.startswith('if True:\n')) self.assertIn('\n1\n', selected_text) text.event_generate('<<copy>>') self.addCleanup(text.clipboard_clear) copied_text = text.clipboard_get() self.assertEqual(copied_text, selected_text)
def test_mousewheel(self): sidebar = self.shell.shell_sidebar text = self.shell.text # Enter a 100-line string to scroll the shell screen down. self.do_input('x = """' + '\n'*100 + '"""\n') yield self.assertGreater(get_lineno(text, '@0,0'), 1) last_lineno = get_end_linenumber(text) self.assertIsNotNone(text.dlineinfo(text.index(f'{last_lineno}.0'))) # Scroll up using the <MouseWheel> event. # The meaning delta is platform-dependant. delta = -1 if sys.platform == 'darwin' else 120 sidebar.canvas.event_generate('<MouseWheel>', x=0, y=0, delta=delta) yield self.assertIsNone(text.dlineinfo(text.index(f'{last_lineno}.0'))) # Scroll back down using the <Button-5> event. sidebar.canvas.event_generate('<Button-5>', x=0, y=0) yield self.assertIsNotNone(text.dlineinfo(text.index(f'{last_lineno}.0')))