blob: 9373480ac15c64257fabf380cb1032d4ee0dd5f0 [file] [log] [blame]
/*
* Copyright 2000-2014 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.intellij.openapi.editor.actions;
import com.intellij.openapi.editor.*;
import com.intellij.openapi.editor.ex.EditorEx;
import com.intellij.openapi.editor.impl.CaretModelImpl;
import com.intellij.openapi.editor.impl.EditorImpl;
import com.intellij.openapi.fileEditor.FileDocumentManager;
import com.intellij.openapi.ide.CopyPasteManager;
import com.intellij.openapi.ide.KillRingTransferable;
import com.intellij.openapi.util.Disposer;
import com.intellij.testFramework.LightPlatformCodeInsightTestCase;
import org.jetbrains.annotations.NotNull;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.io.IOException;
/**
* @author Denis Zhdanov
* @since 04/19/2011
*/
public class KillToWordEndActionTest extends LightPlatformCodeInsightTestCase {
public void testAtWordStart() throws IOException {
doTest(
"this is a <caret>string",
"this is a <caret>"
);
}
public void testInTheMiddle() throws IOException {
doTest(
"th<caret>is is a string",
"th<caret> is a string"
);
}
public void testAtWordEnd() throws IOException {
doTest(
"this is<caret> a string",
"this is<caret> string"
);
}
public void testAtWhiteSpaceBetweenWords() throws IOException {
doTest(
"this <caret> is a string",
"this <caret> a string"
);
}
public void testAfterLastWordOnTheLineEnd() throws IOException {
doTest(
"this is the first string<caret> \n" +
"this is the second string",
"this is the first string<caret>this is the second string"
);
}
public void testAfterLastWord() throws IOException {
doTest(
"this is a string<caret>",
"this is a string<caret>"
);
}
public void testAfterLastWordBeforeWhiteSpace() throws IOException {
doTest(
"this is a string<caret> ",
"this is a string<caret>"
);
}
public void testAtWhiteSpaceAtLineEnd() throws IOException {
doTest(
"this is the first string <caret> \n" +
"this is the second string",
"this is the first string <caret>this is the second string"
);
}
private void doTest(@NotNull String before, @NotNull String after) throws IOException {
configureFromFileText(getTestName(false) + ".txt", before);
killToWordEnd();
checkResultByText(after);
}
public void testSubsequentKillsInterleavedByCaretMove() throws Exception {
String text = "<caret>first second third";
configureFromFileText(getTestName(false) + ".txt", text);
killToWordEnd();
checkResultByText(" second third");
getEditor().getCaretModel().moveCaretRelatively(1, 0, false, false, false);
getEditor().getCaretModel().moveCaretRelatively(-1, 0, false, false, false);
killToWordEnd();
Object string = getContents();
assertEquals(" second", string);
}
public void testSubsequentKills() throws Exception {
String text = "<caret>first second third";
configureFromFileText(getTestName(false) + ".txt", text);
killToWordEnd();
killToWordEnd();
checkResultByText(" third");
Object string = getContents();
assertEquals("first second", string);
}
public void testSubsequentKillsInterruptedBySave() throws Exception {
String text = "public class ParentCopy {\n" +
" public Insets getBorderInsets(<caret>Component c) {\n" +
" }\n" +
" }";
configureFromFileText(getTestName(false) + ".java", text);
cutToLineEnd();
cutToLineEnd();
final FileDocumentManager manager = FileDocumentManager.getInstance();
manager.saveAllDocuments();
cutToLineEnd();
cutToLineEnd();
checkResultByText("public class ParentCopy {\n" +
" public Insets getBorderInsets( }");
Object string = getContents();
assertEquals("Component c) {\n }\n", string);
}
public void testSubsequentKillsWithFolding() throws Exception {
String text = "public class ParentCopy {\n" +
" public Insets getBorderInsets(<caret>Component c) {\n" +
" }\n" +
" }";
configureFromFileText(getTestName(false) + ".java", text);
final FoldingModel model = myEditor.getFoldingModel();
model.runBatchFoldingOperation(new Runnable() {
@Override
public void run() {
final FoldRegion foldRegion = model.addFoldRegion(70, 90, "");
assertNotNull(foldRegion);
foldRegion.setExpanded(false);
assertFalse(foldRegion.isExpanded());
}
});
cutToLineEnd();
cutToLineEnd();
model.runBatchFoldingOperationDoNotCollapseCaret(new Runnable() {
@Override
public void run() {
final FoldRegion[] regions = model.getAllFoldRegions();
for (FoldRegion region : regions) {
assertNotNull(region);
region.setExpanded(true);
}
}
});
cutToLineEnd();
cutToLineEnd();
checkResultByText("public class ParentCopy {\n" +
" public Insets getBorderInsets( }");
Object string = getContents();
assertEquals("Component c) {\n }\n", string);
}
public void testDoubleEditors() throws Exception {
String text = "<caret>first second third";
configureFromFileText(getTestName(false) + ".txt", text);
final Document document = myEditor.getDocument();
EditorFactory editorFactory = EditorFactory.getInstance();
Editor otherEditor = editorFactory.createEditor(document, ourProject);
try {
otherEditor.getCaretModel().moveToOffset(document.getTextLength() - 1);
killToWordEnd();
killToWordEnd();
checkResultByText(" third");
Object string = getContents();
assertEquals("first second", string);
}
finally {
editorFactory.releaseEditor(otherEditor);
}
}
public void testKillsInterruptedByDelete() throws Exception {
String text = "public class ParentCopy {\n" +
" public Insets getBorderInsets(<caret>Component c) {\n" +
" }\n" +
" }";
configureFromFileText(getTestName(false) + ".java", text);
cutToLineEnd();
deleteLine();
cutToLineEnd();
cutToLineEnd();
checkResultByText("public class ParentCopy {\n" +
" }");
Object string = getContents();
assertEquals("\n" +
" }", string);
}
public void testKillsInterruptedByDeleteLine() throws Exception {
String text = "public class ParentCopy {\n" +
" public Insets getBorderInsets(<caret>Component c) {\n" +
" }\n" +
" }";
configureFromFileText(getTestName(false) + ".java", text);
cutToLineEnd();
deleteLine();
cutToLineEnd();
cutToLineEnd();
checkResultByText("public class ParentCopy {\n" +
" }");
Object string = getContents();
assertEquals("\n" +
" }", string);
}
public void testKillsInterruptedByDeleteLineEnd() throws Exception {
String text = "public class ParentCopy {\n" +
" public Insets getBorderInsets(<caret>Component c) {\n" +
" }\n" +
" }";
configureFromFileText(getTestName(false) + ".java", text);
cutToLineEnd();
executeAction("EditorDeleteToLineEnd");
cutToLineEnd();
cutToLineEnd();
checkResultByText("public class ParentCopy {\n" +
" public Insets getBorderInsets( }");
Object string = getContents();
assertEquals(" }\n", string);
}
public void testKillsInterruptedByDeleteWord() throws Exception {
String text = "public class ParentCopy {\n" +
" public Insets getBorderInsets(<caret>Component c) {\n" +
" }\n" +
" }";
configureFromFileText(getTestName(false) + ".java", text);
cutToLineEnd();
executeAction("EditorDeleteToWordEnd");
cutToLineEnd();
cutToLineEnd();
checkResultByText("public class ParentCopy {\n" +
" public Insets getBorderInsets( }");
Object string = getContents();
assertEquals("}\n", string);
}
public void testKillsInterruptedBySplit() throws Exception {
String text = "public class ParentCopy {\n" +
" public Insets getBorderInsets(<caret>Component c) {\n" +
" }\n" +
" }";
configureFromFileText(getTestName(false) + ".java", text);
cutToLineEnd();
executeAction("EditorSplitLine");
cutToLineEnd();
cutToLineEnd();
checkResultByText("public class ParentCopy {\n" +
" public Insets getBorderInsets( }\n" +
" }");
Object string = getContents();
assertEquals("\n" +
" \n", string);
}
public void testKillsInterruptedByStartNewLine() throws Exception {
String text = "public class ParentCopy {\n" +
" public Insets getBorderInsets(<caret>Component c) {\n" +
" }\n" +
" }";
configureFromFileText(getTestName(false) + ".java", text);
cutToLineEnd();
executeAction("EditorStartNewLine");
cutToLineEnd();
cutToLineEnd();
checkResultByText("public class ParentCopy {\n" +
" public Insets getBorderInsets(\n" +
" \n" +
" }");
Object string = getContents();
assertEquals("\n" +
" }", string);
}
private static String getContents() throws UnsupportedFlavorException, IOException {
Transferable contents = CopyPasteManager.getInstance().getContents();
assertTrue(contents instanceof KillRingTransferable);
return (String)contents.getTransferData(DataFlavor.stringFlavor);
}
}