From aeb7b075c6182d43ad6cb78ad3da51d2f0b0cb7a Mon Sep 17 00:00:00 2001 From: Ekaterina Tuzova Date: Tue, 12 Feb 2013 16:46:45 +0400 Subject: [PATCH] use the proper caret offset in case of selection. Do not overindent when replacing selection PY-8744 Smart indent pasted lines doesn't replace selection when pasting multi-line code --- .../com/jetbrains/python/editor/PythonCopyPasteProcessor.java | 2 +- python/testData/copyPaste/ReplaceSelection.after.py | 4 ++++ python/testData/copyPaste/ReplaceSelection.dst.py | 4 ++++ python/testData/copyPaste/ReplaceSelection.src.py | 3 +++ python/testSrc/com/jetbrains/python/PyCopyPasteTest.java | 4 ++++ 5 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 python/testData/copyPaste/ReplaceSelection.after.py create mode 100644 python/testData/copyPaste/ReplaceSelection.dst.py create mode 100644 python/testData/copyPaste/ReplaceSelection.src.py diff --git a/python/src/com/jetbrains/python/editor/PythonCopyPasteProcessor.java b/python/src/com/jetbrains/python/editor/PythonCopyPasteProcessor.java index c04dd26ad042..c1bfba61af7b 100644 --- a/python/src/com/jetbrains/python/editor/PythonCopyPasteProcessor.java +++ b/python/src/com/jetbrains/python/editor/PythonCopyPasteProcessor.java @@ -58,7 +58,7 @@ public class PythonCopyPasteProcessor implements CopyPastePreProcessor { final int line = document.getLineNumber(selectionModel.getSelectionStart()); final int lineOffset = getLineStartSafeOffset(document, line); final PsiElement ws = file.findElementAt(lineOffset); - int offset = ws instanceof PsiWhiteSpace? ws.getTextRange().getEndOffset() : caretOffset; + int offset = ws instanceof PsiWhiteSpace? ws.getTextRange().getEndOffset() : selectionModel.getSelectionStart(); if (text.equals(selectionModel.getSelectedText())) return text; caretModel.moveToOffset(offset); selectionModel.setSelection(offset, selectionModel.getSelectionEnd()); diff --git a/python/testData/copyPaste/ReplaceSelection.after.py b/python/testData/copyPaste/ReplaceSelection.after.py new file mode 100644 index 000000000000..503f64c1b012 --- /dev/null +++ b/python/testData/copyPaste/ReplaceSelection.after.py @@ -0,0 +1,4 @@ +a = 1 +b = 1 +a = 1 +b = 1 diff --git a/python/testData/copyPaste/ReplaceSelection.dst.py b/python/testData/copyPaste/ReplaceSelection.dst.py new file mode 100644 index 000000000000..c744cd35f678 --- /dev/null +++ b/python/testData/copyPaste/ReplaceSelection.dst.py @@ -0,0 +1,4 @@ +a = 1 +b = 1 +c = 1 + \ No newline at end of file diff --git a/python/testData/copyPaste/ReplaceSelection.src.py b/python/testData/copyPaste/ReplaceSelection.src.py new file mode 100644 index 000000000000..d054631bf997 --- /dev/null +++ b/python/testData/copyPaste/ReplaceSelection.src.py @@ -0,0 +1,3 @@ +a = 1 +b = 1 +c = 1 diff --git a/python/testSrc/com/jetbrains/python/PyCopyPasteTest.java b/python/testSrc/com/jetbrains/python/PyCopyPasteTest.java index 4f0887ad1e3d..2ccc5910f558 100644 --- a/python/testSrc/com/jetbrains/python/PyCopyPasteTest.java +++ b/python/testSrc/com/jetbrains/python/PyCopyPasteTest.java @@ -263,6 +263,10 @@ public class PyCopyPasteTest extends PyTestCase { doTest(); } + public void testReplaceSelection() { //PY-8744 + doTest(); + } + private void doTest() { String name = getTestName(false);