Commit 371f746b authored by Terry Jan Reedy's avatar Terry Jan Reedy

Merge with 3.3

parents 1424e7d6 4f133e2e
'Provides "Strip trailing whitespace" under the "Format" menu.' 'Provides "Strip trailing whitespace" under the "Format" menu.'
__author__ = "Roger D. Serwy <roger.serwy at gmail.com>"
class RstripExtension: class RstripExtension:
menudefs = [ menudefs = [
('format', [None, ('format', [None, ('Strip trailing whitespace', '<<do-rstrip>>'), ] ), ]
('Strip trailing whitespace', '<<do-rstrip>>'),
]),]
def __init__(self, editwin): def __init__(self, editwin):
self.editwin = editwin self.editwin = editwin
...@@ -20,10 +16,18 @@ class RstripExtension: ...@@ -20,10 +16,18 @@ class RstripExtension:
undo.undo_block_start() undo.undo_block_start()
end_line = int(float(text.index('end'))) + 1 end_line = int(float(text.index('end')))
for cur in range(1, end_line): for cur in range(1, end_line):
txt = text.get('%i.0' % cur, '%i.0 lineend' % cur) txt = text.get('%i.0' % cur, '%i.end' % cur)
raw = len(txt)
cut = len(txt.rstrip()) cut = len(txt.rstrip())
text.delete('%i.%i' % (cur, cut), '%i.0 lineend' % cur) # Since text.delete() marks file as changed, even if not,
# only call it when needed to actually delete something.
if cut < raw:
text.delete('%i.%i' % (cur, cut), '%i.end' % cur)
undo.undo_block_stop() undo.undo_block_stop()
if __name__ == "__main__":
import unittest
unittest.main('idlelib.idle_test.test_rstrip', verbosity=2, exit=False)
'''Mock classes that imitate idlelib modules or classes.
Attributes and methods will be added as needed for tests.
'''
from idlelib.idle_test.mock_tk import Text
class Editor:
'''Minimally imitate EditorWindow.EditorWindow class.
'''
def __init__(self, flist=None, filename=None, key=None, root=None):
self.text = Text()
self.undo = UndoDelegator()
def get_selection_indices(self):
first = self.text.index('1.0')
last = self.text.index('end')
return first, last
class UndoDelegator:
'''Minimally imitate UndoDelegator,UndoDelegator class.
'''
# A real undo block is only needed for user interaction.
def undo_block_start(*args):
pass
def undo_block_stop(*args):
pass
import unittest
import idlelib.RstripExtension as rs
from idlelib.idle_test.mock_idle import Editor
class rstripTest(unittest.TestCase):
def test_rstrip_line(self):
editor = Editor()
text = editor.text
do_rstrip = rs.RstripExtension(editor).do_rstrip
do_rstrip()
self.assertEqual(text.get('1.0', 'insert'), '')
text.insert('1.0', ' ')
do_rstrip()
self.assertEqual(text.get('1.0', 'insert'), '')
text.insert('1.0', ' \n')
do_rstrip()
self.assertEqual(text.get('1.0', 'insert'), '\n')
def test_rstrip_multiple(self):
editor = Editor()
# Uncomment following to verify that test passes with real widgets.
## from idlelib.EditorWindow import EditorWindow as Editor
## from tkinter import Tk
## editor = Editor(root=Tk())
text = editor.text
do_rstrip = rs.RstripExtension(editor).do_rstrip
original = (
"Line with an ending tab \n"
"Line ending in 5 spaces \n"
"Linewithnospaces\n"
" indented line\n"
" indented line with trailing space \n"
" ")
stripped = (
"Line with an ending tab\n"
"Line ending in 5 spaces\n"
"Linewithnospaces\n"
" indented line\n"
" indented line with trailing space\n")
text.insert('1.0', original)
do_rstrip()
self.assertEqual(text.get('1.0', 'insert'), stripped)
if __name__ == '__main__':
unittest.main(verbosity=2, exit=False)
...@@ -1339,6 +1339,7 @@ Aaron Watters ...@@ -1339,6 +1339,7 @@ Aaron Watters
Henrik Weber Henrik Weber
Corran Webster Corran Webster
Glyn Webster Glyn Webster
Phil Webster
Stefan Wehr Stefan Wehr
Zack Weinberg Zack Weinberg
Bob Weiner Bob Weiner
......
...@@ -601,6 +601,10 @@ C-API ...@@ -601,6 +601,10 @@ C-API
IDLE IDLE
---- ----
- Issue #18279: Format - Strip trailing whitespace no longer marks a file as
changed when it has not been changed. This fix followed the addition of a
test file originally written by Phil Webster (the issue's main goal).
- Issue #7136: In the Idle File menu, "New Window" is renamed "New File". - Issue #7136: In the Idle File menu, "New Window" is renamed "New File".
Patch by Tal Einat, Roget Serwy, and Todd Rovito. Patch by Tal Einat, Roget Serwy, and Todd Rovito.
...@@ -617,6 +621,7 @@ IDLE ...@@ -617,6 +621,7 @@ IDLE
- Issue #15392: Create a unittest framework for IDLE. - Issue #15392: Create a unittest framework for IDLE.
Initial patch by Rajagopalasarma Jayakrishnan. Initial patch by Rajagopalasarma Jayakrishnan.
See Lib/idlelib/idle_test/README.txt for how to run Idle tests.
- Issue #14146: Highlight source line while debugging on Windows. - Issue #14146: Highlight source line while debugging on Windows.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment