Add MultiFileHighlightingTest which checks that other files are not parsed during highlighting

This commit is contained in:
Pavel V. Talanov
2014-04-22 18:27:46 +04:00
parent b3898cfb0d
commit c9eb313ec4
10 changed files with 291 additions and 0 deletions
@@ -111,6 +111,7 @@ import org.jetbrains.jet.plugin.debugger.evaluate.AbstractSelectExpressionForDeb
import org.jetbrains.jet.plugin.debugger.evaluate.AbstractCodeFragmentCompletionTest
import org.jetbrains.jet.plugin.debugger.evaluate.AbstractCodeFragmentHighlightingTest
import org.jetbrains.jet.plugin.stubs.AbstractLazyResolveByStubTest
import org.jetbrains.jet.plugin.stubs.AbstractMultiFileHighlightingTest
fun main(args: Array<String>) {
System.setProperty("java.awt.headless", "true")
@@ -602,6 +603,10 @@ fun main(args: Array<String>) {
model("completion/basic/multifile", extension = null, recursive = false)
}
testClass(javaClass<AbstractMultiFileHighlightingTest>()) {
model("multiFileHighlighting", recursive = false)
}
testClass(javaClass<AbstractJetExtractionTest>()) {
model("refactoring/introduceVariable", extension = "kt", testMethod = "doIntroduceVariableTest")
model("refactoring/extractFunction", extension = "kt", testMethod = "doExtractFunctionTest")
@@ -0,0 +1,11 @@
package test
import delegates.*
import util.*
fun f() {
val d = D(C("", 0), object : T2 {})
d.anotherFun()
d.<error>invalidFun</error>()
WithDelegatedProperty().i
}
@@ -0,0 +1,12 @@
package delegates
import util.*
class D(val t: T, val t2: T2): T by t, T2 by t2 {
fun anotherFun() {
}
}
class WithDelegatedProperty() {
val i: Int by someInvalidCode
}
@@ -0,0 +1,18 @@
package enums
trait Base {
fun f() {
}
}
enum class E(val i: Int = 0): Base {
E1: E() {
override fun f() {
}
}
E2: E(3) {
override fun f() {
}
}
E3
}
@@ -0,0 +1,49 @@
public package util
trait T {
fun f()
}
trait T2 {
fun g() {
}
}
suppress("UNRESOLVED_REFERENCE")
class Invalid: I
class A(val i: Int)
suppress("FINAL_SUPERTYPE")
class B: A(1) {
}
open class C(val s: String, i: Int): A(i), T {
override fun f() {}
}
fun topLevelFun(u: A): A {
return A(u.i)
}
val topLevelVal: A = C("", 0)
var topLevelVar: A = B()
object topLevelObject: T {
override fun f() {
}
fun g() {
}
}
fun funWithUnspecifiedType() = 3
fun funWithVararg(vararg i: Int): IntArray {
return i
}
fun <T, G> funWithWhere(a: G, b: T) where T: Collection<G> {
}
@@ -0,0 +1,17 @@
package some
import enums.E
import enums.Base
fun f(<warning>e</warning>: Base) {
}
fun test() {
f(E.E1)
f(E.E2)
f(E.E3)
f(E.<error>E4</error>)
f(E.<error>Invalid</error>)
E.E1.f()
}
@@ -0,0 +1,8 @@
package shouldFail
import util.*
fun f() {
val c = funWithUnspecifiedType()
c + 3
}
@@ -0,0 +1,23 @@
package first
import util.*
fun test() {
topLevelFun(topLevelVar)
topLevelFun(topLevelVal)
val c = C("ff", 1)
c.s.<error>invalid</error>
val <warning>b</warning> = B()
funWithVararg(1, 2, 3)
val <warning>i</warning> = Invalid()
topLevelObject.f()
topLevelObject.g()
}
fun testWhere(list: List<Int>) {
funWithWhere(1, list)
<error>funWithWhere</error>(1, 2)
}
class Example : C("foo", 0)
class Example2 : <error>A</error>(2)
@@ -0,0 +1,89 @@
/*
* Copyright 2010-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 org.jetbrains.jet.plugin.stubs;
import com.intellij.codeInsight.completion.CompletionTestCase;
import com.intellij.codeInsight.daemon.impl.DaemonCodeAnalyzerImpl;
import com.intellij.codeInsight.daemon.impl.HighlightInfo;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.project.DumbService;
import com.intellij.psi.PsiDocumentManager;
import com.intellij.psi.impl.cache.CacheManager;
import com.intellij.psi.impl.source.tree.TreeElement;
import com.intellij.psi.impl.source.tree.TreeUtil;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.psi.search.UsageSearchContext;
import com.intellij.testFramework.ExpectedHighlightingData;
import kotlin.Function0;
import kotlin.Unit;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.plugin.PluginTestCaseBase;
import java.io.File;
import java.util.Collection;
public abstract class AbstractMultiFileHighlightingTest extends CompletionTestCase {
public void doTest(@NotNull String filePath) throws Exception {
configureByFile(new File(filePath).getName(), "");
boolean shouldFail = getName().contains("UnspecifiedType");
AstAccessControl.instance$.testWithControlledAccessToAst(
shouldFail, getFile().getVirtualFile(), getProject(), getTestRootDisposable(),
new Function0<Unit>() {
@Override
public Unit invoke() {
checkHighlighting(myEditor, true, false);
return Unit.VALUE;
}
}
);
}
@Override
protected String getTestDataPath() {
return PluginTestCaseBase.getTestDataPathBase() + "/multiFileHighlighting/";
}
//NOTE: partially copied from DaemonAnalyzerTestCase#checkHighlighting
@Override
@NotNull
protected Collection<HighlightInfo> checkHighlighting(@NotNull ExpectedHighlightingData data) {
data.init();
PsiDocumentManager.getInstance(myProject).commitAllDocuments();
//to load text
ApplicationManager.getApplication().runWriteAction(new Runnable() {
@Override
public void run() {
TreeUtil.clearCaches((TreeElement) myFile.getNode());
}
});
//to initialize caches
if (!DumbService.isDumb(getProject())) {
CacheManager.SERVICE.getInstance(myProject)
.getFilesWithWord("XXX", UsageSearchContext.IN_COMMENTS, GlobalSearchScope.allScope(myProject), true);
}
Collection<HighlightInfo> infos = doHighlighting();
String text = myEditor.getDocument().getText();
data.checkLineMarkers(DaemonCodeAnalyzerImpl.getLineMarkers(getDocument(getFile()), getProject()), text);
data.checkResult(infos, text);
return infos;
}
}
@@ -0,0 +1,59 @@
/*
* Copyright 2010-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 org.jetbrains.jet.plugin.stubs;
import junit.framework.Assert;
import junit.framework.Test;
import junit.framework.TestSuite;
import java.io.File;
import java.util.regex.Pattern;
import org.jetbrains.jet.JetTestUtils;
import org.jetbrains.jet.test.InnerTestClasses;
import org.jetbrains.jet.test.TestMetadata;
import org.jetbrains.jet.plugin.stubs.AbstractMultiFileHighlightingTest;
/** This class is generated by {@link org.jetbrains.jet.generators.tests.TestsPackage}. DO NOT MODIFY MANUALLY */
@SuppressWarnings("all")
@TestMetadata("idea/testData/multiFileHighlighting")
public class MultiFileHighlightingTestGenerated extends AbstractMultiFileHighlightingTest {
public void testAllFilesPresentInMultiFileHighlighting() throws Exception {
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("idea/testData/multiFileHighlighting"), Pattern.compile("^(.+)\\.kt$"), false);
}
@TestMetadata("delegatesReference.kt")
public void testDelegatesReference() throws Exception {
doTest("idea/testData/multiFileHighlighting/delegatesReference.kt");
}
@TestMetadata("enumReference.kt")
public void testEnumReference() throws Exception {
doTest("idea/testData/multiFileHighlighting/enumReference.kt");
}
@TestMetadata("referencesFunWithUnspecifiedType.kt")
public void testReferencesFunWithUnspecifiedType() throws Exception {
doTest("idea/testData/multiFileHighlighting/referencesFunWithUnspecifiedType.kt");
}
@TestMetadata("topLevelMembersReference.kt")
public void testTopLevelMembersReference() throws Exception {
doTest("idea/testData/multiFileHighlighting/topLevelMembersReference.kt");
}
}