pressing Backspace in virtual space doesn't delete innocent characters in the preceding line (PY-254)

This commit is contained in:
Dmitry Jemerov
2010-01-27 22:06:05 +03:00
parent 2b1eda9b5e
commit 7441d8938f
2 changed files with 20 additions and 2 deletions
@@ -23,8 +23,11 @@ public class PythonBackspaceHandler extends BackspaceHandlerDelegate {
if (myTargetPosition != null) {
// Remove all the following spaces before moving to targetPosition
final int offset = editor.getCaretModel().getOffset();
editor.getSelectionModel().setSelection(offset - editor.getCaretModel().getVisualPosition().column + myTargetPosition.column, offset);
EditorModificationUtil.deleteSelectedText(editor);
if (EditorModificationUtil.calcAfterLineEnd(editor) == 0) {
int delta = editor.getCaretModel().getVisualPosition().column - myTargetPosition.column;
editor.getSelectionModel().setSelection(offset - delta, offset);
EditorModificationUtil.deleteSelectedText(editor);
}
editor.getCaretModel().moveToLogicalPosition(myTargetPosition);
myTargetPosition = null;
return true;
@@ -1,6 +1,9 @@
package com.jetbrains.python;
import com.intellij.openapi.actionSystem.IdeActions;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.command.CommandProcessor;
import com.intellij.openapi.editor.LogicalPosition;
import com.intellij.openapi.util.Computable;
import com.intellij.psi.PsiFile;
import com.jetbrains.python.fixtures.PyLightFixtureTestCase;
@@ -23,6 +26,18 @@ public class PyEditingTest extends PyLightFixtureTestCase {
assertEquals("r''", doTestTyping("r", 1, '\''));
}
public void testGreedyBackspace() throws Exception { // PY-254
myFixture.configureByFile("/editing/py254.py");
myFixture.getEditor().getCaretModel().moveToLogicalPosition(new LogicalPosition(4, 8));
CommandProcessor.getInstance().executeCommand(myFixture.getProject(), new Runnable() {
public void run() {
myFixture.performEditorAction(IdeActions.ACTION_EDITOR_BACKSPACE);
}
}, "", null);
// this should not modify the text, so we can check against the same file
myFixture.checkResultByFile("/editing/py254.py", true);
}
private String doTestTyping(final String text, final int offset, final char character) {
final PsiFile file = ApplicationManager.getApplication().runWriteAction(new Computable<PsiFile>() {
public PsiFile compute() {