refactor android kotlin fixture test

- move more setup code to base class
This commit is contained in:
Mikhail Mutcianko
2014-09-01 22:41:49 +04:00
committed by Yan Zhulanow
parent 95b5c94f8d
commit 84d326ed47
2 changed files with 40 additions and 26 deletions
@@ -38,17 +38,9 @@ public abstract class AbstractAndroidCompletionTest : KotlinAndroidTestCase() {
private var kotlinInternalModeOriginalValue: Boolean = false private var kotlinInternalModeOriginalValue: Boolean = false
override fun setUp() { override fun setUp() {
System.setProperty(KotlinAndroidTestCaseBase.SDK_PATH_PROPERTY, PathManager.getHomePath() + "/androidSDK/") System.setProperty(KotlinAndroidTestCaseBase.SDK_PATH_PROPERTY, PathManager.getHomePath() + "/androidSDK/")
System.setProperty(KotlinAndroidTestCaseBase.PLATFORM_DIR_PROPERTY, "android-17") System.setProperty(KotlinAndroidTestCaseBase.PLATFORM_DIR_PROPERTY, "android-17")
super.setUp() super.setUp()
myFixture!!.setTestDataPath(getTestDataPath())
(StartupManager.getInstance(getProject()) as StartupManagerImpl).runPostStartupActivities()
VfsRootAccess.allowRootAccess(JetTestCaseBuilder.getHomeDirectory())
kotlinInternalModeOriginalValue = KotlinInternalMode.enabled
KotlinInternalMode.enabled = true
setAutoCompleteSetting(false) setAutoCompleteSetting(false)
} }
@@ -56,21 +48,6 @@ public abstract class AbstractAndroidCompletionTest : KotlinAndroidTestCase() {
myFixture!!.copyFileToProject("idea/testData/android/AndroidManifest.xml", SdkConstants.FN_ANDROID_MANIFEST_XML) 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<BuiltInsReferenceResolver>(javaClass<BuiltInsReferenceResolver>())!!.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 { private fun setAutoCompleteSetting(value: Boolean): Boolean {
val settings = CodeInsightSettings.getInstance() val settings = CodeInsightSettings.getInstance()
val oldValue: Boolean val oldValue: Boolean
@@ -88,7 +65,7 @@ public abstract class AbstractAndroidCompletionTest : KotlinAndroidTestCase() {
private fun completionType() = CompletionType.BASIC private fun completionType() = CompletionType.BASIC
fun doTest(testPath: String?) { fun doTest(testPath: String?) {
myFixture!!.copyDirectoryToProject("res/", "res") myFixture!!.copyDirectoryToProject(getResDir()!!, "res")
myFixture!!.configureByFile(testPath!! + getTestName(true) + ".kt"); myFixture!!.configureByFile(testPath!! + getTestName(true) + ".kt");
val fileText = FileUtil.loadFile(File(testPath + getTestName(true) + ".kt"), true) val fileText = FileUtil.loadFile(File(testPath + getTestName(true) + ".kt"), true)
testCompletion(fileText, TargetPlatform.JVM, { testCompletion(fileText, TargetPlatform.JVM, {
@@ -101,7 +78,6 @@ public abstract class AbstractAndroidCompletionTest : KotlinAndroidTestCase() {
return PluginTestCaseBase.getTestDataPathBase() + "/android/completion/" + getTestName(true) + "/" return PluginTestCaseBase.getTestDataPathBase() + "/android/completion/" + getTestName(true) + "/"
} }
override fun requireRecentSdk() = true override fun requireRecentSdk() = true
} }
@@ -26,10 +26,17 @@ import com.intellij.codeInspection.ex.GlobalInspectionToolWrapper;
import com.intellij.codeInspection.ex.InspectionManagerEx; import com.intellij.codeInspection.ex.InspectionManagerEx;
import com.intellij.facet.FacetManager; import com.intellij.facet.FacetManager;
import com.intellij.facet.ModifiableFacetModel; import com.intellij.facet.ModifiableFacetModel;
import com.intellij.ide.startup.impl.StartupManagerImpl;
import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.module.Module; import com.intellij.openapi.module.Module;
import com.intellij.openapi.roots.ModuleRootModificationUtil; import com.intellij.openapi.roots.ModuleRootModificationUtil;
import com.intellij.openapi.startup.StartupManager;
import com.intellij.openapi.vfs.VirtualFile; 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.InspectionTestUtil;
import com.intellij.testFramework.builders.JavaModuleFixtureBuilder; import com.intellij.testFramework.builders.JavaModuleFixtureBuilder;
import com.intellij.testFramework.fixtures.IdeaProjectTestFixture; 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.AndroidFacet;
import org.jetbrains.android.facet.AndroidRootUtil; import org.jetbrains.android.facet.AndroidRootUtil;
import org.jetbrains.annotations.NotNull; 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.File;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Set;
@SuppressWarnings({"JUnitTestCaseWithNonTrivialConstructors"}) @SuppressWarnings({"JUnitTestCaseWithNonTrivialConstructors"})
@@ -55,6 +67,8 @@ public abstract class KotlinAndroidTestCase extends KotlinAndroidTestCaseBase {
private boolean myCreateManifest; private boolean myCreateManifest;
protected AndroidFacet myFacet; protected AndroidFacet myFacet;
private boolean kotlinInternalModeOriginalValue;
public KotlinAndroidTestCase(boolean createManifest) { public KotlinAndroidTestCase(boolean createManifest) {
this.myCreateManifest = createManifest; this.myCreateManifest = createManifest;
} }
@@ -62,7 +76,11 @@ public abstract class KotlinAndroidTestCase extends KotlinAndroidTestCaseBase {
public KotlinAndroidTestCase() { public KotlinAndroidTestCase() {
this(true); this(true);
} }
public static void SHIT() {}
@NotNull
protected String getResRelativePath() {
return "res/";
}
@Override @Override
public void setUp() throws Exception { 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 // Unit test class loader includes disk directories which security manager does not allow access to
RenderSecurityManager.sEnabled = false; RenderSecurityManager.sEnabled = false;
} }
((StartupManagerImpl) StartupManager.getInstance(getProject())).runPostStartupActivities();
VfsRootAccess.allowRootAccess(JetTestCaseBuilder.getHomeDirectory());
kotlinInternalModeOriginalValue = KotlinInternalMode.OBJECT$.getEnabled();
KotlinInternalMode.OBJECT$.setEnabled(true);
} }
protected boolean isToAddSdk() { protected boolean isToAddSdk() {
@@ -200,6 +224,12 @@ public abstract class KotlinAndroidTestCase extends KotlinAndroidTestCaseBase {
@Override @Override
public void tearDown() throws Exception { public void tearDown() throws Exception {
KotlinInternalMode.OBJECT$.setEnabled(kotlinInternalModeOriginalValue);
VfsRootAccess.disallowRootAccess(JetTestCaseBuilder.getHomeDirectory());
Set<JetFile> builtInsSources = getProject().getComponent(BuiltInsReferenceResolver.class).getBuiltInsSources();
FileManager fileManager = ((PsiManagerEx) PsiManager.getInstance(getProject())).getFileManager();
myModule = null; myModule = null;
myAdditionalModules = null; myAdditionalModules = null;
myFixture.tearDown(); myFixture.tearDown();
@@ -208,7 +238,15 @@ public abstract class KotlinAndroidTestCase extends KotlinAndroidTestCaseBase {
if (RenderSecurityManager.RESTRICT_READS) { if (RenderSecurityManager.RESTRICT_READS) {
RenderSecurityManager.sEnabled = true; RenderSecurityManager.sEnabled = true;
} }
super.tearDown(); 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) { public AndroidFacet addAndroidFacet(Module module, String sdkPath, String platformDir) {