Tests for navigation to property delegates' accessors

This commit is contained in:
Andrey Breslav
2013-08-28 12:54:44 +04:00
parent d19b3a5628
commit 9fa8ee10dc
11 changed files with 173 additions and 20 deletions
@@ -446,7 +446,7 @@ public class GenerateTests {
"idea/tests/",
"ReferenceResolveTestGenerated",
AbstractResolveBaseTest.class,
testModel("idea/testData/resolve/references", "doTest")
testModel("idea/testData/resolve/references", true, "doTest")
);
generateTest(
@@ -0,0 +1,8 @@
val x: Int <caret>by Foo()
class Foo
fun Foo.get(_this: Any?, p: Any?): Int = 1
// REF: (for Foo in <root>).get(Any?,Any?)
@@ -0,0 +1,8 @@
val x: Int <caret>by Foo()
class Foo {
fun get(_this: Any?, p: Any?): Int = 1
}
// REF: (in Foo).get(Any?,Any?)
@@ -0,0 +1,20 @@
var x : Int <caret>by Baz()
trait Foo {
fun get(p1: Any?, p2: Any?): Int = 1
}
trait Bar {
fun get(p1: Any?, p2: Any?): Int
}
trait Zoo {
fun set(p1: Any?, p2: Any?, p3: Any?)
}
class Baz: Foo, Bar, Zoo
// MULTIRESOLVE
// REF: (in Bar).get(Any?,Any?)
// REF: (in Foo).get(Any?,Any?)
// REF: (in Zoo).set(Any?,Any?,Any?)
@@ -0,0 +1,11 @@
var x: Int <caret>by Foo()
class Foo
fun Foo.get(_this: Any?, p: Any?): Int = 1
fun Foo.set(_this: Any?, p: Any?, val: Any?) {}
// MULTIRESOLVE
// REF: (for Foo in <root>).get(Any?,Any?)
// REF: (for Foo in <root>).set(Any?,Any?,Any?)
@@ -0,0 +1,11 @@
var x: Int <caret>by Foo()
class Foo {
fun get(_this: Any?, p: Any?): Int = 1
fun set(_this: Any?, p: Any?, val: Any?) {}
}
// MULTIRESOLVE
// REF: (in Foo).get(Any?,Any?)
// REF: (in Foo).set(Any?,Any?,Any?)
@@ -0,0 +1,5 @@
import kotlin.properties.Delegates
val x: Int <caret>by Delegates.lazy {1}
// REF: (in kotlin.properties.ReadOnlyProperty).get(R,jet.PropertyMetadata)
@@ -0,0 +1,7 @@
import kotlin.properties.Delegates
var x: Int <caret>by Delegates.notNull()
// MULTIRESOLVE
// REF: (in kotlin.properties.ReadWriteProperty).get(R,jet.PropertyMetadata)
// REF: (in kotlin.properties.ReadWriteProperty).set(R,jet.PropertyMetadata,T)
@@ -0,0 +1,5 @@
val foo: Int <caret>by Bar()
class Bar
// REF_EMPTY
@@ -19,22 +19,22 @@ package org.jetbrains.jet.resolve;
import com.google.common.collect.Lists;
import com.google.common.collect.Ordering;
import com.intellij.ide.startup.impl.StartupManagerImpl;
import com.intellij.openapi.projectRoots.Sdk;
import com.intellij.openapi.startup.StartupManager;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiPolyVariantReference;
import com.intellij.psi.PsiReference;
import com.intellij.psi.ResolveResult;
import com.intellij.testFramework.LightCodeInsightTestCase;
import com.intellij.testFramework.LightProjectDescriptor;
import com.intellij.testFramework.fixtures.LightPlatformCodeInsightFixtureTestCase;
import junit.framework.Assert;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.InTextDirectivesUtils;
import org.jetbrains.jet.plugin.PluginTestCaseBase;
import org.jetbrains.jet.plugin.JetWithJdkAndRuntimeLightProjectDescriptor;
import org.jetbrains.jet.testing.ReferenceUtils;
import java.util.List;
public abstract class AbstractResolveBaseTest extends LightCodeInsightTestCase {
public abstract class AbstractResolveBaseTest extends LightPlatformCodeInsightFixtureTestCase {
public static final String MULTIRESOLVE = "MULTIRESOLVE";
public static final String REF_EMPTY = "REF_EMPTY";
@@ -46,9 +46,9 @@ public abstract class AbstractResolveBaseTest extends LightCodeInsightTestCase {
}
protected void doTest(String path) {
configureByFile(path);
myFixture.configureByFile(path);
if (InTextDirectivesUtils.isDirectiveDefined(getFile().getText(), MULTIRESOLVE)) {
if (InTextDirectivesUtils.isDirectiveDefined(myFixture.getFile().getText(), MULTIRESOLVE)) {
doMultiResolveTest();
}
else {
@@ -56,9 +56,9 @@ public abstract class AbstractResolveBaseTest extends LightCodeInsightTestCase {
}
}
protected static void doSingleResolveTest() {
boolean shouldBeUnresolved = InTextDirectivesUtils.isDirectiveDefined(getFile().getText(), REF_EMPTY);
List<String> refs = InTextDirectivesUtils.findLinesWithPrefixesRemoved(getFile().getText(), "REF:");
protected void doSingleResolveTest() {
boolean shouldBeUnresolved = InTextDirectivesUtils.isDirectiveDefined(myFixture.getFile().getText(), REF_EMPTY);
List<String> refs = InTextDirectivesUtils.findLinesWithPrefixesRemoved(myFixture.getFile().getText(), "REF:");
String referenceToString;
if (shouldBeUnresolved) {
@@ -74,8 +74,8 @@ public abstract class AbstractResolveBaseTest extends LightCodeInsightTestCase {
Assert.assertNotNull("Test data wasn't found, use \"// REF: \" directive", referenceToString);
}
int offset = getEditor().getCaretModel().getOffset();
PsiReference psiReference = getFile().findReferenceAt(offset);
int offset = myFixture.getEditor().getCaretModel().getOffset();
PsiReference psiReference = myFixture.getFile().findReferenceAt(offset);
if (psiReference != null) {
PsiElement resolvedTo = psiReference.resolve();
if (resolvedTo != null) {
@@ -93,17 +93,16 @@ public abstract class AbstractResolveBaseTest extends LightCodeInsightTestCase {
}
}
else {
Assert.assertNull(
String.format("No reference found at offset: %s, but one resolved to %s was expected", offset, referenceToString),
referenceToString);
Assert.assertNull(String.format("No reference found at offset: %s, but one resolved to %s was expected", offset, referenceToString),
referenceToString);
}
}
protected static void doMultiResolveTest() {
List<String> expectedReferences = InTextDirectivesUtils.findListWithPrefixes(getFile().getText(), "REF:");
protected void doMultiResolveTest() {
List<String> expectedReferences = InTextDirectivesUtils.findLinesWithPrefixesRemoved(myFixture.getFile().getText(), "REF:");
PsiReference psiReference =
getFile().findReferenceAt(getEditor().getCaretModel().getOffset());
myFixture.getFile().findReferenceAt(myFixture.getEditor().getCaretModel().getOffset());
assertTrue(psiReference instanceof PsiPolyVariantReference);
@@ -123,8 +122,8 @@ public abstract class AbstractResolveBaseTest extends LightCodeInsightTestCase {
}
@Override
protected Sdk getProjectJDK() {
return PluginTestCaseBase.jdkFromIdeaHome();
protected LightProjectDescriptor getProjectDescriptor() {
return JetWithJdkAndRuntimeLightProjectDescriptor.INSTANCE;
}
@NotNull
@@ -31,6 +31,7 @@ import org.jetbrains.jet.resolve.AbstractResolveBaseTest;
/** This class is generated by {@link org.jetbrains.jet.generators.tests.GenerateTests}. DO NOT MODIFY MANUALLY */
@SuppressWarnings("all")
@TestMetadata("idea/testData/resolve/references")
@InnerTestClasses({ReferenceResolveTestGenerated.DelegatedPropertyAccessors.class})
public class ReferenceResolveTestGenerated extends AbstractResolveBaseTest {
public void testAllFilesPresentInReferences() throws Exception {
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("idea/testData/resolve/references"), Pattern.compile("^(.+)\\.kt$"), true);
@@ -171,4 +172,82 @@ public class ReferenceResolveTestGenerated extends AbstractResolveBaseTest {
doTest("idea/testData/resolve/references/TypeParameterInFunctionLiteral.kt");
}
@TestMetadata("idea/testData/resolve/references/delegatedPropertyAccessors")
@InnerTestClasses({DelegatedPropertyAccessors.InSource.class, DelegatedPropertyAccessors.InStandardLibrary.class})
public static class DelegatedPropertyAccessors extends AbstractResolveBaseTest {
public void testAllFilesPresentInDelegatedPropertyAccessors() throws Exception {
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("idea/testData/resolve/references/delegatedPropertyAccessors"), Pattern.compile("^(.+)\\.kt$"), true);
}
@TestMetadata("unresolved.kt")
public void testUnresolved() throws Exception {
doTest("idea/testData/resolve/references/delegatedPropertyAccessors/unresolved.kt");
}
@TestMetadata("idea/testData/resolve/references/delegatedPropertyAccessors/inSource")
public static class InSource extends AbstractResolveBaseTest {
public void testAllFilesPresentInInSource() throws Exception {
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("idea/testData/resolve/references/delegatedPropertyAccessors/inSource"), Pattern.compile("^(.+)\\.kt$"), true);
}
@TestMetadata("getExtension.kt")
public void testGetExtension() throws Exception {
doTest("idea/testData/resolve/references/delegatedPropertyAccessors/inSource/getExtension.kt");
}
@TestMetadata("getMember.kt")
public void testGetMember() throws Exception {
doTest("idea/testData/resolve/references/delegatedPropertyAccessors/inSource/getMember.kt");
}
@TestMetadata("getMultipleDeclarations.kt")
public void testGetMultipleDeclarations() throws Exception {
doTest("idea/testData/resolve/references/delegatedPropertyAccessors/inSource/getMultipleDeclarations.kt");
}
@TestMetadata("getSetExtension.kt")
public void testGetSetExtension() throws Exception {
doTest("idea/testData/resolve/references/delegatedPropertyAccessors/inSource/getSetExtension.kt");
}
@TestMetadata("getSetMember.kt")
public void testGetSetMember() throws Exception {
doTest("idea/testData/resolve/references/delegatedPropertyAccessors/inSource/getSetMember.kt");
}
}
@TestMetadata("idea/testData/resolve/references/delegatedPropertyAccessors/inStandardLibrary")
public static class InStandardLibrary extends AbstractResolveBaseTest {
public void testAllFilesPresentInInStandardLibrary() throws Exception {
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("idea/testData/resolve/references/delegatedPropertyAccessors/inStandardLibrary"), Pattern.compile("^(.+)\\.kt$"), true);
}
@TestMetadata("lazy.kt")
public void testLazy() throws Exception {
doTest("idea/testData/resolve/references/delegatedPropertyAccessors/inStandardLibrary/lazy.kt");
}
@TestMetadata("notNull.kt")
public void testNotNull() throws Exception {
doTest("idea/testData/resolve/references/delegatedPropertyAccessors/inStandardLibrary/notNull.kt");
}
}
public static Test innerSuite() {
TestSuite suite = new TestSuite("DelegatedPropertyAccessors");
suite.addTestSuite(DelegatedPropertyAccessors.class);
suite.addTestSuite(InSource.class);
suite.addTestSuite(InStandardLibrary.class);
return suite;
}
}
public static Test suite() {
TestSuite suite = new TestSuite("ReferenceResolveTestGenerated");
suite.addTestSuite(ReferenceResolveTestGenerated.class);
suite.addTest(DelegatedPropertyAccessors.innerSuite());
return suite;
}
}