From 2cde746047aada416469c541f10b85b2fc0c818b Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Tue, 30 Jun 2015 13:54:24 +0300 Subject: [PATCH] Usage highlighting test --- .../kotlin/generators/tests/GenerateTests.kt | 9 +-- idea/testData/usageHighlighter/localVal.kt | 8 +++ .../AbstractUsageHighlightingTest.kt | 68 +++++++++++++++++++ .../UsageHighlightingTestGenerated.java | 43 ++++++++++++ 4 files changed, 124 insertions(+), 4 deletions(-) create mode 100644 idea/testData/usageHighlighter/localVal.kt create mode 100644 idea/tests/org/jetbrains/kotlin/idea/highlighter/AbstractUsageHighlightingTest.kt create mode 100644 idea/tests/org/jetbrains/kotlin/idea/highlighter/UsageHighlightingTestGenerated.java diff --git a/generators/src/org/jetbrains/kotlin/generators/tests/GenerateTests.kt b/generators/src/org/jetbrains/kotlin/generators/tests/GenerateTests.kt index 792e0fcd107..bd33facd22e 100644 --- a/generators/src/org/jetbrains/kotlin/generators/tests/GenerateTests.kt +++ b/generators/src/org/jetbrains/kotlin/generators/tests/GenerateTests.kt @@ -66,10 +66,7 @@ import org.jetbrains.kotlin.idea.decompiler.textBuilder.AbstractDecompiledTextTe import org.jetbrains.kotlin.idea.editor.quickDoc.AbstractJetQuickDocProviderTest import org.jetbrains.kotlin.idea.folding.AbstractKotlinFoldingTest import org.jetbrains.kotlin.idea.hierarchy.AbstractHierarchyTest -import org.jetbrains.kotlin.idea.highlighter.AbstractDiagnosticMessageJsTest -import org.jetbrains.kotlin.idea.highlighter.AbstractDiagnosticMessageTest -import org.jetbrains.kotlin.idea.highlighter.AbstractHighlightExitPointsTest -import org.jetbrains.kotlin.idea.highlighter.AbstractHighlightingTest +import org.jetbrains.kotlin.idea.highlighter.* import org.jetbrains.kotlin.idea.imports.AbstractOptimizeImportsTest import org.jetbrains.kotlin.idea.intentions.AbstractIntentionTest import org.jetbrains.kotlin.idea.intentions.AbstractMultiFileIntentionTest @@ -395,6 +392,10 @@ fun main(args: Array) { model("highlighter") } + testClass(javaClass()) { + model("usageHighlighter") + } + testClass(javaClass()) { model("folding/noCollapse") model("folding/checkCollapse", testMethod = "doSettingsFoldingTest") diff --git a/idea/testData/usageHighlighter/localVal.kt b/idea/testData/usageHighlighter/localVal.kt new file mode 100644 index 00000000000..a3779680ec8 --- /dev/null +++ b/idea/testData/usageHighlighter/localVal.kt @@ -0,0 +1,8 @@ +fun test() { + val a = 12 + foo(~a) +} + +fun foo(a: Int) = a + +val a = 1 \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/highlighter/AbstractUsageHighlightingTest.kt b/idea/tests/org/jetbrains/kotlin/idea/highlighter/AbstractUsageHighlightingTest.kt new file mode 100644 index 00000000000..73a6015a33f --- /dev/null +++ b/idea/tests/org/jetbrains/kotlin/idea/highlighter/AbstractUsageHighlightingTest.kt @@ -0,0 +1,68 @@ +/* + * Copyright 2010-2015 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 org.jetbrains.kotlin.idea.highlighter + +import com.intellij.codeInsight.daemon.impl.HighlightInfo +import com.intellij.codeInsight.daemon.impl.HighlightInfoType +import com.intellij.codeInsight.highlighting.actions.HighlightUsagesAction +import com.intellij.openapi.command.WriteCommandAction +import com.intellij.testFramework.ExpectedHighlightingData +import org.jetbrains.kotlin.idea.test.JetLightCodeInsightFixtureTestCase +import org.jetbrains.kotlin.idea.test.JetLightProjectDescriptor + +public abstract class AbstractUsageHighlightingTest: JetLightCodeInsightFixtureTestCase() { + companion object { + // Not standard to leave it in text after configureByFile and remove manually after collecting highlighting information + val CARET_TAG = "~" + } + + protected fun doTest(filePath: String) { + myFixture.configureByFile(filePath) + val document = myFixture.getEditor().getDocument() + val data = ExpectedHighlightingData(document, false, false, true, false, myFixture.getFile()) + data.init() + + val caret = document.getText().indexOf(CARET_TAG) + assert(caret != -1, "Caret marker '$CARET_TAG' expected") + + WriteCommandAction.runWriteCommandAction(myFixture.getProject()) { + document.deleteString(caret, caret + CARET_TAG.length()) + } + + getEditor().getCaretModel().moveToOffset(caret) + + myFixture.testAction(HighlightUsagesAction()) + val highlighters = myFixture.getEditor().getMarkupModel().getAllHighlighters() + + val infos = highlighters.map { highlighter -> + var startOffset = highlighter.getStartOffset() + var endOffset = highlighter.getEndOffset() + + if (startOffset > caret) startOffset += CARET_TAG.length() + if (endOffset > caret) endOffset += CARET_TAG.length() + + HighlightInfo.newHighlightInfo(HighlightInfoType.INFORMATION).range(startOffset, endOffset).create() + } + + data.checkResult(infos, StringBuilder(document.getText()).insert(caret, CARET_TAG).toString()) + } + + + + override fun getProjectDescriptor() = JetLightProjectDescriptor.INSTANCE + override fun getTestDataPath() = "" +} diff --git a/idea/tests/org/jetbrains/kotlin/idea/highlighter/UsageHighlightingTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/highlighter/UsageHighlightingTestGenerated.java new file mode 100644 index 00000000000..ddc2363033f --- /dev/null +++ b/idea/tests/org/jetbrains/kotlin/idea/highlighter/UsageHighlightingTestGenerated.java @@ -0,0 +1,43 @@ +/* + * Copyright 2010-2015 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 org.jetbrains.kotlin.idea.highlighter; + +import com.intellij.testFramework.TestDataPath; +import org.jetbrains.kotlin.test.JUnit3RunnerWithInners; +import org.jetbrains.kotlin.test.JetTestUtils; +import org.jetbrains.kotlin.test.TestMetadata; +import org.junit.runner.RunWith; + +import java.io.File; +import java.util.regex.Pattern; + +/** This class is generated by {@link org.jetbrains.kotlin.generators.tests.TestsPackage}. DO NOT MODIFY MANUALLY */ +@SuppressWarnings("all") +@TestMetadata("idea/testData/usageHighlighter") +@TestDataPath("$PROJECT_ROOT") +@RunWith(JUnit3RunnerWithInners.class) +public class UsageHighlightingTestGenerated extends AbstractUsageHighlightingTest { + public void testAllFilesPresentInUsageHighlighter() throws Exception { + JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/usageHighlighter"), Pattern.compile("^(.+)\\.kt$"), true); + } + + @TestMetadata("localVal.kt") + public void testLocalVal() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/usageHighlighter/localVal.kt"); + doTest(fileName); + } +}