diff --git a/Lib/idlelib/RstripExtension.py b/Lib/idlelib/RstripExtension.py
index 19e35d4..2ce3c7e 100644
--- a/Lib/idlelib/RstripExtension.py
+++ b/Lib/idlelib/RstripExtension.py
@@ -1,13 +1,9 @@
 'Provides "Strip trailing whitespace" under the "Format" menu.'
 
-__author__ = "Roger D. Serwy <roger.serwy at gmail.com>"
-
 class RstripExtension:
 
     menudefs = [
-        ('format', [None,
-               ('Strip trailing whitespace', '<<do-rstrip>>'),
-       ]),]
+        ('format', [None, ('Strip trailing whitespace', '<<do-rstrip>>'), ] ), ]
 
     def __init__(self, editwin):
         self.editwin = editwin
@@ -20,10 +16,18 @@
 
         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):
-            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())
-            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()
+
+if __name__ == "__main__":
+    import unittest
+    unittest.main('idlelib.idle_test.test_rstrip', verbosity=2, exit=False)
diff --git a/Lib/idlelib/idle_test/mock_idle.py b/Lib/idlelib/idle_test/mock_idle.py
new file mode 100644
index 0000000..54834de
--- /dev/null
+++ b/Lib/idlelib/idle_test/mock_idle.py
@@ -0,0 +1,27 @@
+'''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(object):
+    '''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(object):
+    '''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
diff --git a/Lib/idlelib/idle_test/test_rstrip.py b/Lib/idlelib/idle_test/test_rstrip.py
new file mode 100644
index 0000000..1c90b93
--- /dev/null
+++ b/Lib/idlelib/idle_test/test_rstrip.py
@@ -0,0 +1,49 @@
+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)
