Add test for KT-13057 with infrastructure

This commit is contained in:
Pavel V. Talanov
2016-07-20 16:06:31 +03:00
parent 05dd039151
commit 8f006bd4aa
6 changed files with 127 additions and 2 deletions
@@ -79,6 +79,7 @@ import org.jetbrains.kotlin.idea.editor.quickDoc.AbstractQuickDocProviderTest
import org.jetbrains.kotlin.idea.filters.AbstractKotlinExceptionFilterTest
import org.jetbrains.kotlin.idea.folding.AbstractKotlinFoldingTest
import org.jetbrains.kotlin.idea.hierarchy.AbstractHierarchyTest
import org.jetbrains.kotlin.idea.hierarchy.AbstractHierarchyWithLibTest
import org.jetbrains.kotlin.idea.highlighter.*
import org.jetbrains.kotlin.idea.imports.AbstractOptimizeImportsTest
import org.jetbrains.kotlin.idea.intentions.AbstractIntentionTest
@@ -517,6 +518,10 @@ fun main(args: Array<String>) {
model("hierarchy/overrides", extension = null, recursive = false, testMethod = "doOverrideHierarchyTest")
}
testClass<AbstractHierarchyWithLibTest>() {
model("hierarchy/withLib", extension = null, recursive = false)
}
testClass<AbstractMoveStatementTest>() {
model("codeInsight/moveUpDown/classBodyDeclarations", testMethod = "doTestClassBodyDeclaration")
model("codeInsight/moveUpDown/closingBraces", testMethod = "doTestExpression")
@@ -0,0 +1,6 @@
<node text="Object (java.lang)">
<node text="Enum (java.lang)" base="true">
<node text="One ()"/>
<node text="G ()"/>
</node>
</node>
+9
View File
@@ -0,0 +1,9 @@
// BASE_CLASS: java.lang.Enum
enum class One {
One, Two
}
enum class G {
A, B
}
@@ -53,7 +53,7 @@ Test accept more than one file, file extension should be .java or .kt
*/
public abstract class AbstractHierarchyTest extends KotlinHierarchyViewTestBase {
private String folderName;
protected String folderName;
protected void doTypeClassHierarchyTest(@NotNull String folderName) throws Exception {
this.folderName = folderName;
@@ -180,7 +180,7 @@ public abstract class AbstractHierarchyTest extends KotlinHierarchyViewTestBase
return context;
}
private String[] getFilesToConfigure() {
protected String[] getFilesToConfigure() {
final List<String> files = new ArrayList<String>(2);
FileUtil.processFilesRecursively(new File(folderName), new Processor<File>() {
@Override
@@ -0,0 +1,62 @@
/*
* Copyright 2010-2016 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.hierarchy
import com.intellij.ide.hierarchy.HierarchyBrowserBaseEx
import com.intellij.ide.hierarchy.type.TypeHierarchyTreeStructure
import com.intellij.openapi.util.Computable
import com.intellij.psi.PsiClass
import com.intellij.psi.impl.java.stubs.index.JavaFullClassNameIndex
import com.intellij.psi.search.GlobalSearchScope
import org.jetbrains.kotlin.idea.test.ModuleKind
import org.jetbrains.kotlin.idea.test.configureAs
import org.jetbrains.kotlin.test.InTextDirectivesUtils
import org.jetbrains.kotlin.test.KotlinTestUtils
import java.io.File
abstract class AbstractHierarchyWithLibTest : AbstractHierarchyTest() {
override fun setUp() {
super.setUp()
myModule.configureAs(ModuleKind.KOTLIN_JVM_WITH_STDLIB_SOURCES)
}
protected fun doTest(folderName: String) {
this.folderName = folderName
val filesToConfigure = filesToConfigure
val file = filesToConfigure.first()
val directive = InTextDirectivesUtils.findLinesWithPrefixesRemoved(
File("${KotlinTestUtils.getHomeDirectory()}/$folderName/$file").readText(),
"// BASE_CLASS: "
).singleOrNull() ?: error("File should contain BASE_CLASS directive")
val targetClass = findTargetJavaClass(directive.trim())
doHierarchyTest(
Computable {
TypeHierarchyTreeStructure(
project,
targetClass,
HierarchyBrowserBaseEx.SCOPE_PROJECT)
}, *filesToConfigure)
}
private fun findTargetJavaClass(targetClass: String): PsiClass {
return JavaFullClassNameIndex.getInstance().get(targetClass.hashCode(), project, GlobalSearchScope.allScope(project)).find {
it.qualifiedName == targetClass
} ?: error("Could not find java class: $targetClass")
}
}
@@ -0,0 +1,43 @@
/*
* Copyright 2010-2016 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.hierarchy;
import com.intellij.testFramework.TestDataPath;
import org.jetbrains.kotlin.test.JUnit3RunnerWithInners;
import org.jetbrains.kotlin.test.KotlinTestUtils;
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/hierarchy/withLib")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)
public class HierarchyWithLibTestGenerated extends AbstractHierarchyWithLibTest {
public void testAllFilesPresentInWithLib() throws Exception {
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/hierarchy/withLib"), Pattern.compile("^([^\\.]+)$"), false);
}
@TestMetadata("enum")
public void testEnum() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/hierarchy/withLib/enum/");
doTest(fileName);
}
}