blob: ad0318964a92c0a10746d22e50a856592404f545 [file] [log] [blame]
package com.intellij.compiler.artifacts;
import com.intellij.compiler.BaseCompilerTestCase;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.roots.DependencyScope;
import com.intellij.openapi.roots.libraries.Library;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.vfs.JarFileSystem;
import com.intellij.openapi.vfs.LocalFileSystem;
import com.intellij.openapi.vfs.VfsUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.packaging.artifacts.Artifact;
import com.intellij.packaging.artifacts.ArtifactType;
import com.intellij.packaging.artifacts.ModifiableArtifactModel;
import com.intellij.packaging.elements.CompositePackagingElement;
import com.intellij.packaging.impl.artifacts.PlainArtifactType;
import com.intellij.util.io.TestFileSystemBuilder;
import com.intellij.util.io.TestFileSystemItem;
import org.jetbrains.annotations.Nullable;
import java.io.File;
import java.io.IOException;
import static com.intellij.compiler.artifacts.ArtifactsTestCase.commitModel;
/**
* @author nik
*/
public abstract class ArtifactCompilerTestCase extends BaseCompilerTestCase {
protected void deleteArtifact(final Artifact artifact) {
final ModifiableArtifactModel model = getArtifactManager().createModifiableModel();
model.removeArtifact(artifact);
commitModel(model);
}
protected Artifact addArtifact(TestPackagingElementBuilder builder) {
return addArtifact("a", builder);
}
protected Artifact addArtifact(final String name, TestPackagingElementBuilder builder) {
return addArtifact(name, builder.build());
}
protected Artifact addArtifact(String name, final CompositePackagingElement<?> root) {
return addArtifact(name, PlainArtifactType.getInstance(), root);
}
protected Artifact addArtifact(final String name, final ArtifactType type, final CompositePackagingElement<?> root) {
return getArtifactManager().addArtifact(name, type, root);
}
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 PackagingElementsTestCase.addProjectLibrary(myProject, module, name, scope, jars);
}
protected TestPackagingElementBuilder root() {
return TestPackagingElementBuilder.root(myProject);
}
protected TestPackagingElementBuilder archive(String name) {
return TestPackagingElementBuilder.archive(myProject, name);
}
protected CompilationLog compileProject() {
return make(getArtifactManager().getArtifacts());
}
protected void changeFileInJar(String jarPath, String pathInJar) throws Exception {
final VirtualFile jarFile = LocalFileSystem.getInstance().findFileByPath(jarPath);
assertNotNull(jarFile);
final VirtualFile jarRoot = JarFileSystem.getInstance().getJarRootForLocalFile(jarFile);
assertNotNull(jarRoot);
VirtualFile jarEntry = jarRoot.findFileByRelativePath(pathInJar);
assertNotNull(jarEntry);
assertNotNull(jarFile);
changeFile(jarFile);
jarFile.refresh(false, false);
jarEntry = jarRoot.findFileByRelativePath(pathInJar);
assertNotNull(jarEntry);
}
protected static TestFileSystemBuilder fs() {
return TestFileSystemItem.fs();
}
public static void assertNoOutput(Artifact artifact) {
final String outputPath = artifact.getOutputPath();
assertNotNull("output path not specified for " + artifact.getName(), outputPath);
assertFalse(new File(FileUtil.toSystemDependentName(outputPath)).exists());
}
public static void assertEmptyOutput(Artifact a1) throws IOException {
assertOutput(a1, ArtifactCompilerTestCase.fs());
}
public static void assertOutput(Artifact artifact, TestFileSystemBuilder item) {
final VirtualFile outputFile = getOutputDir(artifact);
outputFile.refresh(false, true);
item.build().assertDirectoryEqual(VfsUtil.virtualToIoFile(outputFile));
}
protected static VirtualFile getOutputDir(Artifact artifact) {
final String output = artifact.getOutputPath();
assertNotNull("output path not specified for " + artifact.getName(), output);
final VirtualFile outputFile = LocalFileSystem.getInstance().refreshAndFindFileByPath(output);
assertNotNull("output file not found " + output, outputFile);
return outputFile;
}
}