diff --git a/spellchecker/testSrc/com/intellij/spellchecker/inspection/SpellcheckerPerformanceTest.java b/spellchecker/testSrc/com/intellij/spellchecker/inspection/SpellcheckerPerformanceTest.java index 55168f990992..28a5524a6ae0 100644 --- a/spellchecker/testSrc/com/intellij/spellchecker/inspection/SpellcheckerPerformanceTest.java +++ b/spellchecker/testSrc/com/intellij/spellchecker/inspection/SpellcheckerPerformanceTest.java @@ -20,8 +20,11 @@ import com.intellij.codeHighlighting.TextEditorHighlightingPass; import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer; import com.intellij.codeInsight.daemon.impl.HighlightInfo; import com.intellij.codeInsight.daemon.impl.TextEditorHighlightingPassRegistrarEx; +import com.intellij.openapi.progress.ProcessCanceledException; +import com.intellij.openapi.util.TextRange; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.spellchecker.inspections.*; import com.intellij.testFramework.PlatformTestUtil; import com.intellij.testFramework.fixtures.impl.CodeInsightTestFixtureImpl; import com.intellij.util.ArrayUtil; @@ -87,6 +90,51 @@ public class SpellcheckerPerformanceTest extends SpellcheckerInspectionTestCase }).assertTiming(); } + public void testVeryLongEmail(){ + final String text = "\\LONG_EMAIL: " + StringUtil.repeat("ivan.ivanov", 1000000) + "@mail.com\n"; + doSplitterPerformanceTest(text, CommentSplitter.getInstance()); + } + + public void testVeryLongURL(){ + final String text = "\\LONG_URL: http://" + StringUtil.repeat("ivan.ivanov", 1000000) + ".com\n"; + doSplitterPerformanceTest(text, CommentSplitter.getInstance()); + } + + public void testVeryLongHTML(){ + final String text = "\\ LONG_HTML "; + doSplitterPerformanceTest(text, CommentSplitter.getInstance()); + } + + public void testVeryLongIdentifier(){ + final String text = StringUtil.repeat("identifier1", 1000000); + doSplitterPerformanceTest(text, IdentifierSplitter.getInstance()); + } + + public void testVeryLongSpecialCharacters(){ + final String text = "word" + StringUtil.repeat("\n\t\r\t\n", 1000000); + doSplitterPerformanceTest(text, TextSplitter.getInstance()); + } + + public void testVeryLongProperty(){ + final String text = StringUtil.repeat("properties.test.properties", 1000000); + doSplitterPerformanceTest(text, PropertiesSplitter.getInstance()); + } + + public void testVeryLongList(){ + final String text = StringUtil.repeat("properties,test,properties", 1000000); + doSplitterPerformanceTest(text, PlainTextSplitter.getInstance()); + } + + private static void doSplitterPerformanceTest(String text, Splitter splitter) { + PlatformTestUtil.startPerformanceTest("long word for spelling", 2000, () -> { + try{ + splitter.split(text, TextRange.allOf(text), (textRange) -> {}); + }catch(ProcessCanceledException pce){ + System.out.println("pce is thrown"); + } + }).attempts(1).assertTiming(); + } + @NotNull private List runLocalInspections() { myFixture.enableInspections(getInspectionTools());