Accelerated navigation to library tests by compiling test library once.

This commit is contained in:
Evgeny Gerashchenko
2012-12-18 21:11:03 +04:00
parent e131cc1e83
commit e49459f2cd
@@ -21,6 +21,7 @@ import com.intellij.openapi.roots.ModifiableRootModel;
import com.intellij.openapi.roots.ModuleRootManager; import com.intellij.openapi.roots.ModuleRootManager;
import com.intellij.openapi.roots.OrderRootType; import com.intellij.openapi.roots.OrderRootType;
import com.intellij.openapi.roots.libraries.Library; import com.intellij.openapi.roots.libraries.Library;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.openapi.vfs.LocalFileSystem;
import com.intellij.openapi.vfs.VfsUtilCore; import com.intellij.openapi.vfs.VfsUtilCore;
import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.VirtualFile;
@@ -28,11 +29,15 @@ import com.intellij.openapi.vfs.VirtualFileVisitor;
import com.intellij.openapi.vfs.newvfs.NewVirtualFile; import com.intellij.openapi.vfs.newvfs.NewVirtualFile;
import com.intellij.testFramework.PlatformTestCase; import com.intellij.testFramework.PlatformTestCase;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.JetTestUtils;
import org.jetbrains.jet.cli.common.ExitCode; import org.jetbrains.jet.cli.common.ExitCode;
import org.jetbrains.jet.cli.jvm.K2JVMCompiler; import org.jetbrains.jet.cli.jvm.K2JVMCompiler;
import org.jetbrains.jet.plugin.PluginTestCaseBase; import org.jetbrains.jet.plugin.PluginTestCaseBase;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.io.PrintStream;
/** /**
* @author Evgeny Gerashchenko * @author Evgeny Gerashchenko
@@ -41,11 +46,28 @@ import java.io.IOException;
public abstract class AbstractNavigateToLibraryTest extends PlatformTestCase { public abstract class AbstractNavigateToLibraryTest extends PlatformTestCase {
protected static final String PACKAGE = "testData.libraries"; protected static final String PACKAGE = "testData.libraries";
protected static final String TEST_DATA_PATH = PluginTestCaseBase.getTestDataPathBase() + "/libraries"; protected static final String TEST_DATA_PATH = PluginTestCaseBase.getTestDataPathBase() + "/libraries";
protected static final String SOURCES_PATH = TEST_DATA_PATH + "/library";
private static File tempDirWithCompiled;
protected VirtualFile libraryDir; protected VirtualFile libraryDir;
protected VirtualFile librarySourceDir; protected VirtualFile librarySourceDir;
protected abstract boolean isWithSources(); protected abstract boolean isWithSources();
@NotNull
private static File getTempDirWithCompiled() throws Exception {
if (tempDirWithCompiled == null) {
tempDirWithCompiled = JetTestUtils.tmpDir("dummylib");
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
ExitCode compilerExec = new K2JVMCompiler().exec(
new PrintStream(outStream), "-src", SOURCES_PATH, "-output", tempDirWithCompiled.getAbsolutePath());
assertEquals(new String(outStream.toByteArray()), ExitCode.OK, compilerExec);
}
return tempDirWithCompiled;
}
@Override @Override
protected void setUp() throws Exception { protected void setUp() throws Exception {
super.setUp(); super.setUp();
@@ -73,14 +95,10 @@ public abstract class AbstractNavigateToLibraryTest extends PlatformTestCase {
return true; return true;
} }
}); });
librarySourceDir = LocalFileSystem.getInstance().findFileByPath(TEST_DATA_PATH + "/library"); librarySourceDir = LocalFileSystem.getInstance().findFileByPath(SOURCES_PATH);
assertNotNull(librarySourceDir); assertNotNull(librarySourceDir);
FileUtil.copyDir(getTempDirWithCompiled(), new File(libraryDir.getPath()));
ExitCode compilerExec =
new K2JVMCompiler().exec(System.out, "-src", librarySourceDir.getPath(), "-output", libraryDir.getPath());
assertEquals(ExitCode.OK, compilerExec);
assertNotNull(libraryDir);
((NewVirtualFile)libraryDir).markDirtyRecursively(); ((NewVirtualFile)libraryDir).markDirtyRecursively();
libraryDir.refresh(false, true); libraryDir.refresh(false, true);