From 84d326ed47a3225a7a049ac6b160db18752837e4 Mon Sep 17 00:00:00 2001 From: Mikhail Mutcianko Date: Mon, 1 Sep 2014 22:41:49 +0400 Subject: [PATCH] refactor android kotlin fixture test - move more setup code to base class --- .../android/AbstractAndroidCompletionTest.kt | 26 +----------- .../jet/android/KotlinAndroidTestCase.java | 40 ++++++++++++++++++- 2 files changed, 40 insertions(+), 26 deletions(-) diff --git a/idea/tests/org/jetbrains/jet/android/AbstractAndroidCompletionTest.kt b/idea/tests/org/jetbrains/jet/android/AbstractAndroidCompletionTest.kt index db741e80426..63b3815aeb8 100644 --- a/idea/tests/org/jetbrains/jet/android/AbstractAndroidCompletionTest.kt +++ b/idea/tests/org/jetbrains/jet/android/AbstractAndroidCompletionTest.kt @@ -38,17 +38,9 @@ public abstract class AbstractAndroidCompletionTest : KotlinAndroidTestCase() { private var kotlinInternalModeOriginalValue: Boolean = false override fun setUp() { - System.setProperty(KotlinAndroidTestCaseBase.SDK_PATH_PROPERTY, PathManager.getHomePath() + "/androidSDK/") System.setProperty(KotlinAndroidTestCaseBase.PLATFORM_DIR_PROPERTY, "android-17") - super.setUp() - myFixture!!.setTestDataPath(getTestDataPath()) - (StartupManager.getInstance(getProject()) as StartupManagerImpl).runPostStartupActivities() - VfsRootAccess.allowRootAccess(JetTestCaseBuilder.getHomeDirectory()) - - kotlinInternalModeOriginalValue = KotlinInternalMode.enabled - KotlinInternalMode.enabled = true setAutoCompleteSetting(false) } @@ -56,21 +48,6 @@ public abstract class AbstractAndroidCompletionTest : KotlinAndroidTestCase() { myFixture!!.copyFileToProject("idea/testData/android/AndroidManifest.xml", SdkConstants.FN_ANDROID_MANIFEST_XML) } - override fun tearDown() { - KotlinInternalMode.enabled = kotlinInternalModeOriginalValue - VfsRootAccess.disallowRootAccess(JetTestCaseBuilder.getHomeDirectory()) - - val builtInsSources = getProject()!!.getComponent(javaClass())!!.getBuiltInsSources()!! - val fileManager = (PsiManager.getInstance(getProject()!!) as PsiManagerEx).getFileManager() - - super.tearDown() - // Restore mapping between PsiFiles and VirtualFiles dropped in FileManager.cleanupForNextTest(), - // otherwise built-ins psi elements will become invalid in next test. - for (source in builtInsSources) { - val provider = source.getViewProvider() - fileManager.setViewProvider(provider.getVirtualFile(), provider) - } - } private fun setAutoCompleteSetting(value: Boolean): Boolean { val settings = CodeInsightSettings.getInstance() val oldValue: Boolean @@ -88,7 +65,7 @@ public abstract class AbstractAndroidCompletionTest : KotlinAndroidTestCase() { private fun completionType() = CompletionType.BASIC fun doTest(testPath: String?) { - myFixture!!.copyDirectoryToProject("res/", "res") + myFixture!!.copyDirectoryToProject(getResDir()!!, "res") myFixture!!.configureByFile(testPath!! + getTestName(true) + ".kt"); val fileText = FileUtil.loadFile(File(testPath + getTestName(true) + ".kt"), true) testCompletion(fileText, TargetPlatform.JVM, { @@ -101,7 +78,6 @@ public abstract class AbstractAndroidCompletionTest : KotlinAndroidTestCase() { return PluginTestCaseBase.getTestDataPathBase() + "/android/completion/" + getTestName(true) + "/" } - override fun requireRecentSdk() = true } diff --git a/idea/tests/org/jetbrains/jet/android/KotlinAndroidTestCase.java b/idea/tests/org/jetbrains/jet/android/KotlinAndroidTestCase.java index c743a4c82c8..8b49044e4e5 100644 --- a/idea/tests/org/jetbrains/jet/android/KotlinAndroidTestCase.java +++ b/idea/tests/org/jetbrains/jet/android/KotlinAndroidTestCase.java @@ -26,10 +26,17 @@ import com.intellij.codeInspection.ex.GlobalInspectionToolWrapper; import com.intellij.codeInspection.ex.InspectionManagerEx; import com.intellij.facet.FacetManager; import com.intellij.facet.ModifiableFacetModel; +import com.intellij.ide.startup.impl.StartupManagerImpl; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.module.Module; import com.intellij.openapi.roots.ModuleRootModificationUtil; +import com.intellij.openapi.startup.StartupManager; import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.openapi.vfs.newvfs.impl.VfsRootAccess; +import com.intellij.psi.FileViewProvider; +import com.intellij.psi.PsiManager; +import com.intellij.psi.impl.PsiManagerEx; +import com.intellij.psi.impl.file.impl.FileManager; import com.intellij.testFramework.InspectionTestUtil; import com.intellij.testFramework.builders.JavaModuleFixtureBuilder; import com.intellij.testFramework.fixtures.IdeaProjectTestFixture; @@ -40,11 +47,16 @@ import com.intellij.testFramework.fixtures.impl.CodeInsightTestFixtureImpl; import org.jetbrains.android.facet.AndroidFacet; import org.jetbrains.android.facet.AndroidRootUtil; import org.jetbrains.annotations.NotNull; +import org.jetbrains.jet.JetTestCaseBuilder; +import org.jetbrains.jet.lang.psi.JetFile; +import org.jetbrains.jet.plugin.actions.internal.KotlinInternalMode; +import org.jetbrains.jet.plugin.references.BuiltInsReferenceResolver; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; +import java.util.Set; @SuppressWarnings({"JUnitTestCaseWithNonTrivialConstructors"}) @@ -55,6 +67,8 @@ public abstract class KotlinAndroidTestCase extends KotlinAndroidTestCaseBase { private boolean myCreateManifest; protected AndroidFacet myFacet; + private boolean kotlinInternalModeOriginalValue; + public KotlinAndroidTestCase(boolean createManifest) { this.myCreateManifest = createManifest; } @@ -62,7 +76,11 @@ public abstract class KotlinAndroidTestCase extends KotlinAndroidTestCaseBase { public KotlinAndroidTestCase() { this(true); } - public static void SHIT() {} + + @NotNull + protected String getResRelativePath() { + return "res/"; + } @Override public void setUp() throws Exception { @@ -120,6 +138,12 @@ public abstract class KotlinAndroidTestCase extends KotlinAndroidTestCaseBase { // Unit test class loader includes disk directories which security manager does not allow access to RenderSecurityManager.sEnabled = false; } + + ((StartupManagerImpl) StartupManager.getInstance(getProject())).runPostStartupActivities(); + VfsRootAccess.allowRootAccess(JetTestCaseBuilder.getHomeDirectory()); + + kotlinInternalModeOriginalValue = KotlinInternalMode.OBJECT$.getEnabled(); + KotlinInternalMode.OBJECT$.setEnabled(true); } protected boolean isToAddSdk() { @@ -200,6 +224,12 @@ public abstract class KotlinAndroidTestCase extends KotlinAndroidTestCaseBase { @Override public void tearDown() throws Exception { + KotlinInternalMode.OBJECT$.setEnabled(kotlinInternalModeOriginalValue); + VfsRootAccess.disallowRootAccess(JetTestCaseBuilder.getHomeDirectory()); + + Set builtInsSources = getProject().getComponent(BuiltInsReferenceResolver.class).getBuiltInsSources(); + FileManager fileManager = ((PsiManagerEx) PsiManager.getInstance(getProject())).getFileManager(); + myModule = null; myAdditionalModules = null; myFixture.tearDown(); @@ -208,7 +238,15 @@ public abstract class KotlinAndroidTestCase extends KotlinAndroidTestCaseBase { if (RenderSecurityManager.RESTRICT_READS) { RenderSecurityManager.sEnabled = true; } + super.tearDown(); + + // Restore mapping between PsiFiles and VirtualFiles dropped in FileManager.cleanupForNextTest(), + // otherwise built-ins psi elements will become invalid in next test. + for (JetFile source : builtInsSources) { + FileViewProvider provider = source.getViewProvider(); + fileManager.setViewProvider(provider.getVirtualFile(), provider); + } } public AndroidFacet addAndroidFacet(Module module, String sdkPath, String platformDir) {