blob: a6a667a14bf0ccbfcdfa26168912ec03f012ed85 [file] [log] [blame]
package com.intellij.compiler.artifacts;
import com.intellij.openapi.application.PathManager;
import com.intellij.openapi.application.Result;
import com.intellij.openapi.application.WriteAction;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.roots.DependencyScope;
import com.intellij.openapi.roots.ModuleRootModificationUtil;
import com.intellij.openapi.roots.OrderRootType;
import com.intellij.openapi.roots.libraries.Library;
import com.intellij.openapi.roots.libraries.LibraryTablesRegistrar;
import com.intellij.openapi.vfs.JarFileSystem;
import com.intellij.openapi.vfs.LocalFileSystem;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.packaging.artifacts.Artifact;
import com.intellij.packaging.elements.PackagingElement;
import com.intellij.testFramework.VfsTestUtil;
import com.intellij.util.PathUtil;
import org.jetbrains.annotations.Nullable;
import java.io.File;
/**
* @author nik
*/
public abstract class PackagingElementsTestCase extends ArtifactsTestCase {
protected Artifact addArtifact(TestPackagingElementBuilder builder) {
return addArtifact("a", builder);
}
protected Artifact addArtifact(final String name, TestPackagingElementBuilder builder) {
return addArtifact(name, builder.build());
}
protected static void assertLayout(Artifact artifact, String expected) {
assertLayout(artifact.getRootElement(), expected);
}
protected static void assertLayout(PackagingElement element, String expected) {
ArtifactsTestUtil.assertLayout(element, expected);
}
protected String getProjectBasePath() {
return getBaseDir().getPath();
}
protected VirtualFile getBaseDir() {
final VirtualFile baseDir = myProject.getBaseDir();
assertNotNull(baseDir);
return baseDir;
}
protected TestPackagingElementBuilder root() {
return TestPackagingElementBuilder.root(myProject);
}
protected TestPackagingElementBuilder archive(String name) {
return TestPackagingElementBuilder.archive(myProject, name);
}
protected VirtualFile createFile(final String path) {
return createFile(path, "");
}
protected VirtualFile createFile(final String path, final String text) {
return VfsTestUtil.createFile(getBaseDir(), path, text);
}
protected VirtualFile createDir(final String path) {
return VfsTestUtil.createDir(getBaseDir(), path);
}
protected static VirtualFile getJDomJar() {
return getJarFromLibDirectory("jdom.jar");
}
protected static String getLocalJarPath(VirtualFile jarEntry) {
return PathUtil.getLocalFile(jarEntry).getPath();
}
protected static String getJUnitJarPath() {
return getLocalJarPath(getJarFromLibDirectory("junit.jar"));
}
private static VirtualFile getJarFromLibDirectory(final String relativePath) {
final File file = PathManager.findFileInLibDirectory(relativePath);
final VirtualFile virtualFile = LocalFileSystem.getInstance().findFileByIoFile(file);
assertNotNull(file.getAbsolutePath() + " not found", virtualFile);
final VirtualFile jarRoot = JarFileSystem.getInstance().getJarRootForLocalFile(virtualFile);
assertNotNull(jarRoot);
return jarRoot;
}
protected Library addProjectLibrary(final @Nullable Module module, final String name, final VirtualFile... jars) {
return addProjectLibrary(module, name, DependencyScope.COMPILE, jars);
}
protected Library addProjectLibrary(final @Nullable Module module, final String name, final DependencyScope scope,
final VirtualFile... jars) {
return addProjectLibrary(myProject, module, name, scope, jars);
}
static Library addProjectLibrary(final Project project, final @Nullable Module module, final String name, final DependencyScope scope,
final VirtualFile[] jars) {
return new WriteAction<Library>() {
@Override
protected void run(final Result<Library> result) {
final Library library = LibraryTablesRegistrar.getInstance().getLibraryTable(project).createLibrary(name);
final Library.ModifiableModel libraryModel = library.getModifiableModel();
for (VirtualFile jar : jars) {
libraryModel.addRoot(jar, OrderRootType.CLASSES);
}
libraryModel.commit();
if (module != null) {
ModuleRootModificationUtil.addDependency(module, library, scope, false);
}
result.setResult(library);
}
}.execute().getResultObject();
}
protected static void addModuleLibrary(final Module module, final VirtualFile jar) {
ModuleRootModificationUtil.addModuleLibrary(module, jar.getUrl());
}
protected static void addModuleDependency(final Module module, final Module dependency) {
ModuleRootModificationUtil.addDependency(module, dependency);
}
}