From 7ef18fe5ba6c5a929143ec10e94d13cefcebf15b Mon Sep 17 00:00:00 2001 From: "Pavel V. Talanov" Date: Fri, 28 Apr 2017 17:34:11 +0300 Subject: [PATCH] Tests: add some test cases for inheritor search Refactor inheritor search tests to be generated --- .../kotlin/generators/tests/GenerateTests.kt | 5 ++ .../search/inheritance/annotationClass.kt | 6 ++ idea/testData/search/inheritance/enum.kt | 11 +++ .../testData/search/inheritance/interfaces.kt | 12 +++ idea/testData/search/inheritance/object.kt | 7 ++ .../search/inheritance/simpleClass.kt | 9 +++ ...java => AbstractInheritorsSearchTest.java} | 16 +--- .../kotlin/search/AbstractSearcherTest.java | 12 +-- .../search/AnnotatedMembersSearchTest.java | 2 +- .../kotlin/search/DefinitionsSearchTest.kt | 4 +- .../search/InheritorsSearchTestGenerated.java | 80 +++++++++++++++++++ .../search/JUnitMembersSearcherTest.java | 4 +- 12 files changed, 145 insertions(+), 23 deletions(-) create mode 100644 idea/testData/search/inheritance/annotationClass.kt create mode 100644 idea/testData/search/inheritance/enum.kt create mode 100644 idea/testData/search/inheritance/interfaces.kt create mode 100644 idea/testData/search/inheritance/object.kt create mode 100644 idea/testData/search/inheritance/simpleClass.kt rename idea/tests/org/jetbrains/kotlin/search/{ClassInheritorsSearchTest.java => AbstractInheritorsSearchTest.java} (73%) create mode 100644 idea/tests/org/jetbrains/kotlin/search/InheritorsSearchTestGenerated.java diff --git a/generators/src/org/jetbrains/kotlin/generators/tests/GenerateTests.kt b/generators/src/org/jetbrains/kotlin/generators/tests/GenerateTests.kt index f557ffb8332..0a2139bc8f2 100755 --- a/generators/src/org/jetbrains/kotlin/generators/tests/GenerateTests.kt +++ b/generators/src/org/jetbrains/kotlin/generators/tests/GenerateTests.kt @@ -166,6 +166,7 @@ import org.jetbrains.kotlin.resolve.constants.evaluate.AbstractCompileTimeConsta import org.jetbrains.kotlin.resolve.constraintSystem.AbstractConstraintSystemTest import org.jetbrains.kotlin.samWithReceiver.AbstractSamWithReceiverScriptTest import org.jetbrains.kotlin.samWithReceiver.AbstractSamWithReceiverTest +import org.jetbrains.kotlin.search.AbstractInheritorsSearchTest import org.jetbrains.kotlin.serialization.AbstractLocalClassProtoTest import org.jetbrains.kotlin.shortenRefs.AbstractShortenRefsTest import org.jetbrains.kotlin.test.TargetBackend @@ -551,6 +552,10 @@ fun main(args: Array) { model("navigation/gotoTestOrCode", pattern = "^(.+)\\.main\\..+\$") } + testClass { + model("search/inheritance") + } + testClass { model("quickfix", pattern = """^(\w+)\.((before\.Main\.\w+)|(test))$""", testMethod = "doTestWithExtraFile") } diff --git a/idea/testData/search/inheritance/annotationClass.kt b/idea/testData/search/inheritance/annotationClass.kt new file mode 100644 index 00000000000..705f1337706 --- /dev/null +++ b/idea/testData/search/inheritance/annotationClass.kt @@ -0,0 +1,6 @@ +package a.b + +annotation class Anno + +// CLASS: java.lang.annotation.Annotation +// SEARCH: class:Anno diff --git a/idea/testData/search/inheritance/enum.kt b/idea/testData/search/inheritance/enum.kt new file mode 100644 index 00000000000..5d444afa4a7 --- /dev/null +++ b/idea/testData/search/inheritance/enum.kt @@ -0,0 +1,11 @@ +enum class A { + E; +} + +// CLASS: java.lang.Enum +// SEARCH: class:A + +// IGNORE_CLASSES: java. +// IGNORE_CLASSES: javax. +// IGNORE_CLASSES: sun. +// IGNORE_CLASSES: org. diff --git a/idea/testData/search/inheritance/interfaces.kt b/idea/testData/search/inheritance/interfaces.kt new file mode 100644 index 00000000000..7cf2aa7f68b --- /dev/null +++ b/idea/testData/search/inheritance/interfaces.kt @@ -0,0 +1,12 @@ +package a.b + +interface I: J { + +} + +interface J { + +} + +// CLASS: a.b.J +// SEARCH: class:I diff --git a/idea/testData/search/inheritance/object.kt b/idea/testData/search/inheritance/object.kt new file mode 100644 index 00000000000..32b44153d02 --- /dev/null +++ b/idea/testData/search/inheritance/object.kt @@ -0,0 +1,7 @@ +object A : B() + +open class B { + +} +// CLASS: B +// SEARCH: class:A diff --git a/idea/testData/search/inheritance/simpleClass.kt b/idea/testData/search/inheritance/simpleClass.kt new file mode 100644 index 00000000000..b3dae910897 --- /dev/null +++ b/idea/testData/search/inheritance/simpleClass.kt @@ -0,0 +1,9 @@ +class A + +// CLASS: java.lang.Object +// SEARCH: class:A + +// IGNORE_CLASSES: java. +// IGNORE_CLASSES: javax. +// IGNORE_CLASSES: sun. +// IGNORE_CLASSES: org. diff --git a/idea/tests/org/jetbrains/kotlin/search/ClassInheritorsSearchTest.java b/idea/tests/org/jetbrains/kotlin/search/AbstractInheritorsSearchTest.java similarity index 73% rename from idea/tests/org/jetbrains/kotlin/search/ClassInheritorsSearchTest.java rename to idea/tests/org/jetbrains/kotlin/search/AbstractInheritorsSearchTest.java index 1f5bbc940dc..7c0e104db3e 100644 --- a/idea/tests/org/jetbrains/kotlin/search/ClassInheritorsSearchTest.java +++ b/idea/tests/org/jetbrains/kotlin/search/AbstractInheritorsSearchTest.java @@ -16,23 +16,15 @@ package org.jetbrains.kotlin.search; +import org.jetbrains.annotations.NotNull; import org.jetbrains.kotlin.idea.test.PluginTestCaseBase; import java.io.File; import java.io.IOException; -public class ClassInheritorsSearchTest extends AbstractSearcherTest { - - public void testInheritanceFromKotlinClass() throws IOException { - doTest(); - } - - public void testInheritanceFromJavaClass() throws IOException { - doTest(); - } - - private void doTest() throws IOException { - checkClassWithDirectives(); +public abstract class AbstractInheritorsSearchTest extends AbstractSearcherTest { + public void doTest(@NotNull String path) throws IOException { + checkClassWithDirectives(path); } @Override diff --git a/idea/tests/org/jetbrains/kotlin/search/AbstractSearcherTest.java b/idea/tests/org/jetbrains/kotlin/search/AbstractSearcherTest.java index 66464800919..95a1e1b2def 100644 --- a/idea/tests/org/jetbrains/kotlin/search/AbstractSearcherTest.java +++ b/idea/tests/org/jetbrains/kotlin/search/AbstractSearcherTest.java @@ -59,8 +59,8 @@ public abstract class AbstractSearcherTest extends LightCodeInsightFixtureTestCa return GlobalSearchScope.projectScope(getProject()); } - protected void checkResult(Query actual) throws IOException { - String text = FileUtil.loadFile(new File(getPathToFile()), true); + protected static void checkResult(@NotNull String path, Query actual) throws IOException { + String text = FileUtil.loadFile(new File(path), true); List classFqnFilters = InTextDirectivesUtils.findListWithPrefixes(text, "// IGNORE_CLASSES: "); @@ -87,14 +87,14 @@ public abstract class AbstractSearcherTest extends LightCodeInsightFixtureTestCa assertOrderedEquals(actualModified, expected); } - protected void checkClassWithDirectives() throws IOException { - myFixture.configureByFile(getFileName()); + protected void checkClassWithDirectives(@NotNull String path) throws IOException { + myFixture.configureByFile(path); List directives = InTextDirectivesUtils.findListWithPrefixes( - FileUtil.loadFile(new File(getPathToFile()), true), "// CLASS: "); + FileUtil.loadFile(new File(path), true), "// CLASS: "); assertFalse("Specify CLASS directive in test file", directives.isEmpty()); String superClassName = directives.get(0); PsiClass psiClass = getPsiClass(superClassName); - checkResult(ClassInheritorsSearch.search(psiClass, getProjectScope(), false)); + checkResult(path, ClassInheritorsSearch.search(psiClass, getProjectScope(), false)); } private static String stringRepresentation(Object member) { diff --git a/idea/tests/org/jetbrains/kotlin/search/AnnotatedMembersSearchTest.java b/idea/tests/org/jetbrains/kotlin/search/AnnotatedMembersSearchTest.java index 1e5bbe6f753..eed39878462 100644 --- a/idea/tests/org/jetbrains/kotlin/search/AnnotatedMembersSearchTest.java +++ b/idea/tests/org/jetbrains/kotlin/search/AnnotatedMembersSearchTest.java @@ -84,7 +84,7 @@ public class AnnotatedMembersSearchTest extends AbstractSearcherTest { PsiBasedClassResolver.Companion.getTrueHits().set(0); PsiBasedClassResolver.Companion.getFalseHits().set(0); - checkResult(AnnotatedMembersSearch.search(psiClass, getProjectScope())); + checkResult(getPathToFile(), AnnotatedMembersSearch.search(psiClass, getProjectScope())); Integer optimizedTrue = InTextDirectivesUtils.getPrefixedInt(fileText, "// OPTIMIZED_TRUE:"); if (optimizedTrue != null) { diff --git a/idea/tests/org/jetbrains/kotlin/search/DefinitionsSearchTest.kt b/idea/tests/org/jetbrains/kotlin/search/DefinitionsSearchTest.kt index f7e6ea2b7ee..7ebdc3d3a79 100644 --- a/idea/tests/org/jetbrains/kotlin/search/DefinitionsSearchTest.kt +++ b/idea/tests/org/jetbrains/kotlin/search/DefinitionsSearchTest.kt @@ -34,10 +34,10 @@ class DefinitionsSearchTest : AbstractSearcherTest() { assertFalse("Specify CLASS directive in test file", directives.isEmpty()) val superClassName = directives[0] val psiClass = getPsiClass(superClassName) - checkResult(DefinitionsScopedSearch.search(psiClass)) + checkResult(getPathToFile(), DefinitionsScopedSearch.search(psiClass)) val origin = (psiClass as? KtLightClass)?.kotlinOrigin!! - checkResult(DefinitionsScopedSearch.search(origin)) + checkResult(getPathToFile(), DefinitionsScopedSearch.search(origin)) } override fun getTestDataPath(): String { diff --git a/idea/tests/org/jetbrains/kotlin/search/InheritorsSearchTestGenerated.java b/idea/tests/org/jetbrains/kotlin/search/InheritorsSearchTestGenerated.java new file mode 100644 index 00000000000..34429a7adf7 --- /dev/null +++ b/idea/tests/org/jetbrains/kotlin/search/InheritorsSearchTestGenerated.java @@ -0,0 +1,80 @@ +/* + * Copyright 2010-2017 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.search; + +import com.intellij.testFramework.TestDataPath; +import org.jetbrains.kotlin.test.JUnit3RunnerWithInners; +import org.jetbrains.kotlin.test.KotlinTestUtils; +import org.jetbrains.kotlin.test.TargetBackend; +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/search/inheritance") +@TestDataPath("$PROJECT_ROOT") +@RunWith(JUnit3RunnerWithInners.class) +public class InheritorsSearchTestGenerated extends AbstractInheritorsSearchTest { + public void testAllFilesPresentInInheritance() throws Exception { + KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/search/inheritance"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.ANY, true); + } + + @TestMetadata("annotationClass.kt") + public void testAnnotationClass() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/search/inheritance/annotationClass.kt"); + doTest(fileName); + } + + @TestMetadata("enum.kt") + public void testEnum() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/search/inheritance/enum.kt"); + doTest(fileName); + } + + @TestMetadata("interfaces.kt") + public void testInterfaces() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/search/inheritance/interfaces.kt"); + doTest(fileName); + } + + @TestMetadata("object.kt") + public void testObject() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/search/inheritance/object.kt"); + doTest(fileName); + } + + @TestMetadata("simpleClass.kt") + public void testSimpleClass() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/search/inheritance/simpleClass.kt"); + doTest(fileName); + } + + @TestMetadata("testInheritanceFromJavaClass.kt") + public void testTestInheritanceFromJavaClass() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/search/inheritance/testInheritanceFromJavaClass.kt"); + doTest(fileName); + } + + @TestMetadata("testInheritanceFromKotlinClass.kt") + public void testTestInheritanceFromKotlinClass() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/search/inheritance/testInheritanceFromKotlinClass.kt"); + doTest(fileName); + } +} diff --git a/idea/tests/org/jetbrains/kotlin/search/JUnitMembersSearcherTest.java b/idea/tests/org/jetbrains/kotlin/search/JUnitMembersSearcherTest.java index 52ab1374e39..ee9d29324c9 100644 --- a/idea/tests/org/jetbrains/kotlin/search/JUnitMembersSearcherTest.java +++ b/idea/tests/org/jetbrains/kotlin/search/JUnitMembersSearcherTest.java @@ -51,7 +51,7 @@ public class JUnitMembersSearcherTest extends AbstractSearcherTest { } private void doJUnit3test() throws IOException { - checkClassWithDirectives(); + checkClassWithDirectives(getPathToFile()); } private void doJUnit4test() throws IOException { @@ -61,7 +61,7 @@ public class JUnitMembersSearcherTest extends AbstractSearcherTest { assertFalse("Specify ANNOTATION directive in test file", directives.isEmpty()); String annotationClassName = directives.get(0); PsiClass psiClass = getPsiClass(annotationClassName); - checkResult(AnnotatedMembersSearch.search(psiClass, getProjectScope())); + checkResult(getPathToFile(), AnnotatedMembersSearch.search(psiClass, getProjectScope())); } @Override