diff --git a/java/java-tests/testSrc/com/intellij/java/todo/JavaMultiLineTodoTest.java b/java/java-tests/testSrc/com/intellij/java/todo/JavaMultiLineTodoTest.java index 9a9038b7b47a..c94f01eb57fc 100644 --- a/java/java-tests/testSrc/com/intellij/java/todo/JavaMultiLineTodoTest.java +++ b/java/java-tests/testSrc/com/intellij/java/todo/JavaMultiLineTodoTest.java @@ -1,21 +1,10 @@ // Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. package com.intellij.java.todo; -import com.intellij.codeInsight.daemon.LightDaemonAnalyzerTestCase; -import com.intellij.codeInsight.daemon.impl.HighlightInfo; -import com.intellij.codeInsight.daemon.impl.HighlightInfoType; -import com.intellij.openapi.command.WriteCommandAction; -import com.intellij.openapi.editor.Document; -import com.intellij.openapi.editor.impl.DocumentImpl; -import com.intellij.openapi.util.Segment; -import com.intellij.openapi.util.TextRange; -import com.intellij.testFramework.EditorTestUtil; +import com.intellij.codeInsight.daemon.todo.TodoItemsTestCase; +import com.intellij.ide.highlighter.JavaFileType; -import java.util.ArrayList; -import java.util.List; -import java.util.stream.Collectors; - -public class JavaMultiLineTodoTest extends LightDaemonAnalyzerTestCase { +public class JavaMultiLineTodoTest extends TodoItemsTestCase { public void testSuccessiveLineComments() { testTodos("// [TODO first line]\n" + "// [second line]"); @@ -67,65 +56,8 @@ public class JavaMultiLineTodoTest extends LightDaemonAnalyzerTestCase { "}"); } - private void testTodos(String text) { - configureFromFileText("Foo.java", text); - EditorTestUtil.setEditorVisibleSize(myEditor, 1000, 1000); // set visible area for highlighting - List expectedTodoRanges = extractExpectedTodoRanges(myEditor.getDocument()); - List highlightInfos = doHighlighting(); - List actualTodoRanges = getActualTodoRanges(highlightInfos); - assertTodoRanges(expectedTodoRanges, actualTodoRanges); - } - - private void checkTodos(String text) { - DocumentImpl document = new DocumentImpl(text); - List expectedTodoRanges = extractExpectedTodoRanges(document); - List highlightInfos = doHighlighting(); - checkResultByText(document.getText()); - List actualTodoRanges = getActualTodoRanges(highlightInfos); - assertTodoRanges(expectedTodoRanges, actualTodoRanges); - } - - private static List extractExpectedTodoRanges(Document document) { - ArrayList result = new ArrayList<>(); - int offset = 0; - int startPos; - while ((startPos = document.getText().indexOf('[', offset)) != -1) { - int finalStartPos = startPos; - WriteCommandAction.runWriteCommandAction(ourProject, () -> document.deleteString(finalStartPos, finalStartPos + 1)); - int endPos = document.getText().indexOf(']', startPos); - if (endPos == -1) break; - WriteCommandAction.runWriteCommandAction(ourProject, () -> document.deleteString(endPos, endPos + 1)); - result.add(new TextRange(startPos, endPos)); - } - return result; - } - - private static List getActualTodoRanges(List highlightInfos) { - return highlightInfos.stream() - .filter(info -> info.type == HighlightInfoType.TODO) - .map(info -> TextRange.create(info.getHighlighter())) - .sorted(Segment.BY_START_OFFSET_THEN_END_OFFSET) - .collect(Collectors.toList()); - } - - private static void assertTodoRanges(List expectedTodoRanges, List actualTodoRanges) { - assertEquals("Unexpected todos highlihghting", generatePresentation(expectedTodoRanges), generatePresentation(actualTodoRanges)); - } - - private static String generatePresentation(List ranges) { - StringBuilder b = new StringBuilder(myEditor.getDocument().getText()); - int prevStart = Integer.MAX_VALUE; - for (int i = ranges.size() - 1; i >= 0; i--) { - TextRange r = ranges.get(i); - assertTrue(r.getEndOffset() <= prevStart); - b.insert(r.getEndOffset(), ']'); - b.insert(prevStart = r.getStartOffset(), '['); - } - return b.toString(); - } - @Override - protected boolean doInspections() { - return false; + protected String getFileExtension() { + return JavaFileType.DEFAULT_EXTENSION; } } diff --git a/java/testFramework/src/com/intellij/codeInsight/daemon/todo/TodoItemsTestCase.java b/java/testFramework/src/com/intellij/codeInsight/daemon/todo/TodoItemsTestCase.java new file mode 100644 index 000000000000..1998faa11d32 --- /dev/null +++ b/java/testFramework/src/com/intellij/codeInsight/daemon/todo/TodoItemsTestCase.java @@ -0,0 +1,82 @@ +// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. +package com.intellij.codeInsight.daemon.todo; + +import com.intellij.codeInsight.daemon.LightDaemonAnalyzerTestCase; +import com.intellij.codeInsight.daemon.impl.HighlightInfo; +import com.intellij.codeInsight.daemon.impl.HighlightInfoType; +import com.intellij.openapi.command.WriteCommandAction; +import com.intellij.openapi.editor.Document; +import com.intellij.openapi.editor.impl.DocumentImpl; +import com.intellij.openapi.util.Segment; +import com.intellij.openapi.util.TextRange; +import com.intellij.testFramework.EditorTestUtil; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +public abstract class TodoItemsTestCase extends LightDaemonAnalyzerTestCase { + protected abstract String getFileExtension(); + + protected void testTodos(String text) { + configureFromFileText("Foo." + getFileExtension(), text); + EditorTestUtil.setEditorVisibleSize(myEditor, 1000, 1000); // set visible area for highlighting + List expectedTodoRanges = extractExpectedTodoRanges(myEditor.getDocument()); + List highlightInfos = doHighlighting(); + List actualTodoRanges = getActualTodoRanges(highlightInfos); + assertTodoRanges(expectedTodoRanges, actualTodoRanges); + } + + protected void checkTodos(String text) { + DocumentImpl document = new DocumentImpl(text); + List expectedTodoRanges = extractExpectedTodoRanges(document); + List highlightInfos = doHighlighting(); + checkResultByText(document.getText()); + List actualTodoRanges = getActualTodoRanges(highlightInfos); + assertTodoRanges(expectedTodoRanges, actualTodoRanges); + } + + private static List extractExpectedTodoRanges(Document document) { + ArrayList result = new ArrayList<>(); + int offset = 0; + int startPos; + while ((startPos = document.getText().indexOf('[', offset)) != -1) { + int finalStartPos = startPos; + WriteCommandAction.runWriteCommandAction(ourProject, () -> document.deleteString(finalStartPos, finalStartPos + 1)); + int endPos = document.getText().indexOf(']', startPos); + if (endPos == -1) break; + WriteCommandAction.runWriteCommandAction(ourProject, () -> document.deleteString(endPos, endPos + 1)); + result.add(new TextRange(startPos, endPos)); + } + return result; + } + + private static List getActualTodoRanges(List highlightInfos) { + return highlightInfos.stream() + .filter(info -> info.type == HighlightInfoType.TODO) + .map(info -> TextRange.create(info.getHighlighter())) + .sorted(Segment.BY_START_OFFSET_THEN_END_OFFSET) + .collect(Collectors.toList()); + } + + private static void assertTodoRanges(List expectedTodoRanges, List actualTodoRanges) { + assertEquals("Unexpected todos highlighting", generatePresentation(expectedTodoRanges), generatePresentation(actualTodoRanges)); + } + + private static String generatePresentation(List ranges) { + StringBuilder b = new StringBuilder(myEditor.getDocument().getText()); + int prevStart = Integer.MAX_VALUE; + for (int i = ranges.size() - 1; i >= 0; i--) { + TextRange r = ranges.get(i); + assertTrue(r.getEndOffset() <= prevStart); + b.insert(r.getEndOffset(), ']'); + b.insert(prevStart = r.getStartOffset(), '['); + } + return b.toString(); + } + + @Override + protected boolean doInspections() { + return false; + } +}